hadoop是通过docker部署的 ,在docker中添加监控端口和监控进程
vi namenode.yaml
startDelaySeconds: 0 hostPort: localhost:1234 #1234为想设置的jmx端口(可设置为未被占用的端口) ssl: false lowercaseOutputName: false lowercaseOutputLabelNames: false
vi datanode.yaml
startDelaySeconds: 0 hostPort: localhost:1235 #1235为想设置的jmx端口(可设置为未被占用的端口) ssl: false lowercaseOutputName: false lowercaseOutputLabelNames: false
进入到hadoop节点容器中去
docker exec -ti hadoopnode1 bash cd /usr/local mkdir prometheus_jmx_export_0.3.1
将以上的jar、namenode.yml、datanode.yaml拷贝到hadoop容器 /usr/local/prometheus_jmx_export_0.3.1 目录下
docker cp namenode.yaml hadoopnode1:/usr/local/prometheus_jmx_export_0.3.1 docker cp datanode.yaml hadoopnode1:/usr/local/prometheus_jmx_export_0.3.1 docker cp jmx_prometheus_javaagent-0.3.1.jar hadoopnode1:/usr/local/prometheus_jmx_export_0.3.1
编辑修改hadoop-env.sh
vi /usr/local/hadoop/etc/hadoop/hadoop-env.sh 9222是暴露的namenode的监控日志采集 9322是暴露的datanode的监控日志采集 export HADOOP_NAMENODE_JMX_OPTS="-Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.port=1234 -javaagent:/usr/local/prometheus_jmx_export_0.3.1/jmx_prometheus_javaagent-0.3.1.jar=9222:/usr/local/prometheus_jmx_export_0.3.1/namenode.yaml" export HADOOP_DATANODE_JMX_OPTS="-Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.port=1235 -javaagent:/usr/local/prometheus_jmx_export_0.3.1/jmx_prometheus_javaagent-0.3.1.jar=9322:/usr/local/prometheus_jmx_export_0.3.1/datanode.yaml"
修改hdfs启动参数
vi /usr/local/hadoop/bin/hdfs 在namenode添加如下参数 CLASS='org.apache.hadoop.hdfs.server.namenode.NameNode' HADOOP_OPTS="$HADOOP_OPTS $HADOOP_NAMENODE_JMX_OPTS $HADOOP_NAMENODE_OPTS" 在datanode添加如下参数 CLASS='org.apache.hadoop.hdfs.server.datanode.DataNode' HADOOP_OPTS="$HADOOP_OPTS $HADOOP_DATANODE_JMX_OPTS"
namenode如下
datanode如下
重启hdfs
cd /usr/local/hadoop/sbin ./stop-dfs.sh ./start-dfs.sh jps 结果如下 4241 HistoryServer 10481 JournalNode 6965 NodeManager 40 QuorumPeerMain 10763 DFSZKFailoverController 4076 Worker 3887 Master 6783 ResourceManager 9919 NameNode 10111 DataNode 10943 Jps
访问curl http://localhost:9222/metrics 和curl http://localhost:9322/metrics
或者curl http://hadoopnode1:9222/metrics 和 curl http://hadoopnode1:9322/metrics
前者是namenode的监控后者是datanode的监控
能访问出数据,表明是安装好了
docker部署hadoop重新构建镜像由于我是通过docker部署的(镜像是自己搭建好的专有镜像),所以还需要把端口映射放开出来,通过docker-compose重新启动
docker-compose文件如下
然后删除镜像重新构建
1033 docker-compose stop hadoopnode1 1034 docker rm hadoopnode1 1035 docker-compose up -d hadoopnode1
启动hdfs
进入hadoop容器 docker exec -it hadoopnode1 /bin/bash cd /usr/local/zookeeper-3.5.9 启动zookeeper bin/zkServer.sh start 每个节点执行 bin/zkServer.sh status 查看状态,会显示Mode: follower、Mode: leader 启动hdfs hdfs --daemon start journalnode cd /usr/local/hadoop/sbin ./start-dfs.sh
注意一点,重新构建当前节点容器时,需要进入到容器中格式化一下namenode才能起来
hdfs namenode -format hdfs --daemon start namenode 到其他几台同步数据到这一台(现网操作时,最好停止flume,避免在操作过程中向hdfs写入数据,导致数据不一致问题,这样子就不用同步数据这一步操作了) hdfs namenode -bootstrapStandby
下一步就是将重新构建镜像之前的添加监控操作重新走一遍
访问curl http://localhost:19222/metrics 和curl http://localhost:19322/metrics
接下来就是常规操作,把这个地址配置到监控容器 prometheus.yml中
然后重启prometheus容器即可(这个操作不在这里详细描述了,涉及到监控相关的配置,可以查看我)
docker restart prometheus



