1.regionserver意外挂掉,regionserver日志没有明显异常,datanode有异常日志
S201:50010:DataXceiver error processing READ_BLOCK operation src: /10.0.5.218:56496 dst: /10.0.4.201:50010
S250:50010:DataXceiver error processing WRITE_BLOCK operation src: /10.0.4.250:50966 dst: /10.0.4.250:50010
java.io.IOException: Premature EOF from inputStream
问题原因
文件操作超租期,实际上就是data stream操作过程中文件被删掉了。通常是因为Mapred多个task操作同一个文件,一个task完成后删掉文件导致。这个错误跟dfs.datanode.max.transfer.threads参数到达上限有关。
a.修改数据传输线程个数
dfs.datanode.max.xcievers,dfs.datanode.max.transfer.threads 16384
b.修改进程最大文件打开数量:
/etc/security/limits.conf
# End of file
* - nofile 65536
* - nproc 65536
2.regionserver因OOM挂掉
HBASE_REGIONSERVER_OPTS=-Xms2147483648 -Xmx2147483648 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/tmp/hbase_hbase-REGIONSERVER-f32ca6a4a5bb333ede80d96111f1f09e_pid{{PID}}.hprof -XX:OnOutOfMemoryError={{AGENT_COMMON_DIR}}/killparent.sh
其中-Xms2147483648 -Xmx2147483648代表了regionserver的堆内存大小,默认只有50M,很明显太小,所以调整至2G以上