源码编译安装python2.7替换Hadoop集群的python2.6

背景

使用Hadoop streaming + python开发,集群节点的python是python2.6,语法与python2.7略有不同。而我本地和开发机的python版本都是python2.7,考虑到Hadoop streaming支持分发压缩文件到节点,因此打算自己制作一个python2.7的压缩包,上传到HDFS,之后写Hadoop streaming程序都可以使用这个python2.7作为Python解释器

步骤

源码编译安装python2.7到指定目录

假设以下步骤的工作目录位于$PWD
下载python2.7安装包(速度比较慢)

wget https://www.python.org/ftp/python/2.7.14/Python-2.7.14.tgz

解压

tar -xzf Python-2.7.14.tgz

安装三部曲,第三步指定安装到当前工作目录下的python2.7目录,否则默认安装到/usr/local目录下,其bin, lib, include, share会和其他程序混在一起,不利于最小化打包,/目录空间下也需要sudo权限才能执行各种操作,比较不方便

./configure
make
make DESTDIR=$PWD/python2.7 install

安装完成后,会自动在$PWD/python2.7目录下生成usr/local目录,$PWD/python2.7/usr/local目录下就是干净的bin, lib, include, share,只包含python2.7的内容。重命名localpython2.7并打包(也可以不重命名,这是非必须的,只影响之后分发到节点的路径名称)

cd $PWD/python2.7/usr
mv local python2.7
tar zcvf python2.7.tar.gz python2.7

打包完成后,在$PWD/python2.7/usr目录下生成了压缩包python2.7.tar.gz,这个压缩包就是需要上传到HDFS的压缩包,其他下载、安装产生的文件都没有用了,可以删除,只需要保留python2.7.tar.gz压缩包就可以

上传压缩包到HDFS

假设python2.7压缩包python2.7.tar.gz在HDFS的路径为$HDFS_DIR,用以下命令上传

hadoop fs -put python2.7.tar.gz $HDFS_DIR/python2.7.tar.gz

在Hadoop streaming驱动程序中使用python2.7

以shell驱动程序为例,在hadoop streaming命令中使用-cacheArchive $HDFS_DIR/python2.7.tar.gz#python分发python2.7到计算节点(并将计算节点解压缩的目录重命名为python),在-mapper, -reducer参数中用./python/python2.7/bin/python2.7替代原来的python(表示使用解压缩的python目录下的python2.7/bin路径下的python2.7可执行文件作为Python解释器),以下是一个简化的使用python2.7的Hadoop streaming命令的例子

hadoop streaming \
		-D mapred.job.name="${JOB_NAME}" \
        -D mapred.reduce.tasks=1200 \
        -D mapred.job.queue.name=$QUEUE > debug.log 2>&1 \
        -input ${INPUT_PATH} \
        -output ${OUTPUT_DIR} \
		-cacheArchive "$HDFS_DIR/python2.7.tar.gz#python" \
        -mapper "./python/python2.7/bin/python2.7 mapper.py" \
        -reducer "./python/python2.7/bin/python2.7 reducer.py" \
        -file "./mapper.py" \
        -file "./reducer.py"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章