为了调试源码,我们最好只启动一个regionserver。
为了避免在调试过程中由于请求超时而导致地调试中断,可以适当的延长请求的超时时间,修改hbase-site.xml文件中的zookeeper.session.timeout和hbase.zookeeper.property.tickTime的参数值,其中,timeout应该取2-20倍tickTime之间的值。生产环境上timeout最好不要超过1分钟,此处为了调试,我们设置为1个小时。
<property> <name>zookeeper.session.timeout</name> <value>3600000</value> </property> <property> <name>hbase.zookeeper.property.tickTime</name> <value>180000</value> </property>然后修改hbase-2.1.5/conf/hbase-env.sh中的JVM启动参数
export HBASE_OPTS="$HBASE_OPTS -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"需要注意的是:由于一个节点可能兼任多种角色,一定在恰当的位置添加调试参数,如果位置不当,后续的服务在启动时如果也重复要求占用调试端口,而该端口已经被前面启动的服务所占用,这就会导致后续的服务无法启动。比如:当一个node既是hbase master又是hbase regionserver时,如果你在hbase脚本的不正确的位置上加入调试参数,如果hbase master先启动,并且占用了调试端口,那么后续的hbase regionserver服务无法启动了,反过来如果是hbase regionserver服务先启动,那么hbase master就无法启动了。
这里只需要修改一下host即可。
好了,启动hbase集群,启动IDEdebug,就可以愉快的玩耍了。
开启调试启动hbase服务后,可能jps会展示异常main class information unavailable,不过这不影响服务正常运行。
[root@node8 logs]# jps 9560 Jps 7967 -- main class information unavailable如果出现启动regionserver服务卡住的情况,IDE中开启一下断点调试就好了,不知道为什么。