hive on tez自定义jobname

  我们数据部门有这样一个规范:那就是提交作业的时候会给作业起一个名字,方便在yarn界面进行搜索, 比如mapreduce,hive on mr都可以通过mapreduce.job.name参数进行指定,spark在提交的时候也可以通过--name参数进行指定该应用的名字,这样在作业量很多的情况下,我们就可以根据名字很方便的找出某个业务模块的作业,前提是名字取得规范。但是hive on tez就比较恶心了,没有对应的参数去自定义作业的名字,只是显示这样的名字:HIVE-c315521e-7260-466a-b036-7393f75b0a4c, 就是在HIVE-后面加了一串字符串作为名字。很显然,这样子在我们的场景下是不行的,怎么办呢?只能改源码了,好在修改的地方很简单,所以不需要怎么费力气,下面对修改的地方做一下记录:

  修改 org.apache.hadoop.hive.ql.exec.tez.TezSessionState 类,将:

    session = TezClient.create("HIVE-" + sessionId, tezConfig, true, commonLocalResources, null);

  改成:

    String appName = tezConfig.get("tez.job.name", "HIVE-" + sessionId );

    session = TezClient.create(appName , tezConfig, true, commonLocalResources, null);

 

  搞定,收工!!,重新编译打包替换原来的旧的jar包,就ok了。

  说明:

    1. tez.job.name是自定义的参数,以后我们在使用hive on tez的时候,可以通过 set tez.job.name=appName;  的方式来对提交的作业名字进行自定义。如果不指定名字,那么还是HIVE-c315521e-7260-466a-b036-7393f75b0a4c这种形式;

    2. tez.job.name参数不需要事先在代码的任何地方进行声明定义,直接按照上面的地方改一改就ok了。 直接通过 set 的方式,在代码中就可以取到值。

    3. 我们的hive版本是1.1.0 ;

 

  

posted @ 2018-07-23 18:39  无西lc  阅读(1772)  评论(0编辑  收藏  举报