Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过oozie工作流从shell脚本中的配置单元获取值?_Shell_Hive_Hiveql_Oozie - Fatal编程技术网

如何通过oozie工作流从shell脚本中的配置单元获取值?

如何通过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工作流时,创建的文件是空的。我试着打印一些硬编码的值,然后工作流运行正常。问题是,当涉及配置单元查询时,尽管作业成功,但数

我有一个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工作流时,创建的文件是空的。我试着打印一些硬编码的值,然后工作流运行正常。问题是,当涉及配置单元查询时,尽管作业成功,但数据却不存在。 我试着用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命令来完成,而不是两个分开的命令