hdfs4py了提供python调用HDFS的接口。
libhdfs是Hadoop官方提供的一套HDFS C++ API。hdfs4py是用swig技术,对libhdfs提供的API进行封装,以支持python对HDFS的调用。
由于个人项目的需要,调研了如下几款python调用HDFS的方式:
- 调研了几个开源的HDFS客户端
- hdfscli: 使用webhdfs,不符合用户使用习惯
- pydoop:未安装成功
- hadoopy:没有提供完整的API,项目缺少维护
- 调研了python调用java api技术
- JPype:无法正常找到classpath
- Pyjnius: 需要JDK 1.6, 无法正常找到classpath
- 调研了python调用C++ api技术
- 采用swig技术
最终,采用swig封装HDFS C++ API为python API被发现为最为可行的方式。
- git clone https://github.com/fortianyou/hdfs4py.git
- 安装并配置HDFS
- 安装swig(本文使用2.0.10版本)
- 执行如下命令,以编译生成hdfs4py:
python setup.py build_ext --inplace
- setup.py的内容如下:
from distutils.core import setup, Extension
import os
HDH=os.environ['HADOOP_HOME']
headers = HDH + '/include'
libs = HDH + '/lib/native'
hdfs4py_module = Extension('_hdfs4py',
sources = ['hdfs4py.i'],
swig_opts=[ '-Wall', '-DSWIGWORDLENGTH64' ,'-I'+headers, '-I/usr/include'],
include_dirs=[headers],
library_dirs=[libs],
libraries=['hdfs'])
setup( name = 'hdfs4py',
version = '0.1',
author = 'SWIG',
description = """Simple swig example from docs""",
ext_modules = [hdfs4py_module],
py_modules = ["hdfs4py"]
)
python demo.py
在项目构建过程中,参考了项目pyhdfs。