这个问题我去网上搜索了一下,发现了很多的解决方案都是增加的nproc数量,即用户最大线程数的数量,但我修改了并没有解决问题,最终是通过修改hadoop集群的最大线程数解决问题的。
并且网络上的回答多数关于增加nproc的答案不完整,我这里顺便记录一下。
用户最大线程数可以通过linux下的命令
ulimit -a
查看,屏幕输出中的max user processes就是用户最大线程数,默认通常为1024.
修改这个参数的地方是在/etc/security/limits.conf以及/etc/security/limits.d/90-nproc.conf(可能这个文件的名字会不一样)
/etc/security/limits.conf修改如下
* soft nofile 65536
* hard nofile 65536
xxx soft nproc 65535
xxx hard nproc 65535
其中 xxx表示启动hbase的用户,如使用hadoop启动hbase,则配置如下:
hadoop hard nproc 65535
hadoop soft nproc 65535
这里说明一下,noproc 是代表最大进程数,nofile 是代表最大文件打开数
然后,一般来说,修改ulimit的数值,只需要修改/etc/security/limits.conf即可,但是这个参数需要修改/etc/security/limits.d/90-nproc.conf。
至于为什么需要修改这里,可以看看这篇
blog
。
在里面添加
hadoop hard nproc 65535
hadoop soft nproc 65535
就修改成功啦。
但这个修改并没有让我的问题得到解决。我从java.lang.OutOfMemoryError入手,怀疑是否是Hbase或者是DataNode的Jvm进程内存不足导致内存溢出。于是使用jmap -heap命令分别查看了各个节点的DataNode,确实发现了有一些DataNode的老年代占有率过高,于是修改hadoop配置文件HADOOP_HOME/etc/hadoop/hadoop-env.sh。在最后添加
export HADOOP_DATANODE_OPTS="-Xmx8192m -Xms256m -Dcom.sun.management.jmxremote $HADOOP_DATANODE_OPTS"
这个配置的作用是将DataNode的最大内存加到8G,在各个节点修改配置文件,重启DataNode。
再次启动spark读取hbase,确实有一点点改善,但最终还是会报错。
这次我再去查看了hadoop的日志,发现了不一样的错误,java.io.IOException: Premature EOF from inputStream。
再去网上查,发现其原因是文件操作超租期,实际上就是data stream操作过程中文件被删掉了。通常是因为Mapred多个task操作同一个文件,一个task完成后删掉文件导致。这个错误跟dfs.datanode.max.transfer.threads参数到达上限有关。这个是datanode同时处理请求的任务上限,总默认值是 4096,该参数取值范围[1 to 8192]。
这不正是和unable to create new native thread有关吗,继续修改整个集群,在HADOOP_HOME/etc/hadoop/hdfs-site.xml中增加以下配置
<property>
<name>dfs.datanode.max.transfer.threads</name>
<value>8192</value>
</property>
再次启动spark任务,操作成功!!
如何使用MaxCompute Spark读写阿里云Hbase
通过Spark on MaxCompute来访问阿里云的Hbase,需要设置网络安全组、Hbase的白名单和配置Spark的参数
X-Pack Spark可以使用Spark on HBase Connector直接对接HBase数据库,读取HBase数据表数据。有时在读取HBase时需要设置HBase的一些参数调整性能,例如通过设置hbase.client.scanner.caching的大小调整读取HBase数据的性能。
数据库云HBase 版本spark服务支持D1机型
信息摘要: 数据库云HBase 版本spark服务支持D1机型,适合起步超过20T数据库的大客户,每GB存储单价最低。适用客户: 大企业版本/规格功能: spark支持D1机型产品文档: 数据库云HBase 版本spark服务支持D1机型,具体spark服务参考https://help.
线下沙龙最全资料下载往期回顾
阿里云栖开发者沙龙 - BigData NoSQL Meetup(上海站)【精彩直播+最全资料下载】阿里云栖开发者沙龙 - BigData NoSQL Meetup(上海站)业内大咖齐聚,各大技术社区支持,与你畅聊 BigData NoSQL中国HBase技术社区第十届meetup——HBase生态实践(杭州站)
中国HBase技术社区第十届meetup——HBase生态实践(杭州站)回顾,4位数据库技术大咖共话HBase技术实践。
本文介绍如何在本地IDEA远程调试Spark On HBase。
前提条件:
1、已经安装了Intellij IDEA,Git、Maven。2、HBase集群开通了外网地址。3、HBase集群为IDEA运行的机器开通了白名单。
基于HBase和Spark构建企业级数据处理平台
阿里云HBase X-Pack是基于Apache HBase及HBase生态构建的低成本、一站式数据处理平台,其支持Spark、二级索引、全文查询、图、时序、时空、分析等能力。