要修改的类
org.apache.hadoop.hive.ql.Driver
private TaskRunner launchTask(Task<? extends Serializable> tsk,
String queryId, boolean noName,
String jobname, int jobs, DriverContext cxt) throws HiveException {
......
conf.set("mapreduce.workflow.node.name", tsk.getId()); // tsk.getId() 返回当前stage (stage-1)
String userdefine = conf.get("user.define"); //获得用户自定义的参数
......
}
可以在conf.set("mapreduce.workflow.node.name", tsk.getId());根据获得的stage的不同设置针对这个stage的特定参数,直接用set user.define="stage1: hello world !"; 值用json写,指定相关stage的特定参数,完美实现每个stage指定不同的参数 perfect!
编译源码的过程
第一步:在github选择自己对应的CDH6.2.0版本下载源码
cloudera-hive
第二步:解压后,cd到源码目录下面,修改pom.xml,只编译自己需要的jar
<modules>
<module>ql</module>
<!--
<module>accumulo-handler</module>
<module>ant</module>
<module>beeline</module>
<module>classification</module>
<module>cli</module>
<module>common</module>
<module>contrib</module>
<module>hbase-handler</module>
<module>hcatalog</module>
<module>hplsql</module>
<module>jdbc</module>
<module>metastore</module>
<module>orc</module>
<module>ql</module>
<module>serde</module>
<module>service-rpc</module>
<module>service</module>
<module>llap-common</module>
<module>llap-client</module>
<module>llap-ext-client</module>
<module>llap-tez</module>
<module>llap-server</module>
<module>shims</module>
<module>spark-client</module>
<module>kryo-registrator</module>
<module>storage-api</module>
<module>testutils</module>
<module>packaging</module>
-->
</modules>
第三步:执行编译命令
mvn clean package -DskipTests -Phadoop-2 -Pdist
第四步:拷贝ql/target目录下的两个文件hive-exec-2.1.1-cdh6.2.0-core.jar 和 hive-exec-2.1.1-cdh6.2.0.jar替换掉集群所有节点上的/opt/cloudera/parcels/CDH/jars/的对应文件(假设你的parcels安装在/opt/cloudera/parcels目录下面)

第五步:CDH上重启Hive将看到效果
Hello World !!!
网友评论