配置Jolokia采集Hadoop节点JVM指标失败,求解决方案
确认
hadoop-env.sh参数格式正确性
正确的-javaagent参数写法如下,注意替换成实际的jar包绝对路径和未冲突的端口:export HADOOP_NAMENODE_OPTS="-javaagent:/实际绝对路径/jolokia-jvm-agent.jar=port=8778,host=0.0.0.0 $HADOOP_NAMENODE_OPTS" export HADOOP_DATANODE_OPTS="-javaagent:/实际绝对路径/jolokia-jvm-agent.jar=port=8779,host=0.0.0.0 $HADOOP_DATANODE_OPTS"两点关键:一是必须把原有
HADOOP_*_OPTS追加在参数末尾,避免覆盖Hadoop默认配置;二是用ls -l /实际绝对路径/jolokia-jvm-agent.jar确认Hadoop运行用户有读取该jar包的权限。彻底重启Hadoop服务
不要用restart命令,先手动停止服务并确认进程完全退出:hdfs --daemon stop namenode hdfs --daemon stop datanode jps # 确认NameNode、DataNode进程已消失再重新启动服务:
hdfs --daemon start namenode hdfs --daemon start datanode查看服务启动日志定位报错
进入Hadoop日志目录(默认是$HADOOP_LOG_DIR),打开NameNode和DataNode的日志文件,搜索jolokia关键字,检查是否存在加载失败提示——比如jar包路径错误、端口被占用、权限不足等问题,日志会明确给出原因。检查端口监听状态
用以下命令确认Jolokia配置的端口是否处于监听状态:netstat -tulpn | grep 8778 # 或使用ss命令 ss -tulpn | grep 8778如果端口被其他进程占用,直接修改Jolokia的
port参数更换未使用的端口即可。验证Jolokia Agent本身可用性
手动用Java命令测试Agent是否正常工作:java -javaagent:/实际绝对路径/jolokia-jvm-agent.jar=port=8778 -version执行后检查端口监听情况,再访问
http://localhost:8778/jolokia/,如果能返回JSON格式响应,说明Agent本身无问题,问题出在Hadoop配置环节。核对版本兼容性
确保Jolokia Agent版本与Hadoop使用的JDK匹配:JDK8对应Jolokia 1.6.x及以上版本,JDK11+对应Jolokia 1.7.x及以上版本,老旧Agent可能存在JDK兼容性问题。
内容的提问来源于stack exchange,提问作者Rahman The Man

