2016-04-02 15 views
0

Centos 6.5 üzerinde çalışan bir tonoz küme var. Şu anda python 2.6 kullanıyorum. İlişkisiz nedenlerden dolayı python 2.7'ye yükseltme yapamıyorum. Bu talihsiz gerçek nedeniyle pydoop'u kuramıyorum. Hamdogu küme içinde ham "yearmonthdaytimehour" olarak adlandırılan büyük miktarda ham veri dosyaları var. .txt parantez içinde her şey bir sayıdır. Python'da bir dolandırıcı dizinindeki tüm dosyaların bir listesini yapmak için bir yol var mı? Yani program, bir şey gibi görünen bir liste oluşturur. Her şeyi yapacakPydoop olmadan HDFS Python'da bulunan tüm dosyaları listele

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

i sadece dothing çağırmak gerekir gün 2 saat 15 dosyayı almak için çünkü çok daha kolay yapmak gerekir (listoffiles [39]). Bu şekilde neden yapmak zorunda olduğumun alakasız komplikasyonları var.

Yerel dizinlerle bunu kolayca yapmanın bir yolu olduğunu biliyorum, ancak hadoop her şeyi biraz daha karmaşık hale getiriyor.

+0

Yani Pyphon'da HDFS dosyalarını pydoop olmadan listelemek için bir yol mu istiyorsunuz? – kichik

+0

Sadece hadoop fs -ls komutunu bir kabuk işlemiyle çalıştırın (Hadoop ikili dosyalarını yüklediğiniz varsayılarak) –

+0

Tüm hdfs dosyalarının adlarını içeren bir dizinin nasıl oluşturulacağını soruyorum. – Sam

cevap

1

Pydoop çalışmıyorsa, Python 2.6 ile çalışması gereken Snakebite kitaplığını deneyebilirsiniz. Başka bir seçenek WebHDFS API'u etkinleştirmek ve bunu doğrudan requests veya benzeri bir şeyle kullanmaktır. Yılan ısırığı ile

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

nasıl yılan ısırığı kullanarak yapardım? Bunu yüklemek için var. – Sam

+0

Yanıtı [example] (http://snakebite.readthedocs.org/en/latest/client.html?highlight=list) içerecek şekilde güncelledim. – kichik

+0

Yerel ana makine, core-site.xml dosyasında ne bulunur? ya da sadece "localhost" dizesi? Bir lowecase c ile "istemci adında bir modül yok" hatası alıyorum – Sam

0

Ben Snakebite gibi iletişim için, hdfs3 kullanım protobufs 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') 

kontrol önermek ve JVM atlar olacaktır. Snakebite'den farklı olarak, hdfs3 kerberos desteği sunar

1

Bu Python projesini öneririm: https://github.com/mtth/hdfs HttpFS'yi kullanıyor ve aslında oldukça basit ve hızlı. Kerberos ile küme üzerinde kullanıyorum ve bir çekicilik gibi çalışıyor. Sadece adenode veya HttpFs servis URL'sini ayarlamanız gerekir.

İlgili konular