博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hive on oozie以及action间参数传递
阅读量:2225 次
发布时间:2019-05-09

本文共 3265 字,大约阅读时间需要 10 分钟。

背景:

简单介绍下 hive action的使用,以及action间是如何进行参数传递的,这也是进行多job调度必备的操作~

集群环境:CDH 5.13.0 ,其中oozie版本:4.1.0,hive版本:1.1.0


一、Hue配置 Hive action

hue上创建hive任务必须添加两个配置项:scripthive xml

这里写图片描述
其中:
script 指的是hive sql 脚本,
hive xml 指的是hive-site.xml(该文件在CDH集群中每台机器的/etc/hive/conf目录下)

我们将 hive-site.xml 文件上传到 hdfs

hadoop fs -put /etc/hive/conf/hive-site.xml /yj/

配置完直接运行即可,hive action一般没啥坑~

附上workflow.xml

Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]
${jobTracker}
${nameNode}
/yj/hive-site.xml

二、action间参数传递

我们在根据业务需求配置workflow.xml时,经常需要将上一个action得出的结果作为参数传递给下一个action,这种需求如何实现呢?

我们首先要明确的是:

hive action之间不支持传递参数,我们可以通过在shell 脚本中hive -e执行hql获取结果,再由shell传递给下一个hive action

目前我测试成功的有shell action中输出,然后在下一个hive actionshell action 接受上一个shell action 的输出结果;关于spark等其他action以后有时间在研究吧!


参数发送方(shell action):

先创建shell脚本 hive_script1:

# !/bin/bashhive_test_count=`hive -e "select count(1) from house.h_apply"`echo "hive_test_count=${hive_test_count}"

将其shell脚本配置到 shell action 作为结果参数发送方,然后在workflow.xml中添加<capture-output/>属性;

注:添加<capture-output/>元素可以捕获shell脚本的标准输出,然后在另一个action中里通过el表达式获取:${wf:actionData('shell action1').hive_test_count}${wf:actionData('shell action1')['hive_test_count']}

hue界面只需要勾选就行了!默认都是勾选好的!

这里写图片描述


1.参数接收方(shell action):

在shell-f704中添加<argument>值:

${
wf:actionData('shell-d412').hive_test_count}

然后在该shell脚本hive_script2中获取:

# !/bin/bashecho "aaaaa $1"

通过$数字来获取!

hue配置

这里写图片描述

附上workflow.xml

Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]
${jobTracker}
${nameNode}
/yj/hive_script1
/yj/hive_script1#hive_script1
${jobTracker}
${nameNode}
/yj/hive_script2
${wf:actionData('shell-d412').hive_test_count}
/yj/hive_script2#hive_script2

2.参数接收方(hive action):

在hive-a0d5中的workflow.xml里添加:

    COUNT=${wf:actionData('shell-d412').hive_test_count}

然后在hql脚本 hive_script3.hql中添加:

select ${
COUNT}

hue配置

这里写图片描述

附上workflow.xml

Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]
${jobTracker}
${nameNode}
/yj/hive_script1
/yj/hive_script1#hive_script1
${jobTracker}
${nameNode}
/yj/hive-site.xml
COUNT=${wf:actionData('shell-928d').hive_test_count}
你可能感兴趣的文章
分布式系统理论基础4:Paxos
查看>>
分布式系统理论基础5:选举、多数派和租约
查看>>
分布式系统理论基础6:Raft、Zab
查看>>
分布式系统理论基础8:zookeeper分布式协调服务
查看>>
搞懂分布式技术1:分布式系统的一些基本概念
查看>>
搞懂分布式技术2:分布式一致性协议与Paxos,Raft算法
查看>>
搞懂分布式技术3:初探分布式协调服务zookeeper
查看>>
搞懂分布式技术4:ZAB协议概述与选主流程详解
查看>>
搞懂分布式技术6:Zookeeper典型应用场景及实践
查看>>
搞懂分布式技术10:LVS实现负载均衡的原理与实践
查看>>
搞懂分布式技术11:分布式session解决方案与一致性hash
查看>>
搞懂分布式技术12:分布式ID生成方案
查看>>
搞懂分布式技术13:缓存的那些事
查看>>
搞懂分布式技术14:Spring Boot使用注解集成Redis缓存
查看>>
搞懂分布式技术15:缓存更新的套路
查看>>
搞懂分布式技术16:浅谈分布式锁的几种方案
查看>>
搞懂分布式技术17:浅析分布式事务
查看>>
搞懂分布式技术18:分布式事务常用解决方案
查看>>
搞懂分布式技术19:使用RocketMQ事务消息解决分布式事务
查看>>
搞懂分布式技术20:消息队列因何而生
查看>>