Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;“未找到直线命令”;从python脚本执行直线命令时出错(从oozie shell操作调用)_Python_Python 2.7_Shell_Beeline_Oozie Workflow - Fatal编程技术网

&引用;“未找到直线命令”;从python脚本执行直线命令时出错(从oozie shell操作调用)

&引用;“未找到直线命令”;从python脚本执行直线命令时出错(从oozie shell操作调用),python,python-2.7,shell,beeline,oozie-workflow,Python,Python 2.7,Shell,Beeline,Oozie Workflow,我有一个python脚本,我想使用oozie来安排它。我使用Oozie shell操作来调用脚本。脚本中有一个直线命令。运行oozie工作流时,出现错误“sh:beeline:command not found”。如果我从边缘节点手动运行这个脚本或仅仅是beeline命令,它运行得非常好。我的数据平台是Hortonworks 2.6。下面是我的workflow.xml和python脚本: Workflow.xml hcat.metastore.uri thrift://host:9083 hc

我有一个python脚本,我想使用oozie来安排它。我使用Oozie shell操作来调用脚本。脚本中有一个直线命令。运行oozie工作流时,出现错误“sh:beeline:command not found”。如果我从边缘节点手动运行这个脚本或仅仅是beeline命令,它运行得非常好。我的数据平台是Hortonworks 2.6。下面是我的workflow.xml和python脚本:

Workflow.xml


hcat.metastore.uri
thrift://host:9083
hcat.metastore.principal
蜂巢/_HOST@SOLON.PRD
${jobTracker}
${nameNode}
运行_validations.py
--jdbcURL${jdbcURL}
--jdbcPrincipal${jdbcPrincipal}
PYTHONPATH=/bin/python
PYTHON_EGG_CACHE=/tmp
路径=/usr/bin
HADOOP_CLASSPATH=${HADOOP_CLASSPATH}
运行_validations.py
Shell操作失败,错误消息[${wf:errorMessage(wf:lastErrorNode())}]
脚本:

#/usr/bin/env蟒蛇2
导入系统、操作系统、命令、日期时间、时间、getpass、错误号
从optpasse导入OptionParser
导入子流程
从子流程导入Popen、PIPE
def arg_handle():
用法=“用法:运行\u validations.py[选项]”
parser=OptionParser(用法)
parser.add_选项(“-u”,“--jdbcURL”,dest=“jdbcURL”,help=“jdbcURL”)
add_选项(“-p”,“--jdbcPrincipal”,dest=“jdbcPrincipal”,help=“jdbcPrincipal”)
(options,args)=parser.parse_args()
打印(“run_validations.py->Input:”+str(选项))
返回选项
def main():
打印(“run\u validations.py->Started run\u validations.py”)
选项=arg_handle()
打印(“jdbcURL:+options.jdbcURL”)
打印(“JDBC主体:+options.jdbcPrincipal”)
beeline_connection=options.jdbcURL+“principal=“+options.jdbcPrincipal”
配置单元命令='beeline-u'+beeline\u连接+'“-e”选择1+2;“'
打印(“已调用:”+hive\u cmd)
rc,out=commands.getstatusoutput(配置单元命令)
如果(rc==0):
打印(“RC:+str(RC))
打印(“输出:”)
打印(输出)
其他:
打印(“RC:+str(RC))
打印(“输出:”)
打印(输出)
如果名称=“\uuuuu main\uuuuuuuu”:
main()
输出

现在调用Shell命令行>> Stdoutput run\u validations.py->start run\u validations.py Stdoutput run_validations.py->Input:{'jdbcURL':'jdbc:hive2://host:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2','jdbcPrincipal':'hive/_HOST@SOLON.PRD'} 调用的Stdoutput:beeline-u“jdbc:hive2://host:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2;principal=hive/_HOST@SOLON.PRD“-e”选择1+2 标准输出RC:32512 标准输出: Stdoutput sh:beeline:未找到命令 Shell命令0的退出代码
Oozie在Hadoop集群中的另一个节点(可能是其中一个数据节点)执行shell操作,而不是边缘节点(测试beeline或python脚本的节点)。在边缘节点中,必须安装beeline,这就是您能够测试它的原因

但实际问题是执行shell操作的节点似乎没有直接安装。如果您有权访问该节点,则可以登录并检查beeline

我建议您尝试组合蜂巢操作和外壳操作,以完成您试图完成的任务

参考:

>>> Invoking Shell command line now >>

Stdoutput run_validations.py  -> Started Run_validations.py
Stdoutput run_validations.py  -> Input      : {'jdbcURL': 'jdbc:hive2://host:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2', 'jdbcPrincipal': 'hive/_HOST@SOLON.PRD'}
Stdoutput Invoked :beeline -u "jdbc:hive2://host:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2;principal=hive/_HOST@SOLON.PRD" -e "select 1+2;"
Stdoutput RC : 32512
Stdoutput Output :
Stdoutput sh: beeline: command not found
Exit code of the Shell command 0
<<< Invocation of Shell command completed <<<