不清楚您所说的“远程”机器是什么意思。如果您的意思是直接连接到集群(即一部分)的机器,我的另一个答案是成立的;如果您的意思是一台不属于集群的机器,那么正如@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>