我正在使用python进行日志挖掘工作。在mapreduce之前,程序应该知道远程机器上的hdfs中有哪些文件来创建日志挖掘对象文件列表。
要做到这一点,首先,我需要执行一个hadoop命令,即
例如,hadoop fs -ls /var/log/*20161202*
在远程计算机上。
经过长时间的谷歌搜索后,我没有选择一个pyspark界面来获取文件列表。看来他们pyspark不提供这样的界面。
我看到一个stackoverflow回答说我需要使用hdfscli并在我的python脚本中导入它。你认为这也是唯一的方法吗?我不敢相信Spark没有hdfs文件列表方法。任何评论都会对我有所帮助。感谢
答案 0 :(得分:3)
目前尚不清楚你的意思是"远程"机。如果你的意思是直接连接到群集(即部分群集)的机器,我的另一个答案成立;如果您指的是不属于群集的计算机,则@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>
答案 1 :(得分:0)
您不需要pyspark细节 - 调用系统命令的标准Python方法应该可以解决这个问题:
>>> import os
>>> os.system("hadoop fs -ls")
Found 11 items
drwxr-xr-x - oracle oracle 0 2016-12-02 07:25 .Trash
drwxr-xr-x - oracle oracle 0 2016-11-18 06:48 .sparkStaging
drwx------ - oracle oracle 0 2016-12-06 11:10 .staging
drwxr-xr-x - oracle oracle 0 2016-12-06 10:45 datathon
drwxr-xr-x - hdfs oracle 0 2016-10-24 16:16 indexMetadata
drwxr-xr-x - hdfs oracle 0 2016-10-24 16:14 jobRegistry
drwxr-xr-x - oracle oracle 0 2016-10-04 19:29 mediademo
drwxr-xr-x - oracle oracle 0 2016-10-04 19:30 moviedemo
drwxr-xr-x - oracle oracle 0 2016-10-04 19:30 moviework
drwxr-xr-x - oracle oracle 0 2016-10-04 19:30 oggdemo
drwxr-xr-x - oracle oracle 0 2016-10-04 19:30 oozie-oozi
0
>>> os.system("hadoop fs -ls datathon")
Found 1 items
-rw-r--r-- 3 oracle oracle 2810687 2016-12-06 10:44 datathon/2013_09_01.log
0
您可以看到更多选项和示例here。