gpt4 book ai didi

hadoop - Hive 中的源命令

转载 作者:可可西里 更新时间:2023-11-01 16:52:13 28 4
gpt4 key购买 nike

我在 Hive 中使用 source 命令来运行包含大量 Hive UDFS(纯 SQL,如日期转换)的外部文件。外部文件对于许多脚本是通用的;因此,更容易在单个脚本之外进行维护。

所以,如果我有

source /tmp/udfs.hql;
select * from tmp1

并从命令行运行,即

hive -e "......."

它工作正常。

当然,如果我尝试在 Oozie 或非 CLI 客户端中执行此操作,它会失败,因为 source 是一个 CLI 命令。

现在的问题是:如何在 CLI 之外复制此功能?换句话说,如何在配置单元查询中执行 source 命令?

最佳答案

笨拙的解决方法:

  1. 使用 Shell Action 从其组件“编译”最终的 Hive 脚本,然后使用特定名称(例如 Oozie Worklow ID + Hive Action 名称)将其保存在特定 HDFS 目录下
  2. 在 Hive Action 中使用该脚本
  3. 删除脚本

外壳代码示例:

typeset CurrentJobInfo CurrentJobId TargetHiveScript
if [[ "$CONTAINER_ID" != "" && "$OOZIE_ACTION_CONF_XML" != "" ]]
then
CurrentJobInfo=$(/bin/sed -n '/<name>mapreduce.job.name<\/name>/ { N ; s/^.*<value>oozie:action:/:/ ; s/<\/value>.*$/:/ ; p}' "$OOZIE_ACTION_CONF_XML")
CurrentJobId=$(/bin/echo "$CurrentJobInfo" | /bin/sed -n '/:ID=[^:]*:/ { s/^.*ID=// ; s/:.*$// ; p }')
fi
if [[ "$CurrentJobId" == "" ]]
then
/bin/echo "ERROR - could not find Oozie Job ID in expected XML config file" 1>&2
exit 255
fi
TargetHiveScript="/user/johndoe/temp/${CurrentJobId}-DummyHiveAction.hql"

# all these ".hql" scripts are assumed to be available in the CWD thanks to <file> elements in Oozie Shell Action

/bin/cat common.hql common.DummyApp.hql DummyHiveAction.hql | /usr/bin/hdfs dfs -put -f - "$TargetHiveScript"
if [[ $? -ne 0 ]]
then
/bin/echo "ERROR - could not upload Hive script" 1>&2
exit 255
fi

exit 0

在 Hive Action 中,对该文件的引用应该是

<script>/user/johndoe/temp/${wf:id()}-DummyHiveAction.hql<script>

PS:我没有测试所有端到端的测试,只是从我们网站上运行的代码中复制/粘贴/编辑了一些。调试全靠你了:-)

关于hadoop - Hive 中的源命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32107240/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com