我有多个hadoop命令要运行,这些命令将从python脚本调用。目前,我尝试了以下方法。
import os
import xml.etree.ElementTree as etree
import subprocess
filename = "sample.xml"
__currentlocation__ = os.getcwd()
__fullpath__ = os.path.join(__currentlocation__,filename)
tree = etree.parse(__fullpath__)
root = tree.getroot()
hivetable = root.find("hivetable").text
dburl = root.find("dburl").text
username = root.find("username").text
password = root.find("password").text
tablename = root.find("tablename").text
mappers = root.find("mappers").text
targetdir = root.find("targetdir").text
print hivetable
print dburl
print username
print password
print tablename
print mappers
print targetdir
p = subprocess.call(['hadoop','fs','-rmr',targetdir],stdout = subprocess.PIPE, stderr = subprocess.PIPE)
但是,代码不起作用。如果不删除目录,也不会引发错误。
1条答案
按热度按时间vc6uscn91#
我建议你稍微改变一下你的方法,否则我就是这样做的。我使用python库
import commands
那就看你怎么用了(https://docs.python.org/2/library/commands.html). 以下是lil演示:这使您的输出类似于(取决于您在hdfs dir中拥有的内容)
注:lib
commands
不适用于Python3(据我所知),我使用的是Python2.7。注意:请注意commands
如果你愿意subprocess
相当于commands
对于python3,您可以考虑找到一种适当的方法来处理“管道”。我发现这个讨论在这个意义上很有用:(subprocess popen to run commands(hdfs/hadoop))我希望这个建议对你有帮助!
最好的