本文描述在Hue中创建Oozie工作流的方法。
操作用户:bigdata。
准备
建表
假设在mysql中有一个用户信息表user,包含id,name,address三个字段。其中address字段存在字符串null。
在hive创建对应的表:
ods_user
- 原始用户信息缓存表
CREATE TABLE IF NOT EXISTS ods.ods_user
(id STRING COMMENT '用户ID',
name STRING COMMENT '用户名',
address STRING COMMENT '地址')
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\001'
STORED AS TEXTFILE;
dwd_user
- 原始用户信息明细表
CREATE TABLE IF NOT EXISTS dwd.dwd_user
(id STRING COMMENT '用户ID',
name STRING COMMENT '用户名',
address STRING COMMENT '地址')
STORED AS PARQUET;
dw_user
- 经过清洗转换的用户信息明细表
CREATE TABLE IF NOT EXISTS dw.dw_user
(id STRING COMMENT '用户ID',
name STRING COMMENT '用户名',
address STRING COMMENT '地址')
STORED AS PARQUET;
数据ETL模拟
为了实现工作流,模拟一个ETL逻辑。
1、使用Sqoop从业务数据库抽取user数据存入ods_user表。
2、查询ods_user表的数据存入dwd_user表。
3、查询dwd_user表中的数据,将address字段中的字符串null转化成NULL,存入dw_user表。
准备工作流任务
按照上述模拟的ETL逻辑,创建相应的任务命令。
任务一
创建mysql2hive.sh文件,写入如下内容:(请替换成真实的连接信息)
sqoop-import \
-Dorg.apache.sqoop.splitter.allow_text_splitter=true \
--connect jdbc:mysql://<host>:<port>/<db> \
--username <username> \
--password <password> \
--table user \
--fields-terminated-by '\001' \
--delete-target-dir \
--hive-import \
--hive-drop-import-delims \
--hive-table ods.ods_user \
--hive-overwrite \
--null-string '\\N' \
--null-non-string '\\N'
任务二
创建ods2dwd.sql文件,写入如下内容:
INSERT OVERWRITE TABLE dwd.dwd_user
SELECT *
FROM ods.ods_user;
任务三
创建dwd2dw.sql文件,写入如下内容:
INSERT OVERWRITE TABLE dw.dw_user
SELECT
id,
name,
CASE address
WHEN 'null'
THEN NULL
ELSE address
END
FROM dwd.dwd_user;
上传到hdfs
用户是bigdata,所以将上述创建的三个文件上传到hdfs的/user/bigdata/
目录下。
组建工作流
工作流创建页面
进入工作流创建页面
页面说明
添加工作流任务
添加任务一
选择Shell Action
选择执行文件
任务配置,由于集群启用了Kerberos,所以需要配置凭据,任务才能执行成功
如果勾选hive2不管用,可以勾选hcat,总有一个管用的。
添加任务二
选择HiveServer2 Action
选择执行文件
添加任务三
选择HiveServer2 Action
选择执行文件
保存工作流
编辑工作流名称和各个任务的名称,然后点击保存按钮,保存工作流。
调度工作流
保存工作流后,点击计划,编辑工作流调度计划
命名调度计划和添加描述,选择要调度的工作流,选择调度策略之后,保存调度计划。
点击保存按钮之后,出现提交按钮,点击提交,启动调度计划。
至此,完成在Hue中创建Oozie工作流并调度。