我在使用Hbase时遇到以下问题.
我有一个脚本,该脚本启动HBase Shell,并用单列将许多行插入到表中.我尝试插入10,000行,但是在大约1,700之后,我得到了可怕的“ java.lang.OutOfMemoryError:无法创建新的本机线程”错误.我试图将Java堆大小从默认的1000mb更改为1800mb,但这不允许我插入超过1700左右的行.
但是,我注意到我可以插入1000行,退出外壳程序,重新启动外壳程序,在同一表中再插入1000行,再次退出,依此类推.我对JVM的了解不多,无法弄清楚为什么它允许我在多个会话中执行此操作,但不允许我在同一会话中批量插入.
有人可以告诉我这里发生了什么,我会怎么做?
编辑:
我现在使用带有Java 1.6的64位计算机,red hat linux 5.我给HBase的堆大小为20gb(我总共有约32个演出).
对于堆栈大小,我给出了8mb.我相信64位元的预设值为2mb;使用2mb时,我会遇到同样的错误,将其增加到8mb根本没有帮助(无论堆栈大小,我只能插入相同数量的行,〜1700).
我已经读到减小堆大小可以使此错误消失,但这也没有帮助.以下是我正在设置的jvm选项(除了堆栈大小,所有其他都是默认的).
HBASE_OPTS="$HBASE_OPTS -ea -Xss8M -XX:+HeapDumpOnOutOfMemoryError -XX:+UseConcmarkSweepGC -XX:+CMSIncrementalMode"
解决方法:
我昨天遇到此错误.在我的情况下,发生的事情是我创建了许多HTable实例,这些实例在我使用记录上的记录时创建了太多线程. (我正在使用一个映射器,并在map函数中创建它)
我将检查您是否已经在循环或映射函数内部创建了很多与HBase的连接.如果发生了这种情况,则将其移动以实例化与HBase的较少连接(我使用了HTable)可以解决此问题.
它解决了我的问题.
高温超导
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。