歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 采用Python來訪問Hadoop HSFS存儲實現文件的操作

采用Python來訪問Hadoop HSFS存儲實現文件的操作

日期:2017/3/1 9:54:40   编辑:Linux編程

用python訪問hdfs是個很頭疼的事情。

這個是pyhdfs的庫

import pyhdfs
fs = pyhdfs.connect("192.168.1.1", 9000)
pyhdfs.get(fs, "/rui/111", "/var/111")
f = pyhdfs.open(fs, "/test/xxx", "w")
pyhdfs.write(fs, f, "fuck\0gfw\n")
pyhdfs.close(fs, f)
pyhdfs.disconnect(fs)

pyhdfs的安裝過程很吐血

svn checkout http://libpyhdfs.googlecode.com/svn/trunk/ libpyhdfs
cd libpyhdfs
cp /usr/lib/Hadoop-0.20/hadoop-core-0.20.2-cdh3u0.jar lib/hadoop-0.20.1-core.jar
cp /usr/lib/hadoop-0.20/lib/commons-logging-1.0.4.jar lib/
cp /usr/lib/libhdfs.so.0 lib/
ln –s lib/libhdfs.so.0 lib/libhdfs.so
python setup.py install --prefix="/usr/local"

還有是把 selinux也給關了 不然會出現莫名的問題

如果出現
/usr/lib/jvm/java-6-sun/include/jni.h:27:20: error: jni_md.h: No such file or directory
搜下find / -name jni.h
然後修改#include "jni_md.h" 為 #include "linux/jni_md.h"

這個是用pydoop的庫

import pydoop.hdfs as hdfs
with hdfs.open('/user/myuser/filename') as f:
for line in f:
print(line)

我現在使用的方法是用subprocess
也挺行~
需要把很多自己常用的指定都封裝成庫

cat = subprocess.Popen(["hadoop", "fs", "-cat", "/path/to/myfile"], stdout=subprocess.PIPE)
for line in cat.stdout:
print line

更多Hadoop相關信息見Hadoop 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=13

Copyright © Linux教程網 All Rights Reserved