hive on tez自定义jobname

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

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

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

  改为:oop

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

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

 

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

  说明:get

    1. tez.job.name是自定义的参数,之后咱们在使用hive on tez的时候,能够经过 set tez.job.name=appName;  的方式来对提交的做业名字进行自定义。若是不指定名字,那么仍是HIVE-c315521e-7260-466a-b036-7393f75b0a4c这种形式;源码

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

    3. 咱们的hive版本是1.1.0 ;

相关文章
相关标签/搜索