如何通过oozie工作流从shell脚本中的配置单元获取值?
我有一个shell脚本example.sh如何通过oozie工作流从shell脚本中的配置单元获取值?,shell,hive,hiveql,oozie,Shell,Hive,Hiveql,Oozie,我有一个shell脚本example.sh hive -e "select max(id) from dummy.table;" > data.txt hdfs dfs -put -f data.txt /user/username/data.txt 此脚本从配置单元获取数据,并将结果存储在hdfs中。这在终端中按预期工作。 但是当我创建oozie工作流时,创建的文件是空的。我试着打印一些硬编码的值,然后工作流运行正常。问题是,当涉及配置单元查询时,尽管作业成功,但数
hive -e "select max(id) from dummy.table;" > data.txt
hdfs dfs -put -f data.txt /user/username/data.txt
此脚本从配置单元获取数据,并将结果存储在hdfs中。这在终端中按预期工作。
但是当我创建oozie工作流时,创建的文件是空的。我试着打印一些硬编码的值,然后工作流运行正常。问题是,当涉及配置单元查询时,尽管作业成功,但数据却不存在。
我试着用hql运行同样的东西,它成功地工作了
insert overwrite directory '/user/username/hiveData' select max(id) from dummy.table;
但是我的要求是,我必须在shell脚本中获取配置单元数据。因为您没有检查
$?
您可能不知道它失败了。所以,第一步是将其添加到shell脚本中。否则,您将不知道shell脚本是否失败(因为配置单元失败),Oozie将获得shell脚本的成功运行状态
因此,在不知道hive代码失败的真正原因的情况下,我只是在猜测
如果您有配置单元使用的kerberos身份验证,则配置单元查询可能在Oozie调用的shell脚本中失败。要解决kerberos问题,您可能需要执行以下操作:
if [ -z ${HADOOP_TOKEN_FILE_LOCATION} ]
then
hive -e "select max(id) from dummy.table;" > data.txt
else
hive -e "SET mapreduce.job.credentials.binary=$HADOOP_TOKEN_FILE_LOCATION; select max(id) from dummy.table;" > data.txt
fi
您可以阅读有关此的更多信息,因为您没有检查
$?
您可能不知道它失败了。所以,第一步是将其添加到shell脚本中。否则,您将不知道shell脚本是否失败(因为配置单元失败),Oozie将获得shell脚本的成功运行状态
因此,在不知道hive代码失败的真正原因的情况下,我只是在猜测
如果您有配置单元使用的kerberos身份验证,则配置单元查询可能在Oozie调用的shell脚本中失败。要解决kerberos问题,您可能需要执行以下操作:
if [ -z ${HADOOP_TOKEN_FILE_LOCATION} ]
then
hive -e "select max(id) from dummy.table;" > data.txt
else
hive -e "SET mapreduce.job.credentials.binary=$HADOOP_TOKEN_FILE_LOCATION; select max(id) from dummy.table;" > data.txt
fi
您可以阅读有关此的更多信息您的
workflow.xml
是什么样子的?也就是说,您只是在其中调用shell操作吗?是的,这是一个非常简单的操作。只需使用hive-e命令调用shell脚本@mazaneichaI猜想它应该作为一个shell命令来完成,而不是两个分开的命令。您的workflow.xml
是什么样子的?也就是说,您只是在其中调用shell操作吗?是的,这是一个非常简单的操作。只需使用hive-e命令调用shell脚本@mazaneichaI猜测它应该作为一个单一的shell命令来完成,而不是两个分开的命令