ExecuteStreamCommand在执行Shell脚本(执行Hive)时挂起

时间:2016-07-08 13:47:12

标签: apache-nifi

我有一个获取文件,提取文本和运行shell脚本的流程,后者又运行一个配置单元脚本。 (我只是从文件中提取日期并将其作为-hivevar传递)。我的shell脚本看起来像这样:

#!/bin/bash
endDate=$1

CONNECT="jdbc:hive2://master2:10000/default"

beeline -u "$CONNECT" -n root -hivevar endDate="$endDate" -f /pathToScript/Hive_scipt.hql

hive脚本完成并且数据被插入到我的表中但是ExecuteStreamCommand无限期地保持运行(1保持在顶角)并且我必须重新启动nifi ..(有更好的方法来处理这个吗?)。

我注意到了一些事情:

  • 如果我缩小查询的大小(我的hive查询是一些联合的),ExecuteStreamCommand就不会挂起。
  • 当作业挂起时,资源管理器上的AM保持运行一段时间~10分钟。类似于使用1个容器创建Hive CLI Tez会话时。当我减少查询大小并且作业没有挂起时,AM立即进入完成状态。 - 通过命令行手动运行完整查询或脚本工作正常。
  • 行为不一致。有时它不会挂起,有时会......(大部分时间它都会......)

有什么想法吗?无法在app.log或应用程序日志中找到任何内容

2 个答案:

答案 0 :(得分:0)

当你从命令行运行它时,是否会产生大量输出(标准输出和/或标准输出中的任何一个/两者),例如Tez / MR进度?

使用--silent = true选项直接尝试(除非您出于某种原因确实需要输出),或者使用-S(尽管已弃用)“hive”客户端。如果输出是问题,这应该可以缓解它。

答案 1 :(得分:0)

我认为您的案例可能与我在https://issues.apache.org/jira/browse/NIFI-5024中解决的问题有关。

如果您的脚本已经足够记录到stderr(我可以用1mb重现该bug,但可能会更少),那么运行hive脚本和ExecuteStreamCommand处理器的unix进程将进入死锁状态。细节在上面的jira问题中。