我有一个很小的Hadoop集群,有5个数据节点和1个名称节点,所有4核/4线程机器,每个机器有4GB的RAM,除了一个数据节点有8GB的RAM。
它们都运行RHEL 6x86_64HBase版本是1.2,Phoenix版本是4.14
我正在通过Phoenix查询服务器和“瘦”JDBC客户端连接到Apache Phoenix。Phoenix查询服务器在名称节点上运行。
我试图up0018~2000元组,~25列每10分钟,表已经插入了超过200万元组,但有时我在表单中遇到异常:
由以下原因引起:java. lang.OutOfMemoryError:无法创建新的本机线程[…]由以下原因引起:AvaticaClientRuntimeException:远程驱动程序错误:RuntimeException:org.apache.phoenix.执行。提交异常:java.lang.RuntimeException:java.lang.OutOfMemoryError:无法创建新的本机线程-
Phoenix查询服务器在名称节点上运行,我不确定出了什么问题。
它不是一个实际的OutOfMemoryException,但好像它正在创建许多线程并用完它们?
我试过做一个ps aux,我看不到Phoenix查询服务器进程创建超过50个线程,这是一种方式,远远低于正常Linux安装中的线程限制。
也许它真的是内存溢出,无法创建本机线程是一个症状?
原来Hadoop进程运行的用户对新进程的限制太低了,我编辑
/etc/security/limits.conf
与:
user - nproc 32768
它奏效了。我没有看到特定的线程数限制,但增加进程数限制确实奏效了。
我还读到集群也需要增加打开文件计数限制:
user - nofile 32768
我这样设置是为了避免将来出现问题。