transform python环境快速配置方法
经常在数据开发中需要搞udf,最近发现transform更加方便易用,但是经常会涉及到集群python版本不一、包不全或者部分机器上没有安装python。
所以咱们需要快速的进行环境配置。
因为mac自带安装好的python,所以就不讲怎么安装了。可以去官网下个:https://www.python.org/downloads/source/
1、安装虚拟环境工具:
执行:pipinstallvirtualenv,如果没有pip的话可以google一把,自行安装
2、创建虚拟环境:
新建一个目录,各种环境文件放里面:
midirenvs
cd到该目录下,创建python虚拟环境:
virtualenvpython-env
创建完了可以看到会新增一个python-env文件夹。
如果你对python版本有要求,也可以指定python版本进行创建:
virtualenv-p/usr/bin/python2.7python-env
3、在新的虚拟环境安装自己需要的包:
激活虚拟环境:
sourcepython-env/bin/activate
这时候在这个环境下安装的py包都是在该环境下的,可以用pipinstall进行安装
例如:pipinstallpyhs2
(安装pyhs2的时候出现异常Cannotuninstall'six'.Itisadistutilsinstalledproject,直接跳过sudopipinstallpyhs2--ignore-installedsix)
退出虚拟环境:
deactivate
4、修改文件配置:
进入虚拟环境的bin文件夹
修改activate文件内的路径:
DIR_PATH="$(cd"$(dirname"${BASH_SOURCE[0]}")"&&pwd)" VIRTUAL_ENV="$(readlink-f"${DIR_PATH}/../")"
5、打包文件:
进入python-env文件夹内(因为目录层级少一点),打包虚拟环境:
tar-zcfpython-env.tgz*
检查一下打包文件是否把对应包打进去了,查看打包是否把pyhs2打进去了:
tar-tvfpython-env.tgz|grep"pyhs2"
6、如何引用python环境
新建shell文件例如test.sh,代码如下:
source./python-env.tgz/bin/activate pythontest_transform.py
写好test_transform的代码,例如简单的计算(不要纠结案例的业务逻辑):
#-*-coding:utf-8-*- importsys defmain(): data_list=sys.stdin.readlines() #获取id循环次数,除数-1,结果加+1 n=(data_list.__len__()-1)/20+1 j=1 whilej<=n: id_lists=data_list[(j-1)*20:j*20] ids=[] foridinid_lists: ids.append(id.strip()) j+=1 foridinids: result=[id,str(id*100),str(id+10)] print'\t'.join(str(e)foreinresult) if__name__=="__main__": main()
把python-env.tgz、test.sh、test_transform.py上传至集群的hdfs上,例如在:hdfs:///user/tmp
7、hive引用transfrom:
进入hive客户端后,加载上述文件:
ADDARCHIVEhdfs:///user/tmp/python-env.tgz; ADDFILEhdfs:///user/tmp/test.sh; ADDFILEhdfs:///user/tmp/test_transform.py;
执行hsql:
select transform(id)USING'test.sh'as(id,price1,price2) from ( select100asidfromdual )
以上整个流程搞通,那么就算集群上没有装python,你都可以自己创建transform进行快速开发了。
以上所述是小编给大家介绍的transformpython环境快速配置方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!