1.离线数仓—全流程调度实现

本文介绍了如何在离线数据仓库项目中使用DolphinScheduler进行工作流调度。内容包括数据准备,如用户行为日志和业务数据的采集;详细讲解了DolphinScheduler的集群和单机模式的启动、登录、脚本上传、组件分发、环境变量配置以及工作流创建和执行的步骤。


前言

前面学习了工作流调度工具DolphinScheduler,下面对数仓项目进行应用。

一、数据准备

1.用户行为日志

1)启动日志采集通道,包括:Flume、Kafka等
2)修改日志模拟器配置文件,修改生成的日志时间:mock.date: "2020-06-15"

2.业务数据

1)修改Maxwell配置文件config.properties,保证Maxwell的binlog时间和业务数据库的数据时间一致:mock_date=2020-06-15
2)启动增量表采集通道,包括:Maxwell、Flume、Kafka等
3)修改生成业务数据的jar包对应的配置文件,保证生成的数据的时间:mock.date=2020-06-15
4)执行业务数据生成的jar包:java -jar gmall2020-mock-db-2021-10-10.jar

二、工作流调度实操

由于DolphinScheduler集群模式启动进程较多,对虚拟机内存要求较高。故下面提供两种方式,可根据虚拟机内存情况进行选择。

1.DolphinScheduler集群模式

使用集群模式,最好把一些用不到的进程全部关闭,防止内存不够用而导致运行失败。

1.1启动和登录DolphinScheduler

1)启动DolphinScheduler:bin/start-all.sh
2)使用普通用户登录:
在这里插入图片描述

1.2上传脚本

向DolphinScheduler资源中心上传工作流所需脚本
如果先创建工作流,那么在定义工作单元的时候没办法选择要执行的外部的脚本,所以先把要用到的脚本上传上去。
1)创建文件夹
在这里插入图片描述
2)上传工作流所需脚本
将工作流所需脚本上传到资源中心scripts路径下,结果如下:
在这里插入图片描述

1.3组件分发

向DolphinScheduler的WorkerServer节点分发脚本依赖的组件。
因为之前没有定义WorkerServer的工作组,所以默认都在default组,但是执行脚本所需要的组件Hive、Spark和DataX只在Hadoop102上面有,如果将任务分发到了Hadoop103和Hadoop104上,那么会找不到相关组件而报错,所以要进行分发,确保每个WorkerServer节点都有脚本所依赖的组件。

[atguigu@hadoop102 ~]$ xsync /opt/module/hive/
[atguigu@hadoop102 ~]$ xsync /opt/module/spark/
[atguigu@hadoop102 ~]$ xsync /opt/module/datax/

1.4配置环境变量并分发

修改DolphinScheduler环境变量配置文件并分发。
实际上,WorkerServer在执行相关脚本时要使用Hive、Spark和DataX,但它使用的这些组件的环境变量并不是服务器里面配的环境变量,而是DolphinScheduler里面的环境变量,所以我们要先在DolphinScheduler中配置这些组件的环境变量。

1)修改文件:vim /opt/module/dolphinscheduler/conf/env/dolphinscheduler_env.sh
2)修改内容如下:

export HADOOP_HOME=/opt/module/hadoop-3.1.3
export HADOOP_CONF_DIR=/opt/module/hadoop-3.1.3/etc/hadoop
export SPARK_HOME=/opt/module/spark
export SPARK_HOME2=/opt/soft/spark2
export PYTHON_HOME=/opt/soft/python
export JAVA_HOME=/opt/module/jdk1.8.0_212
export HIVE_HOME=/opt/module/hive
export FLINK_HOME=/opt/soft/flink
export DATAX_HOME=/opt/module/datax

export PATH=$HADOOP_HOME/bin:$SPARK_HOME1/bin:$SPARK_HOME2/bin:$PYTHON_HOME:$JAVA_HOME/bin:$HIVE_HOME/bin:$FLINK_HOME/bin:$DATAX_HOME/bin:$PATH 

上面export PATH中不需要修改SPARK_HOME1/bin这些,这些是为了可以直接在命令行调用这些目录下的命令。而上面部分的SPARK_HOME、HADOOP_HOME、DATAX_HOME等这些名字必须这样写。
在Hadoop102上修改完毕之后,将修改后的配置文件进行分发。

1.5 创建工作流

1)在一个项目中创建工作流
在这里插入图片描述
2)创建工作单元并配置
mysql_to_hdfs_full:
在这里插入图片描述
hdfs_to_ods_db:
在这里插入图片描述
hdfs_to_ods_log:
在这里插入图片描述
ods_to_dwd:
在这里插入图片描述
ods_to_dim:
在这里插入图片描述
dwd_to_dws_1d:
在这里插入图片描述
dws_1d_to_dws_nd:
在这里插入图片描述
dws_1d_to_dws_td:
在这里插入图片描述
dws_to_ads:
在这里插入图片描述
hdfs_to_mysql:
在这里插入图片描述
3)设置依赖关系
根据上篇文章中画出的节点间依赖关系,进行相关的设置。
在这里插入图片描述
4)保存工作流
在这里插入图片描述
在这里可以设置传参数的值,这里设置为了固定值。在定时调度时,全局参数值应该设置为$[yyyy-MM-dd-1]或者空值。
7)上线工作流
在这里插入图片描述
8)执行工作流
在这里插入图片描述

2.DolphinScheduler单机模式

2.1 启动DolphinScheduler

单机模式启动方式:bin/dolphinscheduler-daemon.sh start standalone-server
所有的服务都位于一个进程当中。

2.2 安全中心配置

由于DolphinScheduler的单机模式使用的是内置的ZK和数据库,故在集群模式下所做的相关配置在单机模式下并不可见,所以需要重新配置,必要的配置为创建租户和创建用户。
1)先用管理员账号登录,创建租户
在这里插入图片描述
2)创建用户
在这里插入图片描述
3)切换普通用户登录
在这里插入图片描述
4)创建项目
在这里插入图片描述
5)其余操作
其余操作和集群模式基本一致,不过不需要分发Hive、Spark和DataX,因为单机模式下都在Hadoop102下执行。

离线数仓环境中,任务调度和监控是保障数据处理流程稳定性和可靠性的重要环节。海豚调度器(DolphinScheduler)是一款开源的分布式、易扩展的可视化工作流任务调度平台,广泛应用于大数据生态中,支持多种任务类型,如Shell、SQL、Spark、Flink等[^1]。 ### 可行性分析 #### 1. **任务调度能力** 海豚调度器具备强大的任务编排与调度能力,能够满足离线数仓中复杂的数据流水线需求。例如,可以定义多个ETL任务之间的依赖关系,并按照设定的时间周期自动触发执行。这种特性非常适合用于管理离线数仓中的定时批量处理任务。 #### 2. **多数据源支持** 海豚调度器内置对多种数据库的支持,包括MySQL、PostgreSQL、Oracle等,同时也支持Hive、Spark SQL等大数据组件的作业执行。这使得它能够很好地融入离线数仓架构中,用于调度和监控基于不同数据源的任务。 #### 3. **任务监控与告警** 海豚调度器提供了丰富的任务监控功能,包括任务运行状态跟踪、日志查看、失败重试机制以及邮件、Webhook等方式的告警通知。这些功能可以帮助运维人员及时发现并处理任务执行过程中出现的问题,确保数据处理流程的稳定性。 #### 4. **可视化界面** 海豚调度器提供了一个直观的Web UI,用户可以通过图形化界面轻松地创建、编辑和管理任务流程图。这种方式大大降低了任务调度的使用门槛,提高了开发和运维效率。 #### 5. **可扩展性** 海豚调度器具有良好的可扩展性,支持插件化设计,可以根据实际需求自定义任务类型或集成其他系统。此外,它还支持水平扩展部署,适用于大规模集群环境下的任务调度需求[^1]。 ### 示例:调度Hive ETL任务 以下是一个简单的示例,展示如何通过海豚调度器配置一个Hive ETL任务: ```sql -- HiveQL 脚本示例 CREATE TABLE IF NOT EXISTS sales_summary ( product_id STRING, total_sales BIGINT ) PARTITIONED BY (dt STRING); INSERT OVERWRITE TABLE sales_summary PARTITION (dt='${biz.date}') SELECT product_id, SUM(quantity) AS total_sales FROM sales_details WHERE dt = '${biz.date}' GROUP BY product_id; ``` 在海豚调度器中,可以将上述HiveQL脚本封装为一个SQL类型的任务节点,并设置其执行时间和依赖关系。通过这种方式,可以实现离线数仓中ETL任务的自动化调度和监控。 ### 总结 综上所述,海豚调度器完全可以在离线数仓环境中用于监控任务执行情况。它不仅具备强大的调度能力和丰富的监控功能,还能很好地与其他大数据组件集成,适合用于构建高效、稳定的离线数据处理流水线[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值