源碼編譯安裝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"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章