来自python脚本的hadoop命令?

z8dt9xmd  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(316)

我有多个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)

但是,代码不起作用。如果不删除目录,也不会引发错误。

vc6uscn9

vc6uscn91#

我建议你稍微改变一下你的方法,否则我就是这样做的。我使用python库 import commands 那就看你怎么用了(https://docs.python.org/2/library/commands.html). 以下是lil演示:

import commands as com
print com.getoutput('hadoop fs -ls /')

这使您的输出类似于(取决于您在hdfs dir中拥有的内容)

/usr/local/Cellar/hadoop/2.7.3/libexec/etc/hadoop/hadoop-env.sh: line 25: /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home: Is a directory
Found 2 items
drwxr-xr-x   - someone supergroup          0 2017-03-29 13:48 /hdfs_dir_1
drwxr-xr-x   - someone supergroup          0 2017-03-24 13:42 /hdfs_dir_2

注:lib commands 不适用于Python3(据我所知),我使用的是Python2.7。注意:请注意 commands 如果你愿意 subprocess 相当于 commands 对于python3,您可以考虑找到一种适当的方法来处理“管道”。我发现这个讨论在这个意义上很有用:(subprocess popen to run commands(hdfs/hadoop))
我希望这个建议对你有帮助!
最好的

相关问题