采用Python来访问Hadoop HSFS存储实现文件的操作

用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

相关问答

1. 启用 Synology NAS 的 WebDAV 通过 WebDAV 访问文件之前,您必须先在 Synology NAS 上启用 WebDAV: 1 使用属于 administrators 群组的帐户登录 DSM; 2 进入套件中心以安装 WebDAV Server 套件; 3 安装完成后,启动 WebDAV Server,并勾选启用 HTTP 复选框; 4 单击应用来保存设置。 2. 通过 WebDAV 访问 Synology NAS 中的文件 对于想要使用 WebDAV 协议访问 Syn

...

你好,概述 WebDAV 是一个 HTTP 的扩充服务,可让用户编辑和管理存储在远程服务器上的文件。通过 Synology DiskStation Manager 的 WebDAV 服务,支持 WebDAV 的客户端程序(如 Windows 资源管理器、Mac OS Finder、Linux 资源管理器)将能够远程访问 Synology DiskStation,如同访问本地网络硬盘。 本教程将说明如何启用 Synology DiskStation 的 WebDAV 协议,并开始从任何地方访问文件。

...

在Windows 7下配置PHP环境等,就针对此问题下面进行详细介绍。 (1)、采用理由: 优点:最大化的桌面图形化操作系统,可维护性优秀。基于IIS v6.0/v7.0(2008),可以支持的脚本相当完整,不仅支持Linux无法支持的asp/asp.net,还可以安装php、mysql、 zend实现php环境。同时,利用Serv-U可以实现ftp管理。操作简单,无需键入任何命令就可实现全能型主机。 (2)、操作步骤: 说明:本教程采用IIS v7.0+php+mysql+zend在Win7下构

...

关于使用ctypes从Python调用DLL的提示依赖于绝大多数时间,而C ++或C ++编写的是DLL,而不是C#。 有了C#,你可以使用CLR的整个机器,并且这些符号很可能会被破坏,而不是ctypes所期望的,并且会从输出数组的垃圾回收中获得各种麻烦。 在使用python for dot net( http://pythonnet.sf.net )连接python和C#代码时,我已经取得了非常好的成功,您可能想尝试一下。 另一方面,如果您是为了获得纯粹的性能,请考虑使用Python / C A

...

使用正则表达式: inputfile/* - 适用于1级子目录 inputfile/*/* - 适用于2级子目录 运行方式: hadoop jar /usr/hdp/2.3.2.0-2950/hadoop-mapreduce/hadoop-streaming.jar -mapper "python wordcount_mapper.py" -file wordcount_mapper.py -input inputfile/* -output outputfile3 Use regular exp

...

您可以使用__file__伪变量来查找脚本所在的目录。 dir_path = os.path.dirname(os.path.realpath(__file__)) 然后你可以使用os.path.join来组成你的数据文件的完整路径 You can use __file__ pseudo variable, to find the directory where your script is located. dir_path = os.path.dirname(os.path.realpath(

...

全部取决于您使用的散列函数。 如果这是sha1,md5sum或不可逆的antyhing,那么您需要创建一个单独的“map”文件,该文件将包含散列和相应的数据。 现在,有了这样的映射,您可以读取包含哈希值的文件,并将这些哈希值替换为从映射文件中读取的相应数据。 散列和分割功能: while ( chunk = get_next_chunk())

{

hash = hashing_function( chunk ) ;

store( hash ) ;

if ( !map.find( has

...

不, wxFileName没有任何支持。 Windows下的“隐藏”属性实际上是特定于Windows的,因此使用Windows ::GetFileAttributes()来测试它确实没有错。 但是在wxFileName测试中有一个方法在Windows下执行此操作并检查文件名的第一个字符是否在Unix下是一个点仍然有用,并且实际上并不是很难实现,所以如果您想要添加它,请偶然随时将它贡献给wxWidgets。 No, wxFileName doesn't have any support for th

...

你能试试这条规则吗: RewriteCond %{HTTP_REFERER} !^http://(www\.)?site\.com/ [NC]

RewriteRule (^|/)B\.php(/|$) - [F,NC]

Can you try this rule: RewriteCond %{HTTP_REFERER} !^http://(www\.)?site\.com/ [NC]

RewriteRule (^|/)B\.php(/|$) - [F,NC]