python - 如何在 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 次。有任何想法吗?
解决方案
如果您打算使用 subprocess 和 shell=True 那么您的命令应该读作
subprocess.call(['hadoop fs -copyFromLocal /tmp/mike/test* hdfs:///user/edwaeadt/app'], shell=True)
推荐阅读
- c# - 在 Ninject 中绑定后更改连接字符串
- visual-studio - MS Visual Studio 13 Forms SQL Server 2008 V2 慢查询返回
- python - Python自定义记录器未打印到控制台
- javascript - 如何使用jspdf制作多个页面
- javascript - 如何在 React Native 中使用 FlatList 和 webView 显示数据?
- sonarqube-scan - SonarCloud:如何使用 T-SQL 规则而不是 PL/SQL 规则
- javascript - 在 td 中添加 TR
- django - Apache2 反向代理剥离了我的自定义标头
- mysql - 使用 sqldiff 将 SQL 数据库与 Django 模式进行比较
- wordpress - Wordpress 图片库显示空白照片