咱們數據部門有這樣一個規範:那就是提交做業的時候會給做業起一個名字,方便在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 ;