一、Zookeeper
1.zookeeper介绍
ZooKeeper是一个具有高可用性的高性能分布式协调服务,主要解决单点故障问题,实现服务的高可用。
官网 ZooKeeper: Because Coordinating Distributed Systems is a Zoo
2.数据模型
zk可存储小文件数据,用来保存其他服务的信息,比如保存hdfs的namenode信息,ds的运行信息
ZooKeeper 维护着一个树形层次结构,树中的节点被称为 znode。znode 可以用于存储数据,并且有一个与之相关联的 ACL。ZooKeeper 被设计用来实现协调服务(这类服务通常使用小数据文件),而不是用于大容量数据存储,因此一个 znode 能存储的数据被限制在1MB以内
3.操作使用
1-登录客户端
/opt/cloudera/parcels/CDH-6.2.1-1.cdh6.2.1.p0.1425774/lib/zookeeper/bin/zkCli.sh
查看根节点下子节点有哪些
创建新的节点并指定数据
create 节点名(从根节点开始) 数据
查看节点内的数据
get 节点名
删除节点及数据
4.运行机制
第一阶段 启动服务,进行领导者选举
所有机器通过一个选择过程来选出一台被称为领导者(leader)的机器,其他的机器被称为跟随者(follower)。一旦半数以上(或指定数量)的跟随者已经将其状态与领导者同步,则表明这个阶段已经完成。
第二阶段 原子广播进行数据读写
所有的写请求都会被转发给领导者,再由领导者将更新广播给跟随者。当半数以上的跟随者已经将修改持久化之后,领导者才会提交这个更新,然后客户端才会收到一个更新成功的响应。这个用来达成共识的协议被设计成具有原子性,因此每个修改要么成功要么失败。
如果领导者出现故障,其余的机器会选出另外一个领导者,并和新的领导者一起继续提供服务。随后,如果之前的领导者恢复正常,会成为一个跟随者。领导者选举的过程是非常快的。
5.一致性
一个跟随者可能滞后于领导者几个更新。这也表明在一个修改被提交之前,只需要集合中半数以上机器已经将该修改持久化则认为更新完成。
对 ZooKeeper 来说,理想的情况就是将客户端都连接到与领导者状态一致的服务器上。
zk能保证数据的最终一致性(要么全部成功,要么全部失败)。
二、Dolphinscheduler
1.Dolphinscheduler介绍
官网 https://dolphinscheduler.apache.org/zh-cn
Apache DolphinScheduler 是一个分布式易扩展的可视化DAG工作流任务调度开源系统。适用于企业级场景,提供了一个可视化操作任务、工作流和全生命周期数据处理过程的解决方案。
Apache DolphinScheduler 旨在解决复杂的大数据任务依赖关系,并为应用程序提供数据和各种 OPS 编排中的关系。 解决数据研发ETL依赖错综复杂,无法监控任务健康状态的问题。 DolphinScheduler 以 DAG(Directed Acyclic Graph,DAG)流式方式组装任务,可以及时监控任务的执行状态,支持重试、指定节点恢复失败、暂停、恢复、终止任务等操作。
架构
2.架构说明
- MasterServerMasterServer采用分布式无中心设计理念,MasterServer主要负责 DAG 任务切分、任务提交监控,并同时监听其它MasterServer和WorkerServer的健康状态。 MasterServer服务启动时向Zookeeper注册临时节点,通过监听Zookeeper临时节点变化来进行容错处理。 MasterServer基于netty提供监听服务。###### 该服务内主要包含:- DistributedQuartz分布式调度组件,主要负责定时任务的启停操作,当quartz调起任务后,Master内部会有线程池具体负责处理任务的后续操作;- MasterSchedulerService是一个扫描线程,定时扫描数据库中的
t_ds_command
表,根据不同的命令类型进行不同的业务操作;- WorkflowExecuteRunnable主要是负责DAG任务切分、任务提交监控、各种不同事件类型的逻辑处理;- TaskExecuteRunnable主要负责任务的处理和持久化,并生成任务事件提交到工作流的事件队列;- EventExecuteService主要负责工作流实例的事件队列的轮询;- StateWheelExecuteThread主要负责工作流和任务超时、任务重试、任务依赖的轮询,并生成对应的工作流或任务事件提交到工作流的事件队列;- FailoverExecuteThread主要负责Master容错和Worker容错的相关逻辑; - WorkerServerWorkerServer也采用分布式无中心设计理念,WorkerServer主要负责任务的执行和提供日志服务。 WorkerServer服务启动时向Zookeeper注册临时节点,并维持心跳。 WorkerServer基于netty提供监听服务。###### 该服务包含:- WorkerManagerThread主要负责任务队列的提交,不断从任务队列中领取任务,提交到线程池处理;- TaskExecuteThread主要负责任务执行的流程,根据不同的任务类型进行任务的实际处理;- RetryReportTaskStatusThread主要负责定时轮询向Master汇报任务的状态,直到Master回复状态的ack,避免任务状态丢失;
- ZooKeeperZooKeeper服务,系统中的MasterServer和WorkerServer节点都通过ZooKeeper来进行集群管理和容错。另外系统还基于ZooKeeper进行事件监听和分布式锁。 我们也曾经基于Redis实现过队列,不过我们希望DolphinScheduler依赖到的组件尽量地少,所以最后还是去掉了Redis实现。
- AlertServer提供告警服务,通过告警插件的方式实现丰富的告警手段。
- ApiServer接口API接口层,主要负责处理前端UI层的请求。该服务统一提供RESTful api向外部提供请求服务。
- UI系统的前端页面,提供系统的各种可视化操作界面。
3.FinalShell主虚拟机启动服务
# 启动
sh /export/server/dolphinscheduler/bin/start-all.sh
# 停止
sh /export/server/dolphinscheduler/bin/stop-all.sh
4.Web网页登录
http://192.168.88.80:12345/dolphinscheduler/ui/view/login/index.html
账号:admin
密码:dolphinscheduler123
5.使用
5-1 安全中心
创建队列
- 队列是在执行 spark、mapreduce 等程序,需要用到“队列”参数时使用的。
- 管理员进入安全中心 -> 队列管理页面,点击“创建队列”按钮,创建队列。
注意:目前仅有 admin 用户可以修改队列。
添加租户
- 租户对应的是 Linux 的用户,用于 worker 提交作业所使用的用户。如果 linux 没有这个用户,则会导致任务运行失败。你可以通过修改
worker.properties
配置文件中参数worker.tenant.auto.create=true
实现当 linux 用户不存在时自动创建该用户。worker.tenant.auto.create=true
参数会要求 worker 可以免密运行sudo
命令 - 租户编码:租户编码是 Linux上 的用户,唯一,不能重复
- 管理员进入安全中心->租户管理页面,点击“创建租户”按钮,创建租户。
注意:目前仅有 admin 用户可以修改租户。
5-2 项目管理
I-创建项目
II-工作流定义
进入项目
定义
定义任务1
定义任务2
控制任务执行顺序
保存工作流
上线任务
执行任务
工作流执行实例
查看任务
查看任务日志
5-3 数据中心
数据源中心可以配置各种数据源,包括MySQL/PostgreSQL/Hive/Spark/ClickHouse/Oracle/
SQLServer/DB2等。配置数据源后,在使用SQL类型的任务时,选用不同数据源,就可以直接使用相应类型的SQL了。
这里,配置hive-dws:
创建工作流
注意:如果是查询语句需要配置邮箱服务,当前ds未配置邮箱服务,所以无法执行查询语句
需要公司向第三方邮箱服务器公司申请或者公司自建邮箱服务
非查询语句
create table dim.tb_test(id int,name string)
5-4 资源中心
将编写好的代码文件资源交给ds进行保存,定义任务时直接执行文件
定义工作流使用
5-5 监控中心
主要是对系统中的各个服务的健康状况和基本信息的监控和显示
6.指标分类介绍
指标就是最终要计算的数据内容。
指标主要有以下分类: (1)原子指标:
原子指标基于某一业务过程的度量值,是业务定义中不可再 拆解的指标,原子指标的核心功能就是对指标的聚合逻辑进行了 定义。比如 销售额 销量。
(2)派生指标:
派生指标基于原子指标,在原子指标的基础上加了各种限 定。比如 每月销售额 每月每个店铺的销售额。
(3)衍生指标:
衍生指标是在一个或多个派生指标的基础上,通过各种逻辑 运算复合而成的。比如 每月销售的环比增长,每个品类销售额占 比。
版权归原作者 SC放牛娃 所有, 如有侵权,请联系我们删除。