• 数仓4.0(数据仓库系统)--续集二


    目录

    十:全流程调度

    10.1 Azkaban部署

    10.2 创建MySQL数据库和表

    10.3 Sqoop导出脚本

    10.4 全调度流程

    10.4.1 数据准备

    10.4.2 编写Azkaban工作流程配置文件

    10.4.3 Azkaban多Executor模式下注意事项


    十:全流程调度

    10.1 Azkaban部署

    这里就不部署了,可以参考我的其他文章,里面有专门的讲azkaban的部署。

    10.2 创建MySQL数据库和表

    1)创建gmall_report数据库

    2)创建表(就是ADS层的12张表,这里建表时,要和ADS层表的字段要一一对应)

    建表语句由于篇幅原因,这里就不展示了。

    10.3 Sqoop导出脚本

    1)编写Sqoop导出脚本

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

    [axing@hadoop102 bin]$ vim hdfs_to_mysql.sh

    在脚本中填写如下内容

    1. #!/bin/bash
    2. hive_db_name=gmall
    3. mysql_db_name=gmall_report
    4. export_data() {
    5. /opt/module/sqoop/bin/sqoop export \
    6. --connect "jdbc:mysql://hadoop102:3306/${mysql_db_name}?useUnicode=true&characterEncoding=utf-8" \
    7. --username root \
    8. --password 000000 \
    9. --table $1 \
    10. --num-mappers 1 \
    11. --export-dir /warehouse/$hive_db_name/ads/$1 \
    12. --input-fields-terminated-by "\t" \
    13. --update-mode allowinsert \
    14. --update-key $2 \
    15. --input-null-string '\\N' \
    16. --input-null-non-string '\\N'
    17. }
    18. case $1 in
    19. "ads_activity_stats" )
    20. export_data "ads_activity_stats" "dt,activity_id"
    21. ;;
    22. "ads_coupon_stats" )
    23. export_data "ads_coupon_stats" "dt,coupon_id"
    24. ;;
    25. "ads_order_by_province" )
    26. export_data "ads_order_by_province" "dt,recent_days,province_id"
    27. ;;
    28. "ads_order_spu_stats" )
    29. export_data "ads_order_spu_stats" "dt,recent_days,spu_id"
    30. ;;
    31. "ads_order_total" )
    32. export_data "ads_order_total" "dt,recent_days"
    33. ;;
    34. "ads_page_path" )
    35. export_data "ads_page_path" "dt,recent_days,source,target"
    36. ;;
    37. "ads_repeat_purchase" )
    38. export_data "ads_repeat_purchase" "dt,recent_days,tm_id"
    39. ;;
    40. "ads_user_action" )
    41. export_data "ads_user_action" "dt,recent_days"
    42. ;;
    43. "ads_user_change" )
    44. export_data "ads_user_change" "dt"
    45. ;;
    46. "ads_user_retention" )
    47. export_data "ads_user_retention" "create_date,retention_day"
    48. ;;
    49. "ads_user_total" )
    50. export_data "ads_user_total" "dt,recent_days"
    51. ;;
    52. "ads_visit_stats" )
    53. export_data "ads_visit_stats" "dt,recent_days,is_new,channel"
    54. ;;
    55. "all" )
    56. export_data "ads_activity_stats" "dt,activity_id"
    57. export_data "ads_coupon_stats" "dt,coupon_id"
    58. export_data "ads_order_by_province" "dt,recent_days,province_id"
    59. export_data "ads_order_spu_stats" "dt,recent_days,spu_id"
    60. export_data "ads_order_total" "dt,recent_days"
    61. export_data "ads_page_path" "dt,recent_days,source,target"
    62. export_data "ads_repeat_purchase" "dt,recent_days,tm_id"
    63. export_data "ads_user_action" "dt,recent_days"
    64. export_data "ads_user_change" "dt"
    65. export_data "ads_user_retention" "create_date,retention_day"
    66. export_data "ads_user_total" "dt,recent_days"
    67. export_data "ads_visit_stats" "dt,recent_days,is_new,channel"
    68. ;;
    69. esac

    关于导出update还是insert的问题?

    • --update-mode:

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

            allowinsert   允许新增 

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

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

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

    2)执行Sqoop导出脚本

    1. [axing@hadoop102 bin]$ chmod 777 hdfs_to_mysql.sh
    2. [axing@hadoop102 bin]$ hdfs_to_mysql.sh all

    10.4 全调度流程

    10.4.1 数据准备

    1)用户行为数据准备

    (1)修改/opt/module/applog下的application.properties

    1. #业务日期
    2. mock.date=2020-06-15

    注意:hadoop102和hadoop103都有采集flume,所以也要在hadoop103中执行相同命令。

    (2)生成数据

    [axing@hadoop102 bin]$ lg.sh

    注意:生成数据之后,记得查看HDFS数据是否存在!

    (3)观察HDFS的/origin_data/gmall/log/topic_log/2020-06-15路径是否有数据

    2)业务数据准备

    (1)修改/opt/module/db_log下的application.properties

    1. [axing@hadoop102 db_log]$ vim application.properties
    2. #业务日期
    3. mock.date=2020-06-15

    (2)生成数据

    [axing@hadoop102 db_log]$ java -jar gmall2020-mock-db-2020-04-01.jar

    (3)观察Navicat中order_infor表中operate_time中有2020-06-15日期的数据

    10.4.2 编写Azkaban工作流程配置文件

    1)编写azkaban.project文件,内容如下

    azkaban-flow-version: 2.0

    2)编写gmall.flow文件,内容如下

    1. nodes:
    2. - name: mysql_to_hdfs
    3. type: command
    4. config:
    5. command: /home/atguigu/bin/mysql_to_hdfs.sh all ${dt}
    6. - name: hdfs_to_ods_log
    7. type: command
    8. config:
    9. command: /home/atguigu/bin/hdfs_to_ods_log.sh ${dt}
    10. - name: hdfs_to_ods_db
    11. type: command
    12. dependsOn:
    13. - mysql_to_hdfs
    14. config:
    15. command: /home/atguigu/bin/hdfs_to_ods_db.sh all ${dt}
    16. - name: ods_to_dim_db
    17. type: command
    18. dependsOn:
    19. - hdfs_to_ods_db
    20. config:
    21. command: /home/atguigu/bin/ods_to_dim_db.sh all ${dt}
    22. - name: ods_to_dwd_log
    23. type: command
    24. dependsOn:
    25. - hdfs_to_ods_log
    26. config:
    27. command: /home/atguigu/bin/ods_to_dwd_log.sh all ${dt}
    28. - name: ods_to_dwd_db
    29. type: command
    30. dependsOn:
    31. - hdfs_to_ods_db
    32. config:
    33. command: /home/atguigu/bin/ods_to_dwd_db.sh all ${dt}
    34. - name: dwd_to_dws
    35. type: command
    36. dependsOn:
    37. - ods_to_dim_db
    38. - ods_to_dwd_log
    39. - ods_to_dwd_db
    40. config:
    41. command: /home/atguigu/bin/dwd_to_dws.sh all ${dt}
    42. - name: dws_to_dwt
    43. type: command
    44. dependsOn:
    45. - dwd_to_dws
    46. config:
    47. command: /home/atguigu/bin/dws_to_dwt.sh all ${dt}
    48. - name: dwt_to_ads
    49. type: command
    50. dependsOn:
    51. - dws_to_dwt
    52. config:
    53. command: /home/atguigu/bin/dwt_to_ads.sh all ${dt}
    54. - name: hdfs_to_mysql
    55. type: command
    56. dependsOn:
    57. - dwt_to_ads
    58. config:
    59. command: /home/atguigu/bin/hdfs_to_mysql.sh all

    注意:要检查一下每个任务点之间的依赖关系,不能出错。

    3)将azkaban.project、gmall.flow文件压缩到一个zip文件,文件名称必须是英文。

    4)在WebServer新建项目:http://hadoop102:8081/index

    5)给项目名称命名和添加项目描述

    6)gmall.zip文件上传

    7)选择上传的文件

    8)查看任务流

    9)详细任务流展示

    10)配置输入dt时间参数

     

    注意:

    因为脚本都存放于hadoop102中,但是,hadoop102、hadoop103、hadoop104都有azkaban-exec,因此,我们要声明这些脚本在hadoop102中。这时候,除了增加dt,我们还要增加一个变量,变量名为useExecutor,值为hadoop102的主键id,我们可以打开azkaban数据库中,查看executors表,查看hadoop102的主键id ,这里,我的值为7。

     10)执行成功

     11)在Navicat上查看结果

    10.4.3 Azkaban多Executor模式下注意事项

    Azkaban多Executor模式是指,在集群中多个节点部署Executor。在这种模式下, Azkaban web Server会根据策略,选取其中一个Executor去执行任务。

    由于我们需要交给Azkaban调度的脚本,以及脚本需要的Hive,Sqoop等应用只在hadoop102部署了,为保证任务顺利执行,我们须在以下两种方案任选其一,推荐使用方案二。

    方案一:指定特定的Executor(hadoop102)去执行任务。

    1)在MySQL中azkaban数据库executors表中,查询hadoop102上的Executor的id。

    1. mysql> use azkaban;
    2. Reading table information for completion of table and column names
    3. You can turn off this feature to get a quicker startup with -A
    4. Database changed
    5. mysql> select * from executors;
    6. +----+-----------+-------+--------+
    7. | id | host      | port | active |
    8. +----+-----------+-------+--------+
    9. | 1   | hadoop103 | 35985 | 1 |
    10. | 2   | hadoop104 | 36363 | 1 |
    11. | 3   | hadoop102 | 12321 | 1 |
    12. +----+-----------+-------+--------+
    13. 3 rows in set (0.00 sec)

    2)在执行工作流程时加入useExecutor属性,如下

    方案二:在Executor所在所有节点部署任务所需脚本和应用。

    1)分发脚本、sqoop、spark、my_env.sh 

    1. [axing@hadoop102 ~]$ xsync /home/atguigu/bin/
    2. [axing@hadoop102 ~]$ xsync /opt/module/hive
    3. [axing@hadoop102 ~]$ xsync /opt/module/sqoop
    4. [axing@hadoop102 ~]$ xsync /opt/module/spark
    5. [axing@hadoop102 ~]$ sudo /home/atguigu/bin/xsync /etc/profile.d/my_env.sh

    2)分发之后,在hadoop103,hadoop104重新加载环境变量配置文件,并重启Azkaban。


  • 相关阅读:
    什么是 MyBatis?与 Hibernate 的区别
    mongo实际业务场景实战
    Java版工程行业管理系统源码-专业的工程管理软件-提供一站式服务
    关于二阶低通滤波的C代码及入门测试
    把文件上传到Gitee的详细步骤
    AI 应用的全流程存储加速方案技术解析和实践分享
    上班干,下班学!这份 Java 面试八股文涵盖 20 多个技术点,还有优质面经分享,别再说卷不过别人了~
    Tabby All configured authentication methods failed
    三、c++代码中的安全风险-open
    Web前端:应该使用ReactJS进行Web开发?
  • 原文地址:https://blog.csdn.net/JiaXingNashishua/article/details/126296805