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