Hive Transform 快速配置 Python 环境:无需集群预装
本文介绍在 Hive 中使用 Transform 进行数据开发时,如何快速配置独立的 Python 运行环境。通过 virtualenv 创建包含依赖包的虚拟环境,打包后上传至 HDFS,并在 Hive SQL 中引用。该方法解决了集群 Python 版本不一致、部分节点未安装 Python 或依赖包缺失的问题,实现无需集群预装即可快速开发 UDF。
在数据开发过程中,经常需要编写 UDF(用户自定义函数)。近期发现使用 Transform 方式更加便捷易用,但在实际应用中,常遇到集群中 Python 版本不统一、依赖包缺失或部分节点未安装 Python 等问题。
因此,我们需要一种快速配置 Python 环境的方法。
由于 Mac 系统通常预装了 Python,此处不再赘述安装步骤。如需其他系统环境,可前往官网下载源码包:https://www.python.org/downloads/source/
1、安装虚拟环境工具
执行命令:pip install virtualenv。如果系统中未安装 pip,可通过网络搜索自行安装。
2、创建虚拟环境
新建一个目录,将所有环境相关文件存放于此:
midir envs
cd 进入该目录,创建 Python 虚拟环境:
virtualenv python-env
创建完成后,可以看到新增了一个名为 python-env 的文件夹。
如果对 Python 版本有特定要求,也可以在创建时指定版本:
virtualenv -p /usr/bin/python2.7 python-env
3、在新虚拟环境中安装所需包
激活虚拟环境:
source python-env/bin/activate
此时,在此环境下安装的 Python 包仅对该环境生效,可使用 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/activate python test_transform.py
编写 test_transform 的代码,例如简单的计算逻辑(无需纠结案例的业务逻辑):
# -*- coding: utf-8 -*-
import sys
def 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 中引用 Transform
进入 Hive 客户端后,加载上述文件:
ADD ARCHIVE hdfs:///user/tmp/python-env.tgz; ADD FILE hdfs:///user/tmp/test.sh; ADD FILE hdfs:///user/tmp/test_transform.py;
执行 HSQL:
select transform(id) USING 'test.sh' as (id,price1,price2) from ( select 100 as id from dual )
以上流程全部跑通后,即使集群上没有预装 Python,你也可以通过创建 Transform 进行快速开发。
以上所述是小编给大家介绍的 Transform Python 环境快速配置方法,希望对大家有所帮助。如果大家有任何疑问请留言,小编会及时回复。在此非常感谢大家对本站网站的支持!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









