4. 加工数据
设计业务流程
- 双击新建的业务流程,打开业务流程编辑页面。
- 鼠标单击EMR Hive并拖拽至右侧的编辑页面。在新建节点对话框中,输入节点名称,单击提交。
- 此处需要新建3个EMR Hive节点,依次命名为ods_log_info_d、dw_user_info_d和ads_user_info_d,并配置如下图所示的依赖关系。业务流程节点间依赖关系的配置请参见步骤三中的新建业务流程。
2. 创建udf函数
- 在实验环境的chrome浏览器输入下方链接,下载ip2region-emr.jar存放至本地
https://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/49126/cn_zh/1576723860673/ip2region-emr.jar
2. 新建资源
2.1 在DW中新建资源,类型选择EMR jar
2.2 存储路径选择准备工作中新建的OSS目录ip2Region,上传刚刚下载的资源,点击新建。
2.3 点击工具栏的提交按钮,将资源提交到生产环境。
3. 新建函数
3.1 DW中新建函数
3.2 弹窗中输入函数名字为getregion后,点击新建按钮
3.3 在弹出的页面上填写以下信息
参数 |
描述 |
EMR数据库 |
下拉选择步骤三创建的数据库或default数据库 |
所属资源 |
选择刚刚新建的资源,ip2region-emr.jar |
类名 |
org.alidata.emr.udf.Ip2Region |
函数类型 |
其它函数 |
注意:EMR数据库也可选择default;只需在配置EMR Hive节点的ods_log_info_d节点时,在节点代码中的getregion前加上前缀"default."。
3.4 单击工具栏的提交按钮,将udf函数提交到生产环境。
3. 配置EMR Hive节点
- 配置ods_log_info_d节点。
- 双击ods_log_info_d节点,进入节点配置页面。
- 在节点编辑页面,编写如下语句。
说明:如果您的工作空间绑定多个EMR引擎,需要选择EMR引擎。如果仅绑定一个EMR引擎,则无需选择。
如果新建函数时,EMR数据库选择了default,则需要在下面代码中的getregion前加上前缀"default."。
use workshopDB; --创建ODS层表 CREATE TABLE IF NOT EXISTS ods_log_info_d ( ip STRING COMMENT 'ip地址', uid STRING COMMENT '用户ID', `time` STRING COMMENT '时间yyyymmddhh:mi:ss', status STRING COMMENT '服务器返回状态码', bytes STRING COMMENT '返回给客户端的字节数', region STRING COMMENT '地域,根据ip得到', method STRING COMMENT 'http请求类型', url STRING COMMENT 'url', protocol STRING COMMENT 'http协议版本号', referer STRING COMMENT '来源url', device STRING COMMENT '终端类型 ', identity STRING COMMENT '访问类型 crawler feed user unknown' ) PARTITIONED BY ( dt STRING ); ALTER TABLE ods_log_info_d ADD IF NOT EXISTS PARTITION (dt=${bizdate}); set hive.vectorized.execution.enabled = false; INSERT OVERWRITE TABLE ods_log_info_d PARTITION (dt=${bizdate}) SELECT ip , uid , tm , status , bytes , getregion(ip) AS region --使用自定义UDF通过ip得到地域。 , regexp_extract(request, '(^[^ ]+) .*') AS method --通过正则把request差分为三个字段。 , regexp_extract(request, '^[^ ]+ (.*) [^ ]+$') AS url , regexp_extract(request, '.* ([^ ]+$)') AS protocol , regexp_extract(referer, '^[^/]+://([^/]+){1}') AS referer --通过正则清洗refer,得到更精准的url。 , CASE WHEN lower(agent) RLIKE 'android' THEN 'android' --通过agent得到终端信息和访问形式。 WHEN lower(agent) RLIKE 'iphone' THEN 'iphone' WHEN lower(agent) RLIKE 'ipad' THEN 'ipad' WHEN lower(agent) RLIKE 'macintosh' THEN 'macintosh' WHEN lower(agent) RLIKE 'windows phone' THEN 'windows_phone' WHEN lower(agent) RLIKE 'windows' THEN 'windows_pc' ELSE 'unknown' END AS device , CASE WHEN lower(agent) RLIKE '(bot|spider|crawler|slurp)' THEN 'crawler' WHEN lower(agent) RLIKE 'feed' OR regexp_extract(request, '^[^ ]+ (.*) [^ ]+$') RLIKE 'feed' THEN 'feed' WHEN lower(agent) NOT RLIKE '(bot|spider|crawler|feed|slurp)' AND agent RLIKE '^[Mozilla|Opera]' AND regexp_extract(request, '^[^ ]+ (.*) [^ ]+$') NOT RLIKE 'feed' THEN 'user' ELSE 'unknown' END AS identity ----------- 数据清洗,字段映射 FROM ( SELECT SPLIT(col, '##@@')[0] AS ip , SPLIT(col, '##@@')[1] AS uid , SPLIT(col, '##@@')[2] AS tm , SPLIT(col, '##@@')[3] AS request , SPLIT(col, '##@@')[4] AS status , SPLIT(col, '##@@')[5] AS bytes , SPLIT(col, '##@@')[6] AS referer , SPLIT(col, '##@@')[7] AS agent FROM ods_raw_log_d ----------- 原始日志表中字段提取 WHERE dt = ${bizdate} ) a;
- 单击工具栏中的。
2. 配置dw_user_info_d节点。
- 双击dw_user_info_d节点,进入节点配置页面。
- 在节点编辑页面,编写如下语句。
说明:如果您的工作空间绑定多个EMR引擎,需要选择EMR引擎。如果仅绑定一个EMR引擎,则无需选择。
use workshopDB; --创建DW层表 CREATE TABLE IF NOT EXISTS dw_user_info_d ( uid STRING COMMENT '用户ID', gender STRING COMMENT '性别', age_range STRING COMMENT '年龄段', zodiac STRING COMMENT '星座', region STRING COMMENT '地域,根据ip得到', device STRING COMMENT '终端类型 ', identity STRING COMMENT '访问类型 crawler feed user unknown', method STRING COMMENT 'http请求类型', url STRING COMMENT 'url', referer STRING COMMENT '来源url', `time` STRING COMMENT '时间yyyymmddhh:mi:ss' ) PARTITIONED BY ( dt STRING ); ALTER TABLE dw_user_info_d ADD IF NOT EXISTS PARTITION (dt = ${bizdate}); INSERT OVERWRITE TABLE dw_user_info_d PARTITION (dt=${bizdate}) SELECT COALESCE(a.uid, b.uid) AS uid , b.gender , b.age_range , b.zodiac , a.region , a.device , a.identity , a.method , a.url , a.referer , a.`time` FROM ( SELECT * FROM ods_log_info_d WHERE dt = ${bizdate} ) a LEFT OUTER JOIN ( SELECT * FROM ods_user_info_d WHERE dt = ${bizdate} ) b ON a.uid = b.uid;
- 单击工具栏中的。
3. 配置ads_user_info_d节点。
- 双击ads_user_info_d节点,进入节点配置页面。``
- 在节点编辑页面,编写如下语句。
说明:如果您的工作空间绑定多个EMR引擎,需要选择EMR引擎。如果仅绑定一个EMR引擎,则无需选择。
use workshopDB; --创建ads层表 CREATE TABLE IF NOT EXISTS ads_user_info_d ( uid STRING COMMENT '用户ID', region STRING COMMENT '地域,根据ip得到', device STRING COMMENT '终端类型 ', pv BIGINT COMMENT 'pv', gender STRING COMMENT '性别', age_range STRING COMMENT '年龄段', zodiac STRING COMMENT '星座' ) PARTITIONED BY ( dt STRING ); ALTER TABLE ads_user_info_d ADD IF NOT EXISTS PARTITION (dt=${bizdate}); INSERT OVERWRITE TABLE ads_user_info_d PARTITION (dt=${bizdate}) SELECT uid , MAX(region) , MAX(device) , COUNT(0) AS pv , MAX(gender) , MAX(age_range) , MAX(zodiac) FROM dw_user_info_d WHERE dt = ${bizdate} GROUP BY uid;
- 单击工具栏中的。
4. 提交业务流程
- 给每个hive节点,新增日期参数。
单击右侧的调度配置,在面板的参数位置,添加bizdate参数配置。
- 在业务流程的编辑页面,单击,运行业务流程。
- 待业务流程中的所有节点后出现,单击,提交运行成功的业务流程。
- 选择提交对话框中需要提交的节点,此处全选即可。勾选忽略输入输出不一致的告警。
- 单击确认。提交成功后,会出现以下提示。s
5. 在生产环境运行任务
- 任务发布成功后,单击页面上方的运维中心,进入运维中心页面。
- 单击左侧导航栏中的周期任务运维 > 周期任务,进入周期任务页面,单击workstart虚节点。
- 在右侧的DAG图中,右键单击workstart节点,选择补数据 > 当前节点及下游节点。
- 输入业务日期(选择今天即可),勾选需要补数据的任务(全选即可),单击确定,自动跳转至补数据实例页面。
- 单击刷新,直至SQL任务全部运行成功即可产出数据。
恭喜您!到这里,您已经成功使用了EMR + DLF + OSS-HDFS + DataWorks这个产品组合。给自己点个赞吧~
如果你想体验更多产品能力,您可以继续进行实验,完成用户画像分析。