CDH集群中oozie 并不能直接执行python脚本,如下图中所示,但是有时候我们使用python做数据清洗、计算的话,那该怎么执行呢?

网上找了一圈,发现就没像样的资料,其实很简单,那就是在shell脚本中调用python脚本,oozie是支持直接调用shell脚本的,见Oozie Shell工作流Workflows编写以及定时Coordinators调度
但是这里有个坑,那就是oozie调度任务是随机把shell脚本发到集群中任一台机器上去执行,但是我们的集群python环境可能并不一致,同时,如果python脚本中用到一些需要安装的包,那就需要在集群中所有机器上都安装。
hello.sh
# 在临时目录下创建文件夹
if [ ! -d "/tmp/hello" ];then
mkdir -p /tmp/hello
else
echo "文件夹已经存在"
fi
# 删除已有文件
if [ -f "/tmp/hello/hello.py" ];then
echo "文件存在,删除文件"
rm -f /tmp/hello/hello.py
else
echo "文件不存在"
fi
# 从hdfs上拉取python脚本
hdfs dfs -get /user/zhangkai/hello/hello.py /tmp/hello/
# 执行python脚本
/bin/python3 /tmp/hello/hello.py
hello.py
#指定用什么解释器运行脚本以及解释器所在的位置还有文件编码
#!/bin/python3
# -*- coding: UTF-8 -*-
print("hello world")
备注:集群中python环境最好是统一一个版本,并且是python2 和python3都有安装,执行python脚本时,用到哪个环境,在脚本开头指明其对应的解释器。python3的安装见 python3安装
网友评论