Oozie shell Action - 从shell问题运行配置单元

him*_*shu 2 shell hadoop hive oozie

基于条件为真我在shell脚本中执行hive -e.它工作正常.当我在Oozie中将此脚本放入Shell操作并运行时,我得到一个scriptName.sh:第42行:hive:命令未找到异常.

我尝试在shell动作中传递<env-var> PATH =/usr/lib/hive </ env-var>,但我想我在那里犯了一些错误,因为我得到了同样的错误scriptName.sh:第42行:hive:找不到命令

编辑:which hive在shell脚本中使用过.它的输出不一致.我得到两个输出变量:
1./usr/bin/hive以及Delegation token can be issued only with kerberos or web authenticationJava IOException."

2.which : hive not in {.:/sbin:/usr/bin:/usr/sbin:...}

him*_*shu 5

好吧最后我想出来了.对于壳牌专家来说可能是一件微不足道的事情,但可以帮助有人出发.

1. hive:命令未找到 它不是类路径问题.这是一个shell问题.我运行的环境是一个korn shell(echo $ SHELL找出来).但是hive脚本(/usr/lib/hive/bin/hive.sh)是一个bash shell.所以我在我的脚本中更改了shebang(#!/ bin/bash)并且它有效.

2.Delegation Token只能用kerberos或web身份验证发布. 在我的hive脚本中,我添加了SET mapreduce.job.credentials.binary = ${HADOOP_TOKEN_FILE_LOCATION}HADOOP_TOKEN_FILE_LOCATION是一个保存jobToken位置的变量.需要传递此令牌,以便在安全集群中验证对HDFS数据的访问(在我的情况下,通过Hive Select查询进行HDFS读取操作).了解有关授权令牌的更多信息.

  • 这是因为Oozie可以在任何数据节点上运行shell操作.hive cli保证只在edgenode上运行,而不是在所有数据节点上运行.所以当Oozie在没有hive的节点上运行shell脚本时,我得到了"hive:command not found".从shell运行配置单元(或任何应该只存在于hadoop的edgenode上的应用程序)并不是一个好习惯. (2认同)