cdh版本hive源码编译打包

参考https://cwiki.apache.org/confluence/display/Hive/HiveDeveloperFAQ#HiveDeveloperFAQ-Mavensettings


首先你得下载一分源码,这里我下载的是http://archive.cloudera.com/cdh5/cdh/5/hive-1.1.0-cdh5.7.1-src.tar.gz。(根据自己的cdh版本下载相应版本的源码)


当然编译代码得在linux环境下,解压看,cd到源码目录下面,执行mvn clean package -DskipTests -Phadoop-2 -Pdist

经过漫长的编译之后,会在源码目录下面的packaging/target目录下面生成一个tar包,相关的hive模块jar包都能在这个tar包里面找到。


比如我们改了hive的源代码,重新打了包,如何替换运行环境中cdh自身的jar包?

我修改了一下

org.apache.hive.hcatalog.templeton.tool.TempletonControllerJob

这个类的源代码,webhcat生成的所有job name在resourcemanager ui界面上都叫做TempletonControllerJob。如果有很多个任务同时执行,不好直观的看出来哪个任务执行的哪个HQL。于是改了一下代码:

private String makeJobName(String sql){
    if(sql.length()<100)
      return sql;
    else{
      return MessageFormat.format("{0}...{1}",sql.substring(0,50),sql.substring(sql.length()-50));
    }
  }

原来run方法里面修改成:

//    job.setJobName(TempletonControllerJob.class.getSimpleName());
    job.setJobName(makeJobName(args[args.length-1]));
原来就是获取类的simplename作为jobname,改成获取传入的sql,然后根据sql的长度不同采用截取部分SQL省略中间部分SQL的方式,生成jobname,这样跟HUE或者其他hive jdbc或者shell提交上来的任务在resourcemanager ui上看起来名字差不多一致了。


然后按照上面的步骤编译打包。打包好后,在tar包中找到hive-webhcat-1.1.0-cdh5.7.1.jar,替换掉集群所有节点上的/opt/cloudera/parcels/CDH/jars/hive-webhcat-1.1.0-cdh5.7.1.jar(假设你的parcels安装在/opt/cloudera/parcels目录下面)。重启一下hive服务,再提交一下webhcat rest hive查询api,再去看看resourcemanager中的jobname,变成提交的sql了。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值