近段時間發現公司的HDP大數據平臺的tez-ui頁面不能用了,頁面顯示為空,導致通過hive提交的sql不能方便地查找到Yarn上對應的applicationId,只能通過beeline的屏幕輸出信息、hiveserver2的日誌、yarn的日誌等一步步去查找,非常麻煩(查找方法見上一篇博客“如何找 ...
近段時間發現公司的HDP大數據平臺的tez-ui頁面不能用了,頁面顯示為空,導致通過hive提交的sql不能方便地查找到Yarn上對應的applicationId,只能通過beeline的屏幕輸出信息、hiveserver2的日誌、yarn的日誌等一步步去查找,非常麻煩(查找方法見上一篇博客“如何找到Hive提交的SQL相對應的Yarn程式的applicationId”)。因此下決心解決這個問題。
於是找時間去瞭解了一下tez-ui的原理,它其實是Tez項目下的一個子項目(web項目),可以單獨部署在諸如tomcat之類的應用伺服器下。tez-ui上顯示的tez程式信息實際是來自yarn的timeline service服務,前者通過後者提供的REST介面獲取程式的metrics信息。Yarn Timeline Service的架構如下圖所示:
我們的集群tez-ui和timeline service是在不同的機器上面,比如tez-ui部署在A機器,timeline service部署在B機器。
首先檢查了A、B機器,發現它們的時間不一致,其實是timeline service所在的B機器的時間不正確。進一步檢查發現B機器的NTP服務關閉了,因此開啟B機器的NTP服務,自動同步時間。
其次,修改tez所在機器的tez-site.xml配置文件,修改下列配置項為對應的值。這一步可以解決"All DAGs”頁面不顯示信息的問題。
tez.am.tez-ui.history-url.template __HISTORY_URL_BASE__?viewPath=/#/tez-app/__APPLICATION_ID__
tez.history.logging.service.class org.apache.tez.dag.history.logging.ats.ATSV15HistoryLoggingService
再次,修改hiveserver2服務所在機器的hive-site.xml配置文件,修改下列配置項為對應的值,然後逐個重啟hiveserver2服務。這一步可以解決“Hive Queries”頁面不顯示信息的問題。
hive.exec.failure.hooks: org.apache.hadoop.hive.ql.hooks.ATSHook
hive.exec.post.hooks: org.apache.hadoop.hive.ql.hooks.ATSHook
hive.exec.pre.hooks: org.apache.hadoop.hive.ql.hooks.ATSHook
最後,重啟A機器上的tez-ui程式和B機器上的timeline server服務。前者部署在tomcat下,只需要重啟下tomcat即可。後者通過如下命令重啟。
./yarn-daemon.sh stop timelineserver
./yarn-daemon.sh start timelineserver
最終,我們打開tez-ui頁面,地址是http://A:18088/tez-ui,可以看到現在頁面可以正確展示"All DAGs"和"Hive Queries"信息了。
"All DAGs"頁面:
"Hive Queries"頁面: