Hive 脚本的返回状态

Posted

技术标签:

【中文标题】Hive 脚本的返回状态【英文标题】:Return status of a hive script 【发布时间】:2017-01-28 04:23:16 【问题描述】:

我有两个关于捕获hive脚本的返回状态/退出状态的问题。

    在 unix 脚本中捕获返回状态

try2.hq​​l

select from_unixtime(unix_timestamp(),'YYYY-MM-DD')

这在 shell 脚本 try1.sh 中被调用

echo "Start of script"
hive -f try2.hql
echo "End of script"

现在,我需要捕获 try2.hq​​l 的返回状态。我该怎么做?

    多个查询可用时的控制流

脚本 try3.hql 中有几个 Hive 查询

select stockname, stock_date from mystocks_stg;

select concat('Top10_Stocks_High_OP_',sdate,'_',srnk) as rowkey, sname, sdate, sprice, srnk from (
select stockname as sname, stock_date as sdate, stock_price_open as sprice,rank() over(order by stock_price_open desc) as srnk
from mystocks
where from_unixtime(unix_timestamp(stock_date,'yyyy-mm-dd'),'yyyymmdd') = '$hiveconf:batch_date') tab
where tab.srnk <= 10;

try3.hql 在脚本中调用 try4.sh 并传递相关参数。

我的问题:在try3.hql中,如果第一个查询有任何错误,我必须返回shell脚本并中止程序,而不执行第二个脚本。

请提出建议。

【问题讨论】:

关于您的第二个问题,我认为使用 Oozie 可以帮助您以更好的方式定义查询工作流 (oozie.apache.org/docs/3.3.1/DG_HiveActionExtension.html) 【参考方案1】:

对于问题的第 1 部分,您可以更改脚本以退出 hive 状态:

echo "Start of script"
hive -f try2.hql; hive_status=$?
echo "End of script"
exit $hive_status

【讨论】:

【参考方案2】:

我有第 2 部分的解决方案。

您知道根据documentation,“hive”CLI 已被弃用,取而代之的是“beeline”?

HiveServer2(在 Hive 0.11 中引入)有自己的 CLI,称为 Beeline, 这是一个基于 SQLLine 的 JDBC 客户端。由于新的发展正在 专注于 HiveServer2,Hive CLI 将很快被弃用,取而代之的是 直线 (HIVE-10511)。

在beeline中,默认情况下,一旦出现错误,您的脚本就会停止。这由“force”参数控制。

--force=[true/false]            continue running script even after errors

顺便说一句,codeforester 为第 1 部分提供的解决方案仍然适用于直线。

【讨论】:

【参考方案3】:

echo "脚本开始" 蜂巢-f try2.hq​​l 蜂巢状态=$? echo "脚本结束" echo $hive_status>>$HOME/exit_status.log

在主目录中,您将找到创建的 exit_status.log 文件,您将在其中了解脚本的退出状态。

【讨论】:

以上是关于Hive 脚本的返回状态的主要内容,如果未能解决你的问题,请参考以下文章

定期访问WebLogic Server返回状态的脚本

Shell脚本returnechoprintf

shell脚本如何获取状态码返回值,如ok或error

关于 PLSQL Exit Command 返回状态

停止 Hive 服务器 - Hortonworks hadoop

如何确定脚本是否返回退出状态代码1或0