通过GNU parallel运行Beeline时第二条命令卡住故障咨询
根因分析
- GNU Parallel 默认会将主进程的标准输入(stdin)重定向到每一个启动的子任务进程
- beeline 作为交互式CLI客户端,即使已经通过
-e参数指定了要执行的SQL语句,或是运行--help这类无需交互的命令,它仍然会主动尝试从 stdin 读取输入内容 - 第一个 beeline 进程运行时会把 Parallel 传递的 stdin 数据全部读取完毕,第二个 beeline 进程启动后就会进入阻塞状态,无限等待 stdin 输入,所以会出现卡住的现象,该问题和Hive数据库连接逻辑完全无关。
修复方案
任选以下一种方案即可解决:
- 显式给beeline指定空输入源,禁止它读取当前会话的标准输入:
parallel -j1 --eta --verbose beeline -e '"SELECT \"{}\"";' < /dev/null ::: a b c
- 给GNU Parallel添加
--no-stdin参数,要求Parallel不会向子任务传递任何标准输入内容(部分旧版本Parallel可替换为-n0参数实现相同效果):
parallel -j1 --eta --verbose --no-stdin beeline -e '"SELECT \"{}\"";' ::: a b c
内容的提问来源于stack exchange,提问作者Nightscape
相关产品推荐
相关产品推荐

