首页 > 解决方案 > 如何在 Python 中将文件从本地移动到 HDFS?

问题描述

我有一个脚本来检查目录中的文件。如果存在正确的文件(带有关键字),我想将该/那些文件移动到 HDFS 位置。

import os
tRoot = "/tmp/mike"
keyword = "test"
for root, dirs, files in os.walk(tRoot):
    for file in files:
        if keyword in file:
            fullPath = str(os.path.join(root, file))
        subprocess.call(['hdfs', 'dfs', '-copyFromLocal','/tmp/mike/test*','hdfs:///user/edwaeadt/app'], shell=True)

我看到以下错误:

Usage: hdfs [--config confdir] [--loglevel loglevel] COMMAND

我也试过

 subprocess.call(['hadoop', 'fs', '-copyFromLocal', '/tmp/mike/test*', 'hdfs:///user/edwaeadt/app'], shell=True)

但我看到

Usage: hadoop [--config confdir] [COMMAND | CLASSNAME]
  CLASSNAME       

此外,似乎这个循环运行了 3 次。因为我现在看到文件移动到 hdfs 位置,但我也看到两次它说文件存在的地方。似乎这个 copyFromLocal 正在运行 3 次。有任何想法吗?

标签: pythonshellhdfs

解决方案


如果您打算使用 subprocess 和 shell=True 那么您的命令应该读作

subprocess.call(['hadoop fs -copyFromLocal /tmp/mike/test* hdfs:///user/edwaeadt/app'], shell=True)

推荐阅读