我有一个小的Hadoop集群,有5个数据节点和1个名称节点,所有4个核心/ 4个线程机器,每个4GB RAM,除了一个具有8GB RAM的数据节点。
他们都运行RHEL 6 x86_64。 HBase版本为1.2,Phoenix版本为4.14
我通过Phoenix Query Server和“瘦”JDBC客户端连接到Apache Phoenix。 Phoenix Query Server正在名称节点上运行。
我试图插入〜2000个元组,每10分钟~25列,该表已经插入了超过200万个元组,但有时我会在表单中获得异常:
引起:java.lang.OutOfMemoryError:无法创建新的本机线程[...]原因:AvaticaClientRuntimeException:远程驱动程序错误:RuntimeException:org.apache.phoenix.execute.CommitException:java.lang.RuntimeException:java.lang .OutOfMemoryError:无法创建新的本机线程 - > CommitException:java.lang.RuntimeException:java.lang.OutOfMemoryError:无法创建新的本机线程 - > RuntimeException:java.lang.OutOfMemoryError:无法创建新的本机线程 - > OutOfMemoryError :无法创建新的本机线程。错误-1(00000)为空
Phoenix Query Server正在名称节点上运行,我不确定是什么问题。
它不是一个真正的OutOfMemoryException,但好像它创建了许多线程并且用完了它们?
我已经尝试过做一个ps aux而且我看不到Phoenix Query Server进程创建了超过50个线程,这些方式远远低于普通Linux安装中的线程限制。
也许它真的耗尽内存并且无法创建本机线程是一种症状?
我编辑的结果是,Hadoop进程运行的用户对新进程的限制太低了
/etc/security/limits.conf
附:
user - nproc 32768
它奏效了。我没有看到特定的线程数限制,但增加进程数限制就可以了。
我还读到了群集也需要增加打开文件数限制:
user - nofile 32768
我这样设置以避免将来出现问题。