日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何使用JMX_Expoter+Prometheus+Grafana监控Hadoop集群

發布時間:2024/1/8 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何使用JMX_Expoter+Prometheus+Grafana监控Hadoop集群 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  • JMX_Expoter
  • 監控

因為目前CDH以及HDP后續要合并閉源,公司打算花時間自研一個類似的平臺,我也對集群監控這塊下了點功夫。

監控

? 對于一個集群管理平臺,首當其沖的就是其中的監控如何實現,畢竟很多時候我們打開它只是因為郵箱里收到了報警:-),那么我們應該如何獲取Hadoop等集群的信息呢?這時候需要簡單了解一個知識點了:JMX。

? 我們簡單介紹一下Java的JMX是什么,JMX全程叫做Java Management Extensions,翻譯過來就是Java內存管理,最常用到的就是對于 JVM 的監測和管理,比如 JVM 內存、CPU 使用率、線程數、垃圾收集情況等等。另外,還可以用作日志級別的動態修改,比如 log4j 就支持 JMX 方式動態修改線上服務的日志級別。

總而言之,就是Java自己開發的用于監控JVM指標的一個工具,可以提供給一些界面JConsole,VisualVM使用,詳細信息可以參考這里!

獲取集群的JMX信息

? Hadoop,Hbase集群都提供了便捷獲取集群JMX信息的途徑,具體通過在訪問地址后面加上/jmx來實現,比如我們訪問hdfs的NameNode頁面的時候地址是localhost:50070,那么在后面加上一個/jmx即為localhost:50070/jmx,訪問即可得到類似下面的信息。

? 上面圖中具體指標信息可以在Hadoop官方文檔對應的metrics章節中找到,其中包括了Namenode以及Datanode相關信息,同理如果我們在8088端口后面加上/jmx即可獲得關于Yarn相關指標信息。

? 現在我們監控的信息有了,接下來如果我們想將數據在監控折線圖中展現出來的話就需要一個時序數據庫,因為監控指標數據必須存在對應的時間才有意義,目前比較常見的時序數據庫+界面組合是普羅米修斯(時序數據庫)+ Grafana(界面展示),那么目前的問題就轉換成了如何將Hadoop集群中的JMX信息傳遞給普羅米修斯,簡單調研就可以發現,普羅米修斯自己開發了一款插件支持將java程序對應的jmx信息傳遞到自己的時序數據庫中,插件地址。

根據自己Java環境版本下載插件,將插件放置到自己選定的位置,現在插件有了,就差如何在集群中使用插件了,我們開始著手修改集群中的配置。

Hadoop集群配置Jmx_expoter

在hadoop-env.sh中最后添加以下代碼,注意將其中的路徑修改成自己系統中的路徑,這段代碼的主要作用是添加我們下載的jar包,以及給jar包傳遞配置文件,以及指定該服務要占用的端口,這里的對應位置的配置文件prometheus_config.yml測試的時候可以直接創建一個空文件即可。

if ! grep -q <<<"$HDFS_NAMENODE_OPTS" jmx_prometheus_javaagent; then HDFS_NAMENODE_OPTS="$HDFS_NAMENODE_OPTS -javaagent:/usr/local/Cellar/hadoop/3.3.1/jmx_prometheus_javaagent-0.16.1.jar=27001:/usr/local/Cellar/hadoop/3.3.1/libexec/etc/hadoop/prometheus_config.yml" fi if ! grep -q <<<"$HDFS_DATANODE_OPTS" jmx_prometheus_javaagent; then HDFS_DATANODE_OPTS="$HDFS_DATANODE_OPTS -javaagent:/usr/local/Cellar/hadoop/3.3.1/jmx_prometheus_javaagent-0.16.1.jar=27002:/usr/local/Cellar/hadoop/3.3.1/libexec/etc/hadoop/prometheus_config.yml" fi

注意事項

1.上面的代碼不能直接寫成類似以下模式,因為不能在$HADOOP_OPTS中出現multiple -javaagent opts,就是不能直接出現多個-javaagent選項,必須要換一種寫法,將-javaagent寫在if else代碼中可以避免這個問題,詳細可以參考這個stackoverflow回答

#寫成這種模式會報錯 export HADOOP_NAMENODE_OPTS="$HADOOP_NAMENODE_OPTS -javaagent:/home/ec2-user/jmx_exporter/jmx_prometheus_javaagent-0.10.jar=9102:/home/ec2-user/jmx_exporter/prometheus_config.yml" export HADOOP_DATANODE_OPTS="$HADOOP_DATANODE_OPTS -javaagent:/home/ec2-user/jmx_exporter/jmx_prometheus_javaagent-0.10.jar=9102:/home/ec2-user/jmx_exporter/prometheus_config.yml"

2.同一臺機器的每一個JMX服務端口必須區分開

比如上面namenode的jmx服務所占用的端口為27001,datanode的jmx服務所占用的端口為27002,如果使用了相同的端口,那么在啟動hdfs服務(./start-dfs.sh)的時候會報如下所示的錯。

Starting namenodes on [localhost] Starting datanodes localhost: /usr/local/Cellar/hadoop/3.3.1/libexec/bin/../libexec/hadoop-functions.sh: line 1821: 11125 Abort trap: 6 hadoop_start_daemon "${daemonname}" "$class" "${pidfile}" "$@" >> "${outfile}" 2>&1 < /dev/null localhost: ERROR: Cannot set priority of datanode process 11125 localhost: ERROR: Cannot disconnect datanode process 11125

這樣配置完成之后,Hadoop的jmx信息就被采集到指定的端口中了,接下來我們可以在網頁上測試一下我們的采集數據,訪問地址就是前面配置的端口 localhost:27001

同理我們的Yarn相關信息采集也要在yarn-env.sh中配置上面類似的代碼,其中同樣要注意區分端口號,并且不要同時出現兩個-javaagent,將兩個javaagent放到不同的if else中。

Hbase集群配置

因為我是啟動的單機版本的Hbase,所以我只配置HBASE_MASTER_OPTS和HBASE_JMX_BASE選項,如果是集群模式可能還需要配置HBASE_REGIONSERVER_OPTS,將下面內容替換成自己的文件路徑然后添加到hbase-env.sh的尾部。

export HBASE_JMX_BASE="-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false" export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS $HBASE_JMX_BASE -Dcom.sun.management.jmxremote.port=20101 -javaagent:$HBASE_HOME/lib/jmx_prometheus_javaagent-0.16.1.jar=27000:$HBASE_HOME/conf/hbase_jmx_config.yaml"

這樣我們就可以通過指定端口訪問各個集群的JMX信息了,下一步就是配置Prometheus將數據導入到時序數據庫中。

配置Prometheus

打開Prometheus配置文件,并且在后面增加關于Hadoop集群的NameNode,DataNode以及Hbase的jmx數據配置,增加如下代碼,重啟普羅米修斯服務。

- job_name: "hbase"static_configs:- targets: ["localhost:27000"]labels:instance: localhost- job_name: "hadoop namenode"static_configs:- targets: ["localhost:27001"]labels:instance: localhost- job_name: "hadoop datanode"static_configs:- targets: ["localhost:27002"]labels:instance: localhost

我們打開Prometheus的頁面查看對應的target,查看我們配置的任務,如果出現下面幾個選項并且是綠色的說明是正常的,打開采集的結果網址會發現其中Prometheus采集的指標名稱相比于原先集群50070/jmx的指標名稱是經過處理的,比如Prometheus中有一個指標叫做hadoop_namenode_memnonheapmaxm他在50070/jmx中是名稱是memnonheapmaxm,然后前面加上service name等,其中的匹配規則應該在插件的配置文件prometheus_config.yml中設置的,詳細可以看插件地址。

最后選出來我們需要的指標之和在Grafana中展示出來即可,具體方法這里不再展示,可以參考[這篇教程](

總結

以上是生活随笔為你收集整理的如何使用JMX_Expoter+Prometheus+Grafana监控Hadoop集群的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。