經常在數據開發中需要搞udf,最近發現transform更加方便易用,但是經常會涉及到集群python版本不一、包不全或者部分機器上沒有安裝python。
所以咱們需要快速的進行環境配置。
因為mac自帶安裝好的python,所以就不講怎么安裝了。可以去官網下個: https://www.python.org/downloads/source/
1、安裝虛擬環境工具:
執行:pip install virtualenv,如果沒有pip的話可以google一把,自行安裝
2、創建虛擬環境:
新建一個目錄,各種環境文件放里面:
midir envs
cd 到該目錄下,創建python虛擬環境:
virtualenv python-env
創建完了可以看到會新增一個python-env文件夾。
如果你對python版本有要求,也可以指定python版本進行創建:
virtualenv -p /usr/bin/python2.7 python-env
3、在新的虛擬環境安裝自己需要的包:
激活虛擬環境:
source python-env/bin/activate
這時候在這個環境下安裝的py包都是在該環境下的,可以用pip install進行安裝
例如:pip install pyhs2
(安裝pyhs2的時候出現異常 Cannot uninstall 'six'. It is a distutils installed project,直接跳過 sudo pip install pyhs2 --ignore-installed six)
退出虛擬環境:
deactivate
4、修改文件配置:
進入虛擬環境的bin文件夾
修改activate文件內的路徑:
DIR_PATH="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"VIRTUAL_ENV="$( readlink -f "${DIR_PATH}/../" )"
5、打包文件:
進入 python-env文件夾內(因為目錄層級少一點), 打包虛擬環境:
tar -zcf python-env.tgz *
檢查一下打包文件是否把對應包打進去了,查看打包是否把pyhs2打進去了:
tar -tvf python-env.tgz |grep "pyhs2"
6、如何引用python環境
新建shell文件例如test.sh,代碼如下:
source ./python-env.tgz/bin/activatepython test_transform.py
寫好 test_ transform 的代碼,例如簡單的計算(不要糾結案例的業務邏輯):
# -*- coding: utf-8 -*-import sysdef main(): data_list = sys.stdin.readlines() # 獲取id循環次數,除數-1,結果加+1 n = (data_list.__len__() - 1)/20 + 1 j = 1 while j <= n: id_lists = data_list[(j - 1) * 20:j * 20] ids = [] for id in id_lists: ids.append(id.strip()) j += 1 for id in ids: result=[id,str(id*100),str(id+10)] print '/t'.join(str(e) for e in result)if __name__ == "__main__": main()
把python-env.tgz、 test.sh、test_ transform.py 上傳至集群的hdfs上,例如在:hdfs:///user/tmp
7、hive引用transfrom:
進入hive客戶端后,加載上述文件:
ADD ARCHIVE hdfs:///user/tmp/python-env.tgz;ADD FILE hdfs:///user/tmp/test.sh;ADD FILE hdfs:///user/tmp/test_transform.py;
新聞熱點
疑難解答