使用Impala Shell带-f参数执行hql文件时出现2>&1参数解析错误求助
报错根因
Error, could not parse arguments "2>&1"的核心原因是Shell重定向语法被impala-shell进程当成了自身的启动参数:
2>&1是Linux Shell层的标准错误流重定向指令,作用是把程序运行时输出到stderr的错误信息合并到stdout流,方便日志收集。这个指令的解析主体是系统Shell,impala-shell本身并不识别该语法。- 触发该报错的典型情况:
- 在已经进入impala-shell交互式会话的界面(提示符类似
[xxx:25003] >)下,输入了带/usr/bin/impala-shell的启动命令。此时所有输入内容都会被当前运行的impala-shell进程接收为内部参数,不会经过系统Shell的语法解析,2>&1自然会被判定为无效参数。 - 在不支持Shell语法解析的调度/执行平台中,直接把整串命令按空格拆分后传入impala-shell的参数列表,
2>&1没有被识别为重定向指令,而是被当成普通字符串参数传给了impala-shell。
- 在已经进入impala-shell交互式会话的界面(提示符类似
解决方案
根据执行场景对应调整:
本地终端手动执行
- 确认当前命令行是系统Bash提示符(类似
[root@node ~]#),而非impala-shell的交互式会话提示符,再直接执行原命令即可:/usr/bin/impala-shell --ssl -k --ca_cert /opt/cloudera/security/x509/chain.pem -i bdpdevmstla***t:25003 -f ./query_partition.hql 2>&1 - 执行前确认当前工作目录下存在
./query_partition.hql文件,避免触发文件找不到的二级报错。
调度平台/无Shell解析的执行环境
- 部分调度平台的命令任务默认会把整串字符串按空格拆分后直接传入程序启动参数,不经过系统Shell的语法解析流程。这种场景需要用
bash -c包裹整串命令,强制走Shell语法解析:bash -c "/usr/bin/impala-shell --ssl -k --ca_cert /opt/cloudera/security/x509/chain.pem -i bdpdevmstla***t:25003 -f ./query_partition.hql 2>&1"
补充说明
当前的参数解析报错发生在impala-shell启动阶段,程序还未读取执行query_partition.hql中的SQL语句。等参数解析问题解决、命令正常启动后,如果出现SQL执行层面的报错,再针对性排查分区删除语法的版本兼容性即可。
内容的提问来源于stack exchange,提问作者Mah
相关产品推荐
相关产品推荐

