如何远程调试HBase协处理器 - RegionObserver?
我正在使用Cloudera Quickstart。
关于它有一个question,但没有关于在哪里放置exec
命令的信息。
我也尝试了this instructions,但HBase并没有从那开始。
那么远程调试协处理器的正确方法是什么?
你没有提到你使用的IDE,但这里是我如何获得IntelliJ的设置。
选择运行/调试 - >添加新配置(+符号) - >远程 - >填写区域服务器运行的主机名(如果在本地运行HBase,则将其保留到localhost)。就我而言,主机名是skdevhad6.dev.dszn.cz
。
接下来,编辑hbase-env.sh
文件并找到HBASE_OPTS
环境值设置。你应该添加:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:5005
这将确保JDB将使用JDB传输协议侦听端口0.0.0.0
上的所有接口(5005
)。
这就是HBASE_OPTS
后来的样子:
export HBASE_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=0.0.0.0:5005 -XX:+UseG1GC -XX:MaxGCPauseMillis=50 -XX:-ResizePLAB -XX:ParallelGCThreads=24 -XX:-OmitStackTraceInFastThrow -XX:+ParallelRefProcEnabled"
优选地,如果您有多个HBase区域服务器,也可以将这些设置应用于它们,以便您可以选择稍后要调试的区域(只需在IntelliJ中添加另一个远程调试设置)。
现在,重新启动已应用更新的HBASE_OPTS
版本的所有区域服务器。如果重新启动成功,请继续并从IntelliJ运行远程调试会话。
如果您看到类似这样的内容,则表示调试器已附加,您可以将断点放在任何位置。
来吧试试吧:) HF!
如果安装失败并且您无法连接到远程JDB,请检查区域服务器是否实际侦听您在所有接口上指定的端口:
$ ss -tunlp | grep 5005 # where 5005 is the port it should listen to
tcp LISTEN 0 1 *:5005 *:* users:(("java",pid=28364,fd=5))
如果是,请检查服务器的防火墙:
$ iptables -L
如果到端口的传入流量受到限制,那么您已发现问题。