2016-04-02 24 views
0

我有一個運行在centos 6.5上的hadoop集羣。我目前使用Python 2.6。由於不相關的原因,我無法升級到Python 2.7。由於這個不幸的事實,我不能安裝pydoop。在hadoop集羣中,我有大量的原始數據文件,名爲raw「yearmonthdaytimehour」.txt括號中的所有內容都是數字。 有沒有辦法在python中製作hadoop目錄下的所有文件列表?所以程序會創建一個類似的列表。在沒有pydoop的情況下列出HDFS中的所有文件

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

它將使一切我需要做很多更容易,因爲擺脫每天2小時15文件,我將只需要調用dothing(listoffiles [39])。爲什麼我必須這樣做呢,有一些無關的複雜因素。

我知道有一種方法可以很容易地使用本地目錄來完成這項工作,但hadoop使得一切都變得更加複雜。

+0

所以你要求一種方法來在Python中列出沒有pydoop的HDFS文件? – kichik

+0

只需通過shell進程運行'hadoop fs -ls'命令(假設你已經安裝了Hadoop二進制文件) –

+0

im問如何創建一個包含所有hdfs文件名稱的數組。 – Sam

回答

1

如果pydoop不起作用,您可以嘗試使用Python 2.6的Snakebite庫。另一種選擇是啓用WebHDFS API並直接使用requests或類似的東西。

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 
+0

我將如何使用蛇咬傷呢?我有這個安裝。 – Sam

+0

我更新了答案以包含[示例](http://snakebite.readthedocs.org/en/latest/client.html?highlight=list)。 – kichik

+0

本地主機被定義爲在core-site.xml中發現的內容?或者只是字符串「localhost」?我得到一個錯誤「沒有模塊命名客戶端」與小寫字母c – Sam

0

我建議檢查出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支持

1

我會推薦這個Python項目:https://github.com/mtth/hdfs 它使用HttpFS,它實際上非常簡單和快速。我一直在使用Kerberos的集羣上使用它,並且像魅力一樣工作。您只需要設置namenode或HttpFs服務URL。

相關問題