python对Hadoop的hdfs的操作——-pyhdfs或python调用shell文件

python对Hadoop的hdfs的操作——-pyhdfs或python调用shell文件

本人在写基因组里的序列比对算法时,需要用Hadoop加快运算的速度,在java中可以直接调用Hadoop里面API提供的方法对hdfs操作,然而由于本人是用python写的算法,需要借助pyhdfs或python调用shell文件来对hdfs来进行操作。

一、pyhdfs操作hdfs

下面本人都详细介绍pyhdfs的安装过程及所需要的安装包见百度网盘:

链接:http://pan.baidu.com/s/1eRSc2aQ 密码:yeov

其中安装的过程直接照着步骤一步步来就可以了,本人Hadoop是Hadoop-2.5.2。

利用pyhdfs打开hdfs文件的实例:

import pyhdfs

#你的Hadoop的master的IP地址
fs=pyhdfs.HdfsClient(hosts="192.168.79.130")
#打开hdfs中目录的文件,f相当于python打开文件的指针
f=fs.open("/hadoop/Test1/input/result.txt")
#输出该文件的第一行
print f.readline()
#关闭 f
f.close()

运行结果如下:

[aa@master BWA]$ python hdfsPythonTest.py
AGCTTTTCATTCTGACTGCAACGGGCAATATGTCT$0

注意运行的时候时候前面加上python来运行python文件,当然运行前先启动Hadoop,要不然怎么访问hdfs呢?
更多的有关pyhdfs的操作看pyhdfs操作文档
pyhdfs操作文档

二、python调用shell文件

从该方法可以看出python这门脚本语言的强大之处,下面就是python调用shell文件的实例:

pythonShellHdfs.py文件

#coding=utf-8
import subprocess

#python调用shell命令
subprocess.call('/home/cjx/hadoop-2.5.2/bin/hadoop fs -ls /hadoop/TestSpark/output',shell=True)
print '----------------- '
#python调用shell文件
subprocess.call('run.sh',shell=True)

run.sh文件

/home/cjx/hadoop-2.5.2/bin/hadoop fs -ls /hadoop/TestSpark

当出现下面bug时:

[cjx@master hdfs]$ python pythonShellHdfs.py
17/08/11 03:10:24 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Found 2 items
-rw-r--r--   1 cjx supergroup          0 2017-08-11 01:02 /hadoop/TestSpark/output/_SUCCESS
-rw-r--r--   1 cjx supergroup       5059 2017-08-11 01:02 /hadoop/TestSpark/output/part-00000
----------------- 
/bin/sh: ./run.sh: Permission denied

只需要改变run.sh的文件权限即可:

[cjx@master hdfs]$ ls
hdfsPythonTest.py  pythonShellHdfs.py  run.sh
[cjx@master hdfs]$ chmod 777 run.sh

正确运行结果如下:

[cjx@master hdfs]$ python pythonShellHdfs.py
17/08/11 03:10:52 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Found 2 items
-rw-r--r--   1 cjx supergroup          0 2017-08-11 01:02 /hadoop/TestSpark/output/_SUCCESS
-rw-r--r--   1 cjx supergroup       5059 2017-08-11 01:02 /hadoop/TestSpark/output/part-00000
----------------- 
17/08/11 03:10:55 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Found 1 items
drwxr-xr-x   - cjx supergroup          0 2017-08-11 01:02 /hadoop/TestSpark/output

相关python调用shell命令一大堆博客都有写有关用法,我这里推荐一个链接吧!
python调用shell命令

好了,python调用hdfs的方法讲完了,本人只是将自己发现的方法总结下来,可能不全,欢迎大家补充!

你可能感兴趣的:(Hadoop)