oozie+hue

标签(空格分隔): Oozie Azkaban HUE 调度

1.Oozie简介

①什么是Oozie

Oozie

  1. Hadoop平台的开源的工作流调度引擎
  2. 是用来管理Hadoop作业,属于web应用程序,由Oozie client和Oozie Server两个组件构成;Oozie Server运行于Java Servlet容器(Tomcat)中的web程序;
  3. 主要用于管理与组织,Hadoop工作流;
  4. Oozie的工作流必须是一个有向无环图,实际上Oozie就相当于Hadoop的一个客户端,当用户需要执行多个关联的MR任务时,只需要将MR执行顺序写入workflow.xml,然后使用Oozie提交本次任务,Oozie会托管此任务流。一个Oozie的job,是只有Map Task的mapreduce程序。

②工作流调度框架Oozie

要点概述

1,一个基于工作流引擎的开源框架,是由Cloudera公司贡献给Apache的,它能够提供对Hadoop Mapreduce和Pig Jobs的任务调度与协调。Oozie需要部署到Java Servlet容器中运行。

2,Oozie工作流定义,同Jboss jBPM提供的jPDL一样,提供了类似的流程定义语言hPDL,通过XML文件格式来实现流程的定义。对于工作流系统,一般会有很多不同功能的节点,比如分支,并发,汇合等等。

3,Oozie定义了控制流节点(Control Flow Nodes)和动作节点(Action Nodes),其中控制流节点定义了流程的开始和结束,以及控制流程的执行路径(Execution Path),如decision,fork,join等;而动作节点包括Haoop map-reduce hadoop文件系统,Pig,SSH,HTTP,eMail和Oozie子流程。

workflow、Coordinator以及Bundle

workflow从某种程度上来说是job的DAG

oozie hue - 图1

Oozie Coordinator是对workflow的定时或条件触发型的调度

oozie hue - 图2

Oozie Bundle是对多个Oozie Coordinator的捆绑

oozie hue - 图3

2.在oozie中添加spark2依赖

查看当前Oozie的share-lib共享库HDFS目录(无spark2相关依赖)

  1. oozie admin -oozie http://cnqycspser01:11000/oozie -shareliblist

oozie hue - 图4

oozie的共享目录结构

hdfs dfs -ls /user/oozie/share/lib/

hdfs上对应的oozie目录库结构(若无lib_20190717154150目录,需要在/user/oozie/share/lib/下寻找类似结构目录)

hdfs dfs -ls /user/oozie/share/lib/lib_20190717154150/

oozie hue - 图5

在Oozie的/user/oozie/share/lib/lib_20170921070424创建spark2目录

hdfs dfs -mkdir /user/oozie/share/lib/lib_20190717154150/spark2

向spark2目录添加spark2的jars和oozie-sharelib-spark*.jar

##提交jar包
hdfs dfs -put /opt/cloudera/parcels/SPARK2-2.3.0.cloudera4-1.cdh5.13.3.p0.611179/lib/spark2/jars/ /user/oozie/share/lib/lib_20190717154150/spark2/

##提交另一批jar包
hdfs dfs -put /opt/cloudera/parcels/CDH/lib/oozie/oozie-sharelib-yarn/lib/spark/oozie-sharelib-spark*.jar /user/oozie/share/lib/lib_20190717154150/spark2/

##最后一批jar包
hdfs dfs -cp /user/oozie/share/lib/lib_20190717154150/spark/oozie-sharelib-spar* /user/oozie/share/lib/lib_20190717154150/spark2/

##查看jar包是否成功提交
hdfs dfs -ls /user/oozie/share/lib/lib_20190717154150/spark2/

修改权限及用户组

hdfs dfs -chown -R oozie:oozie /user/oozie/share/lib/lib_20190717154150/spark2/
hdfs dfs -chmod -R 775 /user/oozie/share/lib/lib_20190717154150/spark2/

更新共享目录并且确认

oozie admin -oozie http://cnbjsjqpclwcdh01:11000/oozie -sharelibupdate
oozie admin -oozie http://cnbjsjqpclwcdh01:11000/oozie -shareliblist

更新确认

oozie hue - 图6

展示 (确认spark2相关依赖已经添加)

oozie hue - 图7

3.Oozie和Hue界面简介

oozie界面安装

在安装Oozie的节点,执行如下操作;

#1.下载 ext-2.2.
wget -c http://tiny.cloudera.com/oozie-ext-2.2
unzip ext-2.2.zip -d /var/lib/oozie
chown -R oozie:oozie /var/lib/oozie/ext-2.2

修改配置如下:
oozie hue - 图8

重新部署后,打开Oozie WEB界面
oozie hue - 图9

Hue界面简介

oozie hue - 图10

4.Hue编排oozie流程(spark任务)

如何使用Hue创建Spark1和Spark2的Oozie工作流的实现

0.上传测试jar包

hdfs dfs -put /opt/cloudera/parcels/CDH/lib/spark/examples/lib/spark-examples-1.6.0-cdh5.16.1-hadoop2.6.0-cdh5.16.1.jar /user/hue/test/

1.添加一个新的workflow

oozie hue - 图11

2.创建一个spark任务

oozie hue - 图12

3.确认上传jar包位置(HDFS),确认jar包name(注意一定要带.jar后缀,否则后面无法识别主类)。

oozie hue - 图13

4.修改任务的依赖环境为spark2,否则默认为spark1

oozie hue - 图14

oozie hue - 图15

5.添加一些其他任务

oozie hue - 图16

6.流程编排

oozie hue - 图17

7.点击保存
oozie hue - 图18

8.提交运行

oozie hue - 图19

9.运行监控

oozie hue - 图20

10.每个任务提交时都会伴随着一个只有map任务的oozie mapreduce.
oozie hue - 图21

使用shell的方式实现Hue创建Spark2的Oozie工作流

1.以hadoop用户登陆Hue。填写账号密码后,点击登陆。

账号:hadoop
密码:hadoop

oozie hue - 图22

2.创建一个workflow

oozie hue - 图23

3.修改workflow等配置

oozie hue - 图24

4.在hdfs:///.../hue-oozie-1553491278.64/目录下保存着运行任务所需要的所有配置(以之前运行过的一个workflow的gon工作目录为例子),各个文件详情可参见附录

hdfs dfs -ls /user/hue/oozie/workspaces/hue-oozie-1553481337.07/

oozie hue - 图25

5.创建一个执行脚本,并且上传到hdfs

vim sparkJob.sh 
hdfs dfs -put sparkJob.sh /user/hue/oozie/workspaces/hue-oozie-1553491278.64/lib/

脚本内容如下:

#!/bin/bash

source /etc/profile
source /root/.bash_profile
source /root/.bashrc

export HADOOP_USER_NAME=hadoop

/opt/cloudera/parcels/SPARK2/bin/spark2-submit --master yarn\
  --num-executors 4 --driver-memory 1g\
  --driver-cores 1 --executor-memory 1g\
  --executor-cores 2\
  --class org.apache.spark.examples.SparkPi /tmp/spark-examples_2.11-2.3.0.cloudera4.jar

7.选取调用脚本,确认配置,而后提交任务

oozie hue - 图26

8.执行成功!

ps:
通过使用Shell脚本的方式向集群提交Spark2的作业,注意在shell脚本中指定的spark-examples_2.11-2.1.0.cloudera1.jar包,要确保在集群的所有节点相应的目录存在,否则会执行失败。目录访问权限问题也会导致执行失败。

5创建Spark2的调度工作流

1.进入schedule
oozie hue - 图27

2.修改时间和时区
oozie hue - 图28

3.保存后可提交
oozie hue - 图29

6hue+hive+oozie

由hue的hive查询创建一个hive的workflow

  1. HUE主界面,依次点击Query -> Editor -> Hive,如下:
    oozie hue - 图30

  2. 创建一个新的查询语句
    oozie hue - 图31

  3. 点击保存,为查询创建一个名字,及描述
    oozie hue - 图32
    oozie hue - 图33

  4. 使用保存的查询语句成为一个工作流
    oozie hue - 图34

使用hiveserver2脚本调度的workflow

使用hive脚本调度的workflow

  1. 使用yarn用户登录(账号:yarn,密码:yarn)
    oozie hue - 图35

  2. 修改yarn的配置
    oozie hue - 图36

  3. 编辑一个shell脚本

创建工作
oozie hue - 图37

创建脚本
oozie hue - 图38

创建内容
oozie hue - 图39
hueHive.sh

hive -e "select * from evsmc2.veh_day_single_full where report_date='20190404'"

提交任务
oozie hue - 图40

运行
oozie hue - 图41

问题汇总:

1.HDFS和HiveServer2的thriftserver问题

oozie hue - 图42

Hue: HDFS Web 界面角色问题:

HUE的使用需要添加的角色实例

oozie hue - 图43

在HDFS的namenode系欸但添加HttpFS角色实例

oozie hue - 图44

修改配置

oozie hue - 图45

HBase Thrift Server问题:

选择添加实例

oozie hue - 图46

添加HBase Thrift Server角色实例

oozie hue - 图47

在hue中添加配置

oozie hue - 图48

连接hiveserver2失败

oozie hue - 图49

oozie
hive -e 'select * from test.spark'

2.Oozie和Hue的时区统一问题

ps:因为Hue在CM中默认配置的是美国洛杉矶时间,需要单独为Hue服务进行修改时区。

1.登录CM,选择Hue服务,并点击配置搜索“time”

oozie hue - 图50

2.将时区配置项由默认的“America/Los_Angeles”改为“Asia/Shanghai”,保存配置。

oozie hue - 图51

3.重启Hue服务

4.修改Oozie时区,1.登录Cloudera Manager,进入Ooize服务的配置界面搜索“oozie-site.xml”,添加如下内容

<property>
    <name>oozie.processing.timezone</name>
    <value>GMT+0800</value>
</property>

oozie hue - 图52

5.完成后保存并重启Oozie服务。

附录

1.job.properties 文件详情:

hdfs dfs -get /user/hue/oozie/workspaces/hue-oozie-1553481337.07/job.properties
cat job.properties
oozie.use.system.libpath=True
send_email=False
dryrun=False
nameNode=hdfs://nameservice1
jobTracker=cnqycspser02:8032

2.XML文件详情:

<workflow-app name="shell" xmlns="uri:oozie:workflow:0.5">
    <start to="shell-571c"/>
    <kill name="Kill">
        <message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
    </kill>
    <action name="shell-571c">
        <shell xmlns="uri:oozie:shell-action:0.1">
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <exec>lib/sparkJob.sh</exec>
              <capture-output/>
        </shell>
        <ok to="End"/>
        <error to="Kill"/>
    </action>
    <end name="End"/>

3.lib文件夹主要用于存放shell脚本及jar包