用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的安装过程很吐血
还有是把 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