Hbase Thrift集群问题总结(1)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wwlhz/article/details/79931211

Hbase thrift 1 问题汇总

Hbase thrift 启动线程池:./bin/hbase thrift start -threadpool , 报下面的错误:

Exception in thread "thrift-worker-103" java.lang.OutOfMemoryError: unable to create new native thread
at java.lang.Thread.start0(Native Method)
at java.lang.Thread.start(Thread.java:713)
at java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:949)
at java.util.concurrent.ThreadPoolExecutor.processWorkerExit(ThreadPoolExecutor.java:1017)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1163)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)

原因:
系统线程数太少,增加nproc线程数

修改/etc/security/limits.conf 中指定用户的线程最大个数

*    soft    nofile    65536
*    hard    nofile    65536
xxx soft nproc  65535
xxx hard nproc  65535
xxx soft stack  1024
xxx hard stack  1024

xxx是hbase运行的用户。

同时可以调整服务所占内存的最小/最大值,具体数值根据硬件配置而定。

修改hbase/conf/hbase-env.sh配置文件:

export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS $HBASE_JMX_BASE -Xmx20g -Xms10g -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70"
export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS $HBASE_JMX_BASE -Xmx20g -Xms10g  -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70 -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps"
export HBASE_THRIFT_OPTS="$HBASE_THRIFT_OPTS $HBASE_JMX_BASE -Xms10g -Xmx20g"
export HBASE_HEAPSIZE=8000

这里把Master、Region Server、Thrift的内存大小都改为:10g、20g

堆大小改为80g

把所有的hbase节点都做了同样的修改。

重启服务后,问题解决。可以通过ps -ef | grep master进程号 看到内存确实由之前的默认1g改为10g了。

Thrift服务启动有两种方式:
1. 每个节点上启动thrift服务

./bin/hbase-daemon.sh start thrift
  1. 仅在Master上启动线程池服务
./bin/hbase thrift start -threadpool

由于系统Hbase集群节点数很多,第二种方式更简单些

其他的优化配置还包括:超时时间间隔、最小/最大 thrift工作线程等,都在hbase-site.xml中:

<property>
        <name>hbase.regionserver.handler.count</name>
        <value>400</value>
    </property>
    <property>
            <name>hbase.thrift.minWorkerThreads</name>
                <value>1000</value>
        </property>
    <property>
            <name>hbase.thrift.maxWorkerThreads</name>
                <value>2000</value>
        </property>
    <property>
             <name>hbase.thrift.server.socket.read.timeout</name>
             <value>6000000</value>
             <description>eg:milisecond</description>
     </property>
    <property>
             <name>hbase.regionserver.thrift.maxreadlength</name>
             <value>0</value>
             <description>0:not check data length</description>
     </property>

其他优化,还需要调整系统的打开文件数、栈大小等。

ulimit -a

参考:
https://blog.csdn.net/wolf_soul/article/details/62045732

https://blog.csdn.net/lulynn/article/details/46415805

猜你喜欢

转载自blog.csdn.net/wwlhz/article/details/79931211