0

我有一个获取文件、提取文本并运行 shell 脚本的流程,该脚本又运行 hive 脚本。(我只是从文件中提取日期并将其作为 -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

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

我注意到了一些事情:

  • 如果我减小查询的大小(我的配置单元查询是多个联合),则 ExecuteStreamCommand 不会挂起。
  • 当作业挂起时,资源管理器上的 AM 会保持运行相当长的一段时间 ~ 10 分钟。有点像当您使用 1 个容器创建 Hive CLI Tez 会话时。当我减小查询大小并且作业没有挂起时,AM 会立即进入完成状态。- 通过命令行手动运行完整查询或脚本工作正常。
  • 行为不一致。有时它不会挂起,有时它会......(大多数时候它会......)

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

4

2 回答 2

0

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

如果您的脚本对标准错误的记录足够多(我可以用 1mb 重现错误,但可能会更少),那么运行 hive 脚本和 ExecuteStreamCommand 处理器的 unix 进程将进入死锁。详细信息在上面的 jira 问题中。

于 2018-04-23T08:29:59.483 回答
0

当您从命令行运行它时,它是否会生成大量输出(标准输出和/或标准错误),例如 Tez/MR 进度?

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

于 2017-01-05T14:40:53.877 回答