如何在python中一次将多个文件从本地服务器移动到HDFS?
我在服务器上使用python v3.4,经常需要将多个文件从本地目录复制/移动到hdfs目录。我的所有文件都在子目录中,而子目录又在MyDir中。这是我使用的命令-如何在python中一次将多个文件从本地服务器移动到HDFS?,python,python-3.x,hadoop,subprocess,hdfs,Python,Python 3.x,Hadoop,Subprocess,Hdfs,我在服务器上使用python v3.4,经常需要将多个文件从本地目录复制/移动到hdfs目录。我的所有文件都在子目录中,而子目录又在MyDir中。这是我使用的命令- $hdfs dfs-copyFromLocal MyDir/*/path/to/hdfs/ 这个命令在服务器上运行得很好,但当我在python中使用subprocess时使用相同的命令 >子流程调用(['hdfs','dfs','-copyFromLocal','MyDir/*','/path/to/hdfs/']) 它给出了以下错
$hdfs dfs-copyFromLocal MyDir/*/path/to/hdfs/
这个命令在服务器上运行得很好,但当我在python中使用subprocess时使用相同的命令
>子流程调用(['hdfs','dfs','-copyFromLocal','MyDir/*','/path/to/hdfs/'])
它给出了以下错误-
copyFromLocal: `MyDir/*': No such file or directory
1
另外,我还尝试了['hadoop'、'fs'、'-put'..]
而不是['hdfs'、'dfs'、'-copyFromLocal'..]
,它也不起作用
有人能帮我吗?任何帮助都将不胜感激
编辑-我需要将文件与子目录一起移动。添加
shell=True
:
>>> subprocess.call(['hdfs', 'dfs', '-copyFromLocal', 'MyDir/*', '/path/to/hdfs/'], shell=True)
阅读本文:我将编写一个带有子进程的函数,它将为您提供输出和错误:
import subprocess
def run_cmd(args_list):
"""
run linux commands
"""
# import subprocess
print('Running system command: {0}'.format(' '.join(args_list)))
proc = subprocess.Popen(args_list, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
s_output, s_err = proc.communicate()
s_return = proc.returncode
return s_return, s_output, s_err
然后:
这将遍历目录中的所有文件,并将它们放在所需的HDFS目录中将命令中的所有内容附加到单个字符串中,并给出参数shell=True
subprocess.call('hdfs dfs -copyFromLocal MyDir/* /path/to/hdfs/', shell = True)
我试过了,它返回了
hadoop命令用法
以及zero exit status
,但是当我检查hdfs路径中的文件时,它们不在那里。
subprocess.call('hdfs dfs -copyFromLocal MyDir/* /path/to/hdfs/', shell = True)