带有oozie的Python子流程

带有oozie的Python子流程,python,shell,hadoop,oozie,Python,Shell,Hadoop,Oozie,我试图在python脚本中使用subprocess,我在oozieshell操作中调用该脚本子进程应该读取存储在Hadoop的HDFS中的文件 我在伪分布式模式下使用hadoop-1.2.1和oozie-3.3.2 下面是名为connected\u subprocess.py的python脚本: #!/usr/bin/python import subprocess import networkx as nx liste=subprocess.check_output("hadoop fs

我试图在
python
脚本中使用
subprocess
,我在
oozie
shell操作中调用该脚本
子进程
应该读取存储在Hadoop的HDFS中的文件

我在伪分布式模式下使用hadoop-1.2.1和oozie-3.3.2

下面是名为
connected\u subprocess.py
python脚本:

#!/usr/bin/python

import subprocess
import networkx as nx

liste=subprocess.check_output("hadoop fs -cat /user/root/output-data/calcul-proba/final.txt",shell=True).split('\n')
G=nx.DiGraph()
f=open("/home/rlk/liste_strongly_connected.txt","wb")
for item in liste:
    try:
        app1,app2=item.split('\t')
        G.add_edge(app1,app2)
    except:
        pass
liste_connected=nx.strongly_connected_components(G)
for item in liste_connected:
    if len(item)>1:
        f.write('{}\n'.format('\t'.join(item)))
f.close()
Oozie的workflow.xml中对应的shell操作如下:

 <action name="final">
        <shell xmlns="uri:oozie:shell-action:0.1">
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <configuration>
                <property>
                    <name>mapred.job.queue.name</name>
                    <value>${queueName}</value>
                </property>
            </configuration>
            <exec>connected_subprocess.py</exec>
            <file>connected_subprocess.py</file>
         </shell>
         <ok to="end" />
         <error to="kill" />
    </action>

${jobTracker}
${nameNode}
mapred.job.queue.name
${queueName}
已连接的_subprocess.py
已连接的_subprocess.py
当我运行oozie作业时,tasktracker日志会读取以下错误:

Error: Could not find or load main class org.apache.hadoop.fs.FsShell
Traceback (most recent call last):
  File "./connected_subprocess.py", line 6, in <module>
    liste=subprocess.check_output("hadoop fs -cat /user/root/output-data/calcul-proba/final.txt",shell=True).split('\n')
  File "/usr/lib64/python2.7/subprocess.py", line 575, in check_output
    raise CalledProcessError(retcode, cmd, output=output)
subprocess.CalledProcessError: Command 'hadoop fs -cat /user/root/output-data/calcul-proba/final.txt' returned non-zero exit status 1
Failing Oozie Launcher, Main class [org.apache.oozie.action.hadoop.ShellMain], exit code [1]
错误:无法找到或加载主类org.apache.hadoop.fs.fshell
回溯(最近一次呼叫最后一次):
文件“/connected_subprocess.py”,第6行,在
liste=subprocess.check_输出(“hadoop fs-cat/user/root/output data/calcul proba/final.txt”,shell=True)。拆分('\n')
文件“/usr/lib64/python2.7/subprocess.py”,第575行,在check_输出中
引发被调用的进程错误(retcode,cmd,output=output)
subprocess.CalledProcessError:命令'hadoop fs-cat/user/root/output data/calcul proba/final.txt'返回非零退出状态1
Oozie启动器失败,主类[org.apache.Oozie.action.hadoop.ShellMain],退出代码[1]
当python脚本嵌入到oozie操作中时,我似乎无法在python脚本中运行shell命令行,因为在交互式shell中运行python脚本时一切正常


有什么方法可以绕过这个限制吗?

我想知道您的脚本是否无法访问PATH环境变量(通过Oozie执行时),并且在定位“hadoop”命令时遇到问题。是否可以尝试修改python脚本的子进程。检查输出调用并将完整路径添加到hadoop fs命令?

我想知道您的脚本是否无法访问path环境变量(通过Oozie执行时),并且无法定位“hadoop”命令。能否尝试修改python脚本的子进程。检查输出调用并将完整路径添加到hadoop fs命令?

是的,我意识到这是一个路径问题。事实上,我没有为运行oozie作业的用户正确设置hadoop的路径。谢谢你的回答!是的,我意识到这是一个路径问题。事实上,我没有为运行oozie作业的用户正确设置hadoop的路径。谢谢你的回答!