关于tez-ui的"All DAGs"和"Hive Queries"页面信息为空的问题解决过程
近段时间发现公司的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”页面: