gpt4 book ai didi

python - 使用 python 在远程机器上列出 HDFS 目录

转载 作者:可可西里 更新时间:2023-11-01 15:04:25 25 4
gpt4 key购买 nike

我正在使用 python 进行日志挖掘工作。在 mapreduce 之前,程序应该知道远程机器上的 hdfs 中有哪些文件,以制作日志挖掘对象文件列表。

为此,我需要在远程计算机上执行 hadoop 命令 hadoop fs -ls/var/log/*20161202*

在谷歌上长时间搜索后,我未能选择一个 pyspark 界面来获取文件列表。 pyspark 好像没有提供这样的接口(interface)。

我看到一个 SO 回答说我需要使用 hdfscli 并将其导入到我的 python 脚本中。这也是唯一的办法吗?我不能相信 Spark 没有 hdfs 文件列表方法。

最佳答案

不清楚您所说的“远程”机器是什么意思。如果您指的是直接连接到集群(即集群的一部分)的机器,我的另一个答案是成立的;如果你的意思是一台不属于集群的机器,正如@jedijs 所建议的那样,答案是使用 pywebhdfs(只需通过 pip install pywebhdfs 安装):

from pywebhdfs.webhdfs import PyWebHdfsClient
from pprint import pprint

hdfs = PyWebHdfsClient(host='192.10.10.73',port='50070', user_name='ctsats') # your Namenode IP & username here
my_dir = 'user/ctsats'
pprint(hdfs.list_dir(my_dir))

结果是一个(相当长的)Python 字典(未显示)- 稍微试验一下以获得感觉。您可以解析它以获取名称和类型(文件/目录),如下所示:

data = hdfs.list_dir(my_dir)
pprint([[x["pathSuffix"], x["type"]] for x in data["FileStatuses"]["FileStatus"]])
# [[u'.Trash', u'DIRECTORY'],
# [u'.sparkStaging', u'DIRECTORY'],
# [u'checkpoint', u'DIRECTORY'],
# [u'datathon', u'DIRECTORY'],
# [u'ms-spark', u'DIRECTORY'],
# [u'projects', u'DIRECTORY'],
# [u'recsys', u'DIRECTORY'],
# [u'sparklyr', u'DIRECTORY'],
# [u'test.data', u'FILE'],
# [u'word2vec', u'DIRECTORY']]

为了比较,这里是同一目录的实际列表:

[ctsats@dev-hd-01 ~]$ hadoop fs -ls
Found 10 items
drwx------ - ctsats supergroup 0 2016-06-08 13:31 .Trash
drwxr-xr-x - ctsats supergroup 0 2016-12-15 20:18 .sparkStaging
drwxr-xr-x - ctsats supergroup 0 2016-06-23 13:23 checkpoint
drwxr-xr-x - ctsats supergroup 0 2016-02-03 15:40 datathon
drwxr-xr-x - ctsats supergroup 0 2016-04-25 10:56 ms-spark
drwxr-xr-x - ctsats supergroup 0 2016-06-30 15:51 projects
drwxr-xr-x - ctsats supergroup 0 2016-04-14 18:55 recsys
drwxr-xr-x - ctsats supergroup 0 2016-11-07 12:46 sparklyr
-rw-r--r-- 3 ctsats supergroup 90 2016-02-03 16:55 test.data
drwxr-xr-x - ctsats supergroup 0 2016-12-15 20:18 word2vec

必须启用 Hadoop 集群中的 WebHDFS 服务,即您的 hdfs-site.xml 文件必须包含以下条目:

<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>

关于python - 使用 python 在远程机器上列出 HDFS 目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41116360/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com