中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何解決Ambari 自定義服務啟動成功后依舊顯示停止狀態問題

發布時間:2021-12-06 09:26:34 來源:億速云 閱讀:364 作者:柒染 欄目:大數據

如何解決Ambari 自定義服務啟動成功后依舊顯示停止狀態問題,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

1、概述

如果遇到該情況,首先前往 /var/log/ambari-agent/ambari-agent.log 查看日志輸出。

服務安裝后,每隔大約 60s 會執行 status() 方法。如果執行 status() 方法的過程中報錯,則在 Ambari 頁面上會顯示服務已停止。如果執行 status() 方法的過程中沒報錯,則在 Ambari 頁面上顯示服務正常。

通常在 status() 方法中,我們會使用 Ambari 提供的 resource_management 模塊里的 check_process_status() 來判斷服務的狀態。

check_process_status() 通過檢測一個 pid 文件里面的進程號,來判斷服務的啟動狀態。通常 pid 文件內只有一個進程號,如 12168 。

 

2、問題示例分析

 
2.1、報錯

以自定義服務 JanusGraph 為例,status() 方法是這樣寫的:

from resource_management import *

def status(self, env):
    import graphexp_params
    env.set_params(graphexp_params)
    check_process_status(graphexp_params.graphexp_nginx_pid_file)
 

graphexp_params.py 文件的局部內容:

from resource_management import *

config = Script.get_config()
# graphexp的nginx pid文件路徑
graphexp_pid_dir = config['configurations']['graphexp-server']['graphexp_pid_dir']
# graphexp的nginx pid文件路徑
graphexp_nginx_pid_file = os.path.join(graphexp_pid_dir, 'graphexp_nginx.pid')
 

上述代碼是動態獲取 Ambari 頁面上的 graphexp_pid_dir 配置項,然后拼湊成一個 pid 文件路徑,這個 pid 文件內容只有 graphexp 組件的進程號。

結果出錯了,根據 /var/log/ambari-agent/ambari-agent.log 日志輸出,發現在 status_params.py 里面獲取 graphexp-server.xml 文件內的參數值報錯,如下圖所示:

如何解決Ambari 自定義服務啟動成功后依舊顯示停止狀態問題

 
2.2、問題排查

在 status() 方法下,輸出 config['configurations'] 發現只能打印出:

ams-hbase-env,infra-solr-env,hbase-env,ams-env,elastic-env,janusgraph-env,ams-grafana-env,hadoop-env,zookeeper-env,cluster-env
 

以上這些值,沒有 graphexp-server 項。

而在 start() 方法里面打印有很多,所有的 configurations 的 xml 文件都被加載到了:

ranger-hdfs-audit,ssl-client,infra-solr-log4j,ranger-hdfs-policymgr-ssl,ams-hbase-site,elastic-config,ranger-hbase-audit,hdfs-logsearch-conf,ams-grafana-env,ranger-hdfs-security,ams-ssl-client,infra-solr-env,ranger-hdfs-plugin-properties,hbase-policy,ams-logsearch-conf,ams-hbase-security-site,hdfs-site,ams-env,ams-site,ams-hbase-policy,janusgraph-env,hadoop-metrics2.properties,hadoop-policy,hdfs-log4j,hbase-site,infra-logsearch-conf,ranger-hbase-plugin-properties,ams-grafana-ini,graphexp-server,ams-ssl-server,infra-solr-xml,ams-log4j,ams-hbase-env,core-site,infra-solr-security-json,gremlin-server,janusgraph-hbase-solr,infra-solr-client-log4j,hbase-logsearch-conf,hadoop-env,zookeeper-log4j,hbase-log4j,postgresql,ssl-server,hbase-env,zoo.cfg,elastic-env,ranger-hbase-policymgr-ssl,zookeeper-logsearch-conf,cluster-env,zookeeper-env,ams-hbase-log4j,ranger-hbase-security
 

所以猜測在 status() 方法里面,只能識別 xxx-env.xml 里面的配置內容但是 ambari2.7 的自定義服務沒有這個問題,只在 ambari2.6 上出現了。

 
2.3、解決辦法

新建 graphexp-env.xml 文件,將 graphexp_pid_dir 配置項添加到該文件內。graphexp_params.py 文件的 graphexp_pid_dir 寫法修改為:

# graphexp的nginx pid文件路徑
graphexp_pid_dir = config['configurations']['graphexp-env']['graphexp_pid_dir']
# graphexp的nginx pid文件路徑
graphexp_nginx_pid_file = os.path.join(graphexp_pid_dir, 'graphexp_nginx.pid')
    在 status() 方法內,獲取 graphexp-env.xml 文件內的配置,只有 xxx-env.xml 的內容才可以被 status() 方法加載到。

3、status()方法調試建議

由于 status() 是輪詢調用,且目前還不知道日志輸出的具體位置(沒有輸出到 ambari-agent.log 里面),所以可以用 Execute("echo {0} >> /tmp/test.log".format(status_params.gtm_standby_pid_file)) 命令來輸出需要的參數值。同時也可以根據上述 Execute 語句位置來判斷代碼具體的報錯行數,方便定位代碼報錯地點。 

關于如何解決Ambari 自定義服務啟動成功后依舊顯示停止狀態問題問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

广平县| 樟树市| 肥西县| 开封市| 汉川市| 永康市| 汉阴县| 于都县| 久治县| 慈溪市| 麻阳| 宜兴市| 射洪县| 延吉市| 盱眙县| 兴山县| 新乐市| 绥棱县| 蒙城县| 普宁市| 达州市| 永德县| 仁怀市| 乐业县| 巫溪县| 宁远县| 成武县| 蕲春县| 嘉定区| 皮山县| 碌曲县| 舞钢市| 武强县| 虞城县| 宜兰县| 汕头市| 连山| 周口市| 咸阳市| 文昌市| 林甸县|