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

2019-03-28 12:57|来源: 网络

用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

相关问答

更多
  • 1. 启用 Synology NAS 的 WebDAV 通过 WebDAV 访问文件之前,您必须先在 Synology NAS 上启用 WebDAV: 1 使用属于 administrators 群组的帐户登录 DSM; 2 进入套件中心以安装 WebDAV Server 套件; 3 安装完成后,启动 WebDAV Server,并勾选启用 HTTP 复选框; 4 单击应用来保存设置。 2. 通过 WebDAV 访问 Synology NAS 中的文件 对于想要使用 WebDAV 协议访问 Synology ...
  • 你好,概述 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 API( h ...
  • 使用正则表达式: 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 expressi ...
  • 您可以使用__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(__fil ...
  • 全部取决于您使用的散列函数。 如果这是sha1,md5sum或不可逆的antyhing,那么您需要创建一个单独的“map”文件,该文件将包含散列和相应的数据。 现在,有了这样的映射,您可以读取包含哈希值的文件,并将这些哈希值替换为从映射文件中读取的相应数据。 散列和分割功能: while ( chunk = get_next_chunk()) { hash = hashing_function( chunk ) ; store( hash ) ; if ( !map.find( hash )) ...
  • 不, wxFileName没有任何支持。 Windows下的“隐藏”属性实际上是特定于Windows的,因此使用Windows ::GetFileAttributes()来测试它确实没有错。 但是在wxFileName测试中有一个方法在Windows下执行此操作并检查文件名的第一个字符是否在Unix下是一个点仍然有用,并且实际上并不是很难实现,所以如果您想要添加它,请偶然随时将它贡献给wxWidgets。 No, wxFileName doesn't have any support for this. " ...
  • 你能试试这条规则吗: 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]