我有一个小小的hadoop集群,有5个数据节点和1个名称节点,除了一个数据节点有8gb的ram外,其余都是4核/4线程的机器,每个机器都有4gb的ram。
他们都在运行RHEL6x86u64。hbase版本为1.2,phoenix版本为4.14
我通过phoenix查询服务器和“瘦”jdbc客户机连接到apachephoenix。phoenix查询服务器正在名称节点上运行。
我正在尝试向上插入~2000个元组,每10分钟插入~25列,表中已经插入了超过200万个元组,但有时会出现以下形式的异常:
原因:java.lang.outofmemoryerror:无法创建新的本机线程[…]原因:avaticclientruntimeexception:远程驱动程序错误:runtimeexception:org.apache.phoenix.execute.commitexception:java.lang.runtimeexception:java.lang.outofmemoryerror:无法创建新的本机线程->commitexception:java.lang.runtimeexception:java.lang.outofmemoryerror:无法创建新的本机线程->运行时异常:java.lang.outofmemoryerror:无法创建新的本机线程->outofmemoryerror:无法创建新的本机线程。错误-1(00000)null
phoenix查询服务器正在名称节点上运行,我不确定出了什么问题。
它不是一个实际的outofmemoryexception,但好像它正在创建许多线程并耗尽它们?
我试过做一个ps-aux,但是我看不到phoenix查询服务器进程创建了超过50个线程,这比普通linux安装中的线程限制要小得多。
也许真的是内存不足,无法创建本机线程是一种症状?
1条答案
按热度按时间nnsrf1az1#
原来hadoop进程运行的用户对新进程的限制太低了,我编辑过
/etc/security/limits.conf文件
使用:
而且成功了。我没有看到特定的线程计数限制,但是增加进程计数限制就可以了。
我还了解到,集群也需要增加打开文件计数限制:
我这样做是为了避免将来的问题。