列出hdfs python中没有pydop的所有文件

qhhrdooz  于 2021-06-02  发布在  Hadoop
关注(0)|答案(3)|浏览(354)

我有一个运行在centos 6.5上的hadoop集群。我目前正在使用Python2.6。由于不相关的原因,我无法升级到python2.7。由于这个不幸的事实,我不能安装pydoop。在hadoop集群中,我有大量名为raw“yearmonthdaytimehour.txt”的原始数据文件,括号中的所有内容都是数字。有没有办法在python中列出hadoop目录中的所有文件?所以程序会创建一个类似的列表。

listoffiles=['raw160317220001.txt', 'raw160317230001.txt', ....]

这将使我需要做的一切变得更加容易,因为要从第2天第15小时开始获取文件,我只需要调用dothing(listoffiles[39])。我为什么要这样做,有一些不相关的复杂因素。
我知道有一种方法可以用本地目录轻松地做到这一点,但是hadoop让一切变得更加复杂。

wqsoz72f

wqsoz72f1#

我推荐这个python项目:https://github.com/mtth/hdfs 它使用httpfs,实际上非常简单和快速。我在我的kerberos集群上使用了它,它的工作非常出色。您只需要设置namenode或httpfs服务url。

r7knjye2

r7knjye22#

如果pydoop不起作用,您可以尝试snakebite库,它应该与python2.6一起工作。另一种选择是启用webhdfsapi,并将其直接用于请求或类似的内容。

print requests.get("http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=LISTSTATUS").json()

蛇咬伤:

from snakebite.client import Client
client = Client("localhost", 8020, use_trash=False)
for x in client.ls(['/']):
    print x
lp0sw83n

lp0sw83n3#

我建议去看看hdfs3

>>> from hdfs3 import HDFileSystem
>>> hdfs = HDFileSystem(host='localhost', port=8020)
>>> hdfs.ls('/user/data')
>>> hdfs.put('local-file.txt', '/user/data/remote-file.txt')
>>> hdfs.cp('/user/data/file.txt', '/user2/data')

像snakebite一样,hdfs3使用protobufs进行通信,并绕过jvm。与snakebite不同,hdfs3提供kerberos支持

相关问题