首页 > 其他 > 详细

离线电商数仓(四十九)之系统业务数据仓库(二十)数据导出与全流程调度

时间:2020-09-01 22:28:06      阅读:93      评论:0      收藏:0      [点我收藏+]

1 Sqoop导出脚本

1)编写Sqoop导出脚本

在/home/atguigu/bin目录下创建脚本hiveTomysql.sh

[atguigu@hadoop102 bin]$ vim hiveTomysql.sh

脚本中填写如下内容

 

#!/bin/bash

hive_db_name=gmall
mysql_db_name=gmall_view

export_data() {
/opt/module/sqoop/bin/sqoop export --connect "jdbc:mysql://hadoop102:3306/${mysql_db_name}?useUnicode=true&characterEncoding=utf-8"  --username root --password 000000 --table $1 --num-mappers 1 --export-dir /warehouse/$hive_db_name/ads/$1 --input-fields-terminated-by "\t" --update-mode allowinsert --update-key $2 --input-null-string \\N    --input-null-non-string \\N
}

case $1 in
  "ads_uv_count")
     export_data "ads_uv_count" "dt"
;;
  "ads_user_action_convert_day") 
     export_data "ads_user_action_convert_day" "dt"
;;
  "ads_gmv_sum_day")
     export_data "ads_gmv_sum_day" "dt"
;;
  "ads_user_topic")
     export_data "ads_user_topic" "dt"
;;
   "all")
     export_data "ads_uv_count" "dt"
     export_data "ads_user_action_convert_day" "dt"
     export_data "ads_gmv_sum_day" "dt"
     export_data "ads_user_topic" "dt"
;;
esac

 

 关于导出update还是insert的问题

  • --update-mode:

updateonly   只更新,无法插入新数据

        allowinsert   允许新增 

  • --update-key:允许更新的情况下,指定哪些字段匹配视为同一条数据,进行更新而不增加。多个字段用逗号分隔。
  • --input-null-string--input-null-non-string

分别表示,将字符串列和非字符串列的空“null”转义。

官网地址:http://sqoop.apache.org/docs/1.4.6/SqoopUserGuide.html

Sqoop will by default import NULL values as string null.
Hive is however using string \N to denote NULL values and therefore predicates dealing with NULL(like IS NULL) will not work correctly.
You should append parameters --null-string and --null-non-string in case of import job or --input-null-string and --input-null-non-string in case of an export job if you wish to properly preserve NULL values.
Because sqoop is using those parameters in generated code, you need to properly escape value \N to \\N:

Hive中的Null在底层是以“\N”来存储,而MySQL的Null在底层就是Null,为了保证数据两端的一致性。在导出数据时采用--input-null-string--input-null-non-string两个参数。导入数据时采用--null-string和--null-non-string。

3)执行Sqoop导出脚本

[atguigu@hadoop102 bin]$ chmod 777 hiveTomysql.sh

[atguigu@hadoop102 bin]$ hiveTomysql.sh all

4)在MySQL中查看结果

SELECT * FROM ads_uv_count;

SELECT * FROM ads_user_retention_day_rate;

SELECT * FROM ads_user_action_convert_day;

SELECT * FROM ads_gmv_sum_day;

SELECT * FROM ads_gmv_sum_province;

2 Azkaban安装

详见:尚硅谷大数据技术之Azkaban

3 会员主题指标获取的全调度流程

1)修改配置文件中时间,生成数据

[atguigu@hadoop102 db_log]$ java -jar gmall-mock-db.jar

2)编写Azkaban程序运行job

1import.job文件

type=command
do_date=${dt}
command=/home/atguigu/bin/sqoop_import.sh all ${do_date}

2ods.job文件

type=command
do_date=${dt}
dependencies=import
command=/home/atguigu/bin/hdfs_to_ods_db.sh ${do_date}

(3)dwd.job文件

type=command
do_date=${dt}
dependencies=ods
command=/home/atguigu/bin/ods_to_dwd_db.sh ${do_date}

4dws.job文件

 

type=command
do_date=${dt}
dependencies=dwd
command=/home/atguigu/bin/dwd_to_dws.sh ${do_date}

 

(5dwt.job文件

 

type=command
do_date=${dt}
dependencies=dws
command=/home/atguigu/bin/dws_to_dwt.sh ${do_date}    

 

(6)ads.job文件

 

type=command
do_date=${dt}
dependencies=dwt
command=/home/atguigu/bin/ads_user_topic.sh ${do_date}

 

(7)export.job文件

 

type=command
dependencies=ads
do_date=${dt}
command=/home/atguigu/bin/hiveTomysql.sh ads_user_topic ${do_date}

 

(8)将以上6文件压缩成user-topic-job.zip文件

3)创建Azkaban工程,上传user-topic-job.zip文件。

4)在浏览器输入https://hadoop102:8443页面上创建工程执行gmv-job.zip任务

5)等待大约20分钟MySQL中查看结果

 

select * from ads_user_topic;

 

离线电商数仓(四十九)之系统业务数据仓库(二十)数据导出与全流程调度

原文:https://www.cnblogs.com/qiu-hua/p/13598678.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!