- 1. 大数据发展趋势与鲲鹏大数据
- 大数据时代
- 大数据的应用领域
- 企业所面临的挑战和机遇
- 华为鲲鹏解决方案
- 2. HDFS分布式文件系统和ZooKeeper
- HDFS分布式文件系统
- HDFS概述
- HDFS相关概念
- HDFS体系架构
- HDFS关键特性
- HDFS数据读写流程
- ZooKeeper分布式协调服务
- ZooKeeper概述
- ZooKeeper体系结构
- 3. HBase分布式数据库和Hive分布式数据仓库
- HBase分布式数据库
- HBase概述与数据模型
- HBase体系架构
- HBase性能优化
- HBase常用Shell命令
- Hive分布式数据仓库
- Hive概述
- Hive功能与架构
- Hive基本操作
- 4. ClickHouse联机分析数据库管理系统
- ClickHouse概述
- ClickHouse架构及基本特性
- ClickHouse增强特性
- 5. MapReduce和Yarn技术原理
- MapReduce和Yarn基本特性
- MapReduce和Yarn功能与架构
- Yarn的资源管理和任务调度
- 增强特性
- 6. Spark基于内存的分布式计算和Flink流批一体分布式实时处理引擎
- Spark基于内存的分布式计算
- Spark概述
- Spark数据结构
- Spark原理与架构
- Flink流批一体分布式实时处理引擎
- Flink原理与架构
- Flink的Time与Window
- Flink的Watermark
- Flink的容错机制
- 7. Flume海量日志聚合和Kafka分布式消息订阅系统
- Flume海量日志聚合
- Flume简介及架构
- Flume关键特性介绍
- Flume应用举例
- Kafka分布式消息订阅系统
- Kafka简介
- Kafka架构与功能
- Kafka数据管理
- 8. ElasticSearch分布式全文检索服务
- ElasticSearch简介
- ElasticSearch系统架构
- ElasticSearch关键特性
- 9. 华为大数据平台MRS
- 华为大数据平台MRS概述
- 组件介绍
- MRS云原生数据湖基线方案
- 10. 华为数据治理中心DataArts Studio
- 数据治理概述
- 华为数据治理中心DataArts Studio概述
一.技术栈
海量数据存储系统:HDFS , Hbase , ClickHouse 。
海量数据处理:Hive ,MapReduce,Spark,Flink 。
海量数据采集和传输:Flume, Loader ,Kafka。
交互式查询:Zookeeper,Yarn,ElasticSearch。
大数据平台:MRS
数据治理平台:DataArtsStudio
列式数据库:Click House
二. HDFS
数据写入流程: 1.创建请求 -> 2.创建文件元数据 ->3.写入数据 -> 4. 写入数据包 -> 5.接收确认包 -> 6.关闭文件 ->7.写操作完成
数据读取流程: 1.打开文件 -> 2.获取数据块信息 -> 3.读取请求 -> 4.读取数据 -> 5.读取数据 -> 6.关闭节点
三 . Zookeeper
Zookeeper分布式服务框架主要是用来解决分布式应用中经常遇到的数据管理问题,提供分布式,高可用性的协调服务能力.
Zookeeper集群由一群server节点组成,这一组节点中只存在一个leader的节点.其他节点都为follower. 在集群启动时会选举leader. leader节点在接收到数据变更请求后,先写磁盘再写内存
zookeeper选举时,当某一个实例获得了半数以上票数时,就变成leader.
zookeeper关键特性:
1.最终一致性: 无论哪个server,对外展示的均是同一个视图.
2.实时性:保证客户端将在同一个时间间隔范围内获取服务器的更新信息.
3.可靠性: 一条消息被一个server接收,它将被所有server接收
4.等待无关性: 慢的或者失效的client ,不会干预快速的client的请求,使得每个client都能有效的等待.
5. 顺序一致性: 客户端所发送的更新会按照他们被发送的顺序进行应用.
小结:分布式文件系统是解决数据存储的方案,利用廉价的机器组成集群实现存储.
HDFS具有廉价,流数据读写,大数据集,简单的文件模型,强大的跨平台兼容性. 但不适合低延迟数据访问,无法高效存储大量小文件和不支持多用户写入和随意修改文件.
四. Hbase
Apache HBase可以满足大规模数据实时处理应用的需求。Apache Hive数据仓库软件有助于使用SQL读取,写入和管理驻留在分布式存储中的大型数据集。可以将结构投影到已经存储的数据上。提供了命令行工具和JDBC驱动程序以将用户连接到Hive。
非关系型分布式数据库
Hbase是一个高可靠性,高性能,面向列,可伸缩的分布式存储系统
Hbase架构中的角色:
1.Hmaster:
HMaster是HBase集群的主节点,负责管理整个集群的元数据信息,包括表的创建、删除、修改等操作。它还负责监控RegionServer的状态,并进行负载均衡和故障恢复
2.RegionServer:
RegionServer是HBase集群的工作节点,负责存储和处理数据。每个RegionServer管理多个Region,每个Region负责存储一部分表数据。RegionServer接收客户端请求,并进行数据的读写操作。
3.Zookeeper:
ZooKeeper是一个分布式协调服务,用于管理HBase集群的配置信息和状态信息。它负责选举HMaster节点,并提供高可用性的服务。
4.HDFS:
HDFS是Hadoop分布式文件系统,用于存储HBase的数据。HBase将数据以Region的形式存储在HDFS上,每个Region对应一个HFile。
5.Hbase客户端:
HBase客户端是与HBase进行交互的应用程序,它可以通过HBase提供的API进行数据的读写操作。客户端可以直接与HMaster通信,也可以通过ZooKeeper获取集群的状态信息。
行存储和列存储的比较:
行存储:
优点:全表查询更快 ,有利于增加修改整行记录等操作
缺点:单列查询时,会读取一些不必要的数据
列存储:
优点:查询列更快,统计高效
缺点:整行读取时,需要多次的IO操作
Hbase与关系型数据库的对比:
数据索引:关系型数据库针对不同列构建复杂的多个索引,而Hbase只有一个索引__行键,通过行键访问和扫描,使得系统不会慢下来.
数据维护:在关系型数据库中,更新操作会用最新的值去替代旧值,覆盖后就不会存在; Hbase执行更新操作的时候不会删除旧数据,而是生成一个新的数据.
可伸缩性:关系型数据不易扩展,Hbase能轻易通过在集群中增加或减少硬件数量来实现性能的伸缩.
Hbase的表结构:
表: 由行和列组成 ,列划分为若干个列族.
行: 每个表由若干行组成,每个行由行键 rowkey来标识.
列族: 一个表被分组成多个列族的集合columnfamily的集合,他是基本的访问控制单元.
列限定符: 列族里的数据通过列限定符来定位.
单元格: 在Hbase表中,通过行,列族和列限定符来确定一个单元格cell, 单元格中存储的数据没有数据类型,总被视为字节数组byte.
时间戳: 每个单元格都保存着同一份数据的多个版本,这些版本采用时间戳进行索引.
Hbase的shell命令
HBase常用Shell命令
create:创建表
list:列出HBase中所有的表信息
put:向表、行、列指定的单元格添加数据
scan:浏览表的相关信息
get:通过表名、行、列、时间戳、时间范围和版本号来获得相应单元格的值
enable/disable:使表有效或无效
drop:删除表
五. Hive
hive与传统数据仓库比较
Hive | 传统数据仓库 | |
存储 | HDFS | 存在上限 |
执行引擎 | tez | 可以选择更高效率的算法 |
使用方式 | hivesql | sql |
灵活性 | 元数据存储独立于数据存储之外,从而解耦元数据和数据 | 低,数据用途单一 |
分析速度 | 大量数据情况下远快于普通数仓 | 低,数据用途单一 |
索引 | 效率较低 | 高效 |
易用性 | 需要自行开发应用模型 | 集成一套成熟的报表解决方案 |
可靠性 | HDFS可靠性高,容错性高 | 可靠性较低,数据容错依赖于硬件raid |
依赖环境 | 依赖较低,可以适用一般普通机器 | 依赖高性能的商业服务器 |
价格 | 开源产品 | 商用昂贵 |
Hive的架构
hive底层执行流程
1.client提交hsql命令 -> 2. tez执行查询 -> 3. yarn为集群中应用程序分配资源,并为yarn队列中的hive作业启动授权 -> 4. hive根据表类型更新hdfs或hive数仓中的数据 -> 5. hive通过jdbc连接返回查询结果
hive分区和分桶
分区:数据表可以按照某个字段的值划分区域
每个分区是一个目录
分桶:数据可以根据桶的方式将数据放到不同的桶中
每个桶是一个文件
数据按照某个字段的值hash取模后放入某个桶中
hive托管表和外部表
删除表的时候,内部表会将元数据和数据一起删除,外部表只删除元数据
ETL:Extract/Transform/Load,用来描述将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程
JDBC:Java Database Connectivity,Java数据库连接
ODBC:Open Database Connectivity,开放数据库连接
UDF:User Defined Funcation,用户自定义函数
小结: Hbase是Bigtable的开源实现,支持大规模海量数据,分布式并发数据处理效率极高,易于扩展且支持动态伸缩,适用于廉价设备;Hbase是一个稀疏,多维,持久化存储的映射表,它采用行键,列键,时间戳进行索引,每个值都是未经解释的字符串
六. ClickHouse
面向联机分析的数据库管理系统,独立于Hadoop大数据体系, 核心的特点是极致压缩率和急速查询性能. 同时支持sql查询,性能好,基于大宽表的聚合分析查询性能非常优秀,比其他分析型数据库速度快一个数量级.
ClickHouse适用场景 | 不适用场景 |
网络/app流量分析 | OLTP联机事务处理 |
用户行为记录分析 | key_value高频访问 |
人群预估,人群画像 | 文档存储 |
商业智能BI | 非结构化数据 |
监控系统 | 点查 |
大宽表,单表聚合查询 | 频繁更新和删除的场景 |
ClickHouse架构
Clickhouse的SQL
支持大部分基本sql语法,不支持标准的update,delete , 通过alter table实现,不支持相关依赖性的子查询和窗口函数
表引擎
常见的表引擎有五种: TinyLog , Memory , MergeTree , ReplacingMergeTree以及SummingMergeTree .
不同的表引擎决定了:
数据存储和读取的位置
支持哪些查询方式
能否并发式访问数据
能不能使用索引
是否可以执行多线程请求
数据复制使用的参数
MergeTree引擎:
用于高负载任务的最通用和功能最强大的表引擎,被设计用于插入大量数据到一张表中,数据以数据块的形式被快速写入,数据块在后天会进行异步合并,确保高效的插入和查询性能.
主要支持的功能点有:
主键排序、稀疏索引
支持数据分区
支持副本机制(ReplicatedMergeTree系列)
支持数据采样
并发数据访问
支持TTL(Time To Live,数据的存活时间,到期自动删除)支持二级索引(Data Skipping Index跳数索引)
副本机制
ClickHouse副本机制的设计可以最大限度的减少网络数据传输,用以在不同的数据中心进行同步,可以用来建设多数据中心、异地多活的集群架构。
副本机制是实现:高可用(HA)、负载均衡(Load Balance)、迁移/升级(Migration/Upgrade)功能的基础。
高可用:系统会监视副本数据的同步情况,识别故障节点,并在节点恢复正常时进行故障恢复,保证服务整体高可用。
分布式查询
ClickHouse通过分片和分布式表机制提供了线性扩展的能力.
分片机制: 用来解决单节点的性能瓶颈,通过将数据进行水平切分,将一张表中的数据拆分到多个节点,不同节点之间的数据没有重复,这样就可以通过增加分片对clickhouse进行线性扩展.
分布式表:在查询分片的数据时,通过分布式表进行查询,分布式表引擎本身不存储任何数据,仅是一层代理,能够自动路由到集群中的各个分片节点获取数据,即分布式表需要和其他数据表一起协同工作.
小结:
OLAP:On line Analytic Processing,联机分析处理
DBMS: Database Management System,数据库管理系统
OLTP:On line Transaction Processing,联机事务处理
Bl:Business Intelligence,商业智能
CLl:Command Line Interface,命令行界面
七. MapReduce
基于Google发布的论文设计开发,基于分而治之的思想,用于大规模集(大于1tb)的并行计算和离线计算
hadoop 1.0的时候只有HDFS和MapReduce,资源调度也是mr来做,存在着许多瓶颈.
因此在hadoop 2.0 的时候引入了yarn, yarn专门来进行集群的资源调度和分配.
hadoop 3.0主要是配合java的jdk1.8更新
MapReduce工作流程:
Map阶段:
Reduce阶段
shuffle阶段:
词频统计wordcount
map阶段:将每个单词后面都拼接上一个数字1,形成键值对
Reduce: combine过程进行简单聚合,进行求和, merge阶段将分散的键值对按照键进行合并 , reduce阶段再进行聚合求和,得到词频统计.
八. YARN
ResourceManager 负责整个集群的资源管理和任务调度
在hadoop 3.x版本中,yarn资源模型已被推广为支持用户自定义的可数资源类型,而不是仅仅支持cpu和内存.
yarn的三大调度器
FIFO先进先出
FairS cheduler 公平调度器
Capacity Scheduler 容量调度器
容量调度器使得Hadoop应用能够共享的,多用户的,操作简便的运行在集群上,同时最大化集群的吞吐量和利用率.
容量调度器以列为单位划分资源, 每个队列都有资源使用的上限和下限,每个用户可以设置资源使用上限,管理员可以约束单个队列,用户或作业的资源使用,支持作业优先级,但不支持资源抢占.
在Hadoop3版本中,OrgQueue扩展了容量调度器,通过Rest API 提供了以编程的方式来改变队列的配置,这样管理员就可以在队列的administer_queue ACL中自动进行队列配置管理.
小结:
MOF:Map Out File,Map阶段的输出文件
FIFO:First Input First Output,先入先出队列
ACL:Access Control Lists,访问控制列表
九. Spark
Apache Spark 是一种基于内存的快速,通用,可扩展的大数据计算引擎
Spark是一站式解决方案,集批处理,实时流处理,交互式查询,图计算与机器学习于一体.
Spark vs MapReduce
Spark的核心RDD
RDD默认存储在内存中,当内存不足时,溢写到磁盘.
RDD具有血缘机制,发生数据丢失时,可快速进行数据恢复.
宽窄依赖的区别-算子
窄依赖就是父RDD最多被一个子RDD 使用,如map,filter,union
宽依赖就是父RDD 被多个子RDD所依赖,如groupBykey,ReducebyKey,sortByKey.
宽窄依赖的区别- 容错性
假如某个节点出故障了
窄依赖只要重算和子RDD分区对应的父RDD分区即可;
宽依赖在极端情况下所有父RDD分区都要进行重新计算;
RDD操作类型
Spark中的操作大致可以分为创建操作、转换操作、控制操作和行为操作。
创建操作(Creation Operation):用于RDD创建工作。RDD创建只有两种方法,一种是来自于内存集合和外部存储系统,另一种是通过转换操作生成的RDD。
转换操作(Transformation Operation):将RDD通过一定的操作转变成新的RDD,RDD的转换操作是惰性操作,它只是定义了一个新的RDD,并没有立即执行。
控制操作(ControlOperation):进行RDD持久化,可以让RDD按不同的存储策略保存在磁盘或者内存中,比如cache接口默认将RDD缓存在内存中。
行动操作(Action Operation):能够触发Spark运行的操作。Spark中行动操作分为两类,一类操作输出计算结果,另一类将RDD保存到外部文件系统或者数据库中。
算子分为Transformation 和action 算子
DataFrame概念
与RDD类似,DataFrame也是一个不可变弹性分布式数据集。除了数据以外,还记录数据的结构信息,即schema。类似二维表格。DataFrame的查询计划可以通过Spark Catalyst Optimiser进行优化,即使Spark经验并不丰富,用DataFrame写得程序也可以尽量被转化为高效的形式予以执行
DataSet概念
DataFrame是Dataset的特例,DataFrame=Dataset[Row],所以可以通过as方法将DataFrame转换为Dataset。Row是一个通用的类型,所有的表结构信息都用Row来表示。
DataSet是强类型的,可以有Dataset[Car],Dataset[Person]等。
DataFrame,DataSet,RDD表现形式的区别
典型案例wordcount
textfile读取文件 -> flatmap或者map进行拆分变成元组(单词,1)的形式 -> reduceBykey进行聚合,
saveAsTextFile进行保存;
java的版本
sparkSQL
用于处理结构化数据的模块
sparkSQL vs Hive
区别:
。Spark SQL的执行引擎为Spark Core,Hive默认执行引擎为MapReduce。
。Spark SQL的执行速度是Hive的10-100倍。
。Spark SQL不支持buckets,Hive支持。
联系:
。Spark SQL依赖Hive的元数据。
° Spark SQL兼容绝大部分Hive的语法和函数,
° Spark SQL可以使用Hive的自定义函数。
Structured Streaming
ss是构建在sparksql引擎上的流式数据处理引擎,可以像使用静态rdd数据那样编写流式计算过程,当数据连续不断的产生时,sparksql将会增量的,持续不断的处理这些数据,并将结果更新到结果集中.
Spark Streaming vs Storm
十. Flink
Apache Flink是为分布式,高性能的流处理应用程序打造的开源流处理框架,Flink不仅能提供同时支持高吞吐和exactly-once 语义的实时计算,还能提供批量数据处理.
spark的技术理念是基于批处理来模拟流的计算;而Flink相反,采用基于流计算来模拟批处理.
Flink的关键概念: 流数据的连续处理, 事件时间, 有状态流处理, 状态快照.
Flink提供了内置的状态管理,可以把这些状态存储在Flink内部,而不需要把它存储在外部系统,这样做的好处是: 降低了计算引擎对外部系统的依赖,使得部署和运维变的更加简单 . 对性能带来了极大提升.
Flink核心概念-DataStream
DataStream:Flink用类DataStream来表示程序中的流式数据. 用户可以认为他们是拥有重复数据的,不可修改的集合 ,DataStream中元素的数量是无限的.
Flink核心概念 - DataSet
DataSet可以对数据集进行转换,或通过读取文件或从本地集合创建数据集,结果通过接收器返回,接收器可以将数据写入分布式文件或标准输出.
Flink程序由Source,Transformation ,Sink三部分组成 . 其中Source主要负责数据的读取,支持HDFS,Kafka和文本等, Transformation主要负责对数据转换操作, Sink负责最终数据的输出,在各部分之间流转的数据成为流stream.
Flink的数据源
Flink作业运行流程
用户提交Flink程序得到jobclient,经过jobclient处理,解析,优化提交到jobManager,最后由TaskManager运行task.
JobClient是Flink程序与JobManager交互的桥梁,主要负责接收程序,解析程序的执行计划,优化程序的执行计划,然后提交计划到JobManager,在Flink中主要有三类计划Operator.
Source : 数据源操作,比如文件,socket,Kafka等.
Transformation: 数据转换操作,比如map, flatmap, reduce等算子.
Sink : 数据存储操作, 数据存储到HDFS,Mysql,Kafka等.
Flink的数据处理
Flink是一个纯流式的计算引擎,他的基本数据模型是数据流.流可以是有边界或无边界的,因此Flink用一套架构同时支持了流处理和批处理.
Flink的一个优势是支持有状态的计算, 如果处理一个事件的结果只跟事件本身的内容有关,称为无状态处理. 反之结果还和之前处理过的事件有关,称为有状态处理.
Flink的Time与Window
在数据流处理过程中,我们经常使用系统时间作为某个事件的时间,但由于网络延迟等原因并不能较好的反映事件之间的先后顺序.
每个事件的时间可以分为三种:
event time 事件发送时的时间
ingestion time 事件到达流处理系统的时间.
processing time 事件被系统处理的时间.
Window
流式计算是被设计用于处理无限数据集的处理引擎,无线数据集是不断增长的, 而window是一种切割无限数据为有限块进行处理的手段
Window是无限数据流处理的核心,它将一个无限的stream拆分成有限大小的buckets桶,我们可以在这些桶上进行计算操作.
Window可以分成两类
countWindow:数据驱动, 按照指定的数据条数生成一个window,与时间无关.
TimeWindow :时间驱动,按照时间生成window
timeWindow可以根据窗口实现原理不同分成三类
滚动窗口Tumbling Window
滑动窗口 Sliding Window
会话窗口 Session Window
Flink的WaterMark
乱序问题,流处理从source再到计划,中间是有过程和时间的,可能产生乱序,就是指Flink接收到的事件的先后顺序不是严格按照Event Time来排序的.
对于延迟的元素,不能一直等下去,必须要有一种机制来保证一个特定的时间后,必须触发Window进行计算,而WaterMark就是告诉了算子延迟到达的消息不应该再被接收.
Flink的容错机制
Flink使用检查点的特性,在出现故障时将系统重置回正确状态.
分布式快照可以将同一时间点Task的状态数据统一快照处理.Flink会在输入的数据集上间隔性的生成checkpoint barrier,通过栅栏barrier将间隔时间段内的数据划分到相应的checkpoint中,当应用出现异常时,计划就能够从上一次快照中恢复所有算子之前的状态,从而保证数据的一致性.
checkpoint的设置
env.enableCheckpointing(1000)//开启检查点并且指定检查点时间间隔为1000ms根据实际情况自行选择,如果状态比较大,则建议适当增加该值。
exactly-once 和at-least-once
exactly-once:保证端到端数据一致性,数据要求高,不允许出现数据丢失和数据重复.
at-least-once: 时延和吞吐量要求非常高,但对数据的一致性要求不高的场景.
Flink默认使用exactly-once模式,可以自定义设置模式
env.getCheckpointConfig().setcheckpointingMode(Checkpointing Mode.EXACTLY_ONCE)
checkpoint超时时间设定,默认10分钟
env.getCheckpointConfig().setCheckpointingTimeout(60000)
checkpoint之间最小时间间隔,防止出现数据过大导致执行时间过长
env.getCheckpointConfig().setMinPauseBetweenCheckpoints(500)
设置最大并行执行的检查点数量,可以提升整体的效率
env.getCheckpointConfig().setMaxConcurrentCheckpoints(500)
设置外部检查点,将状态数据持久化到外部系统中,防止在任务停止的过程中清理掉检查点数据.
env.getcheckpointConfig().enableExtem alizedcheckp oints(Extem alizedCheckpointCleanUD.RETAIN ON CANCELLATION)
Flink作业恢复数据除了在外部系统中保存,也有另一个机制叫Savepoint,用户可以自定义将结果持久化到指定的存储路径中.
Save Point 和CheckPoint
State Backend
Checkpoint如何持久化以及持久化在哪里,均取决于所选择的State Backend
状态的存储方式
MemoryStateBackend.
FsStateBackend
RocksDBStateBackend
小结:Flink提供了两层API,即DataStream API和Table & SQL API。这两层API针对不同的用例提供了不同的权衡
十一. Flume
Flume是流式日志采集工具,提供但对数据简单处理并且写到各种数据接受方的能力.
Flume基础架构: source -> Channel -> Sink
Flume支持采集日志文件,支持将集群中的日志文件采集并归档到HDFS等存储系统上,供上层应用对数据分析,清洗数据使用.
Flume支持多个Flume级联起来,级联节点内部支持数据复制.
Flume级联节点之间的数据传输支持压缩和加密,提升数据传输效率和安全性.
Flume传输可靠性: 在传输过程中采用事务管理方式,保证传输过程不丢失,缓存在channel中的数据如果采用File Channel也就是写到磁盘,进程或者节点重启数据也不会丢失.
Flume传输过程中,如果下一跳的Flume节点故障或者数据接收异常时,可以自动切换到另外一路上继续传输.
Flume传输中数据过滤,如果要对复杂的数据过滤,需要自己开发插件.
常见的Flume应用场景
Flume通过采集集群内应用产生的日志到HDFS上.
FLume实时采集点击流日志到Kafka的topic上,用于后续的实时分析处理
十二. Kafka
Kafka是一个分布式,分区的,多副本的,多订阅者,基于Zookeeper协调的分布式日志系统.
主要应用场景是,日志收集系统和消息系统.
分布式消息传递基于可靠的消息队列,在客户端应用和消息系统之间异步传递消息.有两种主要的消息传递模式,点对点传递模式,发布-订阅模式 . 大部分的消息系统选用发布-订阅模式. Kafka就是一种发布-订阅模式.
点对点模式: 消息持久化到一个队列中,但是一条消息只能被消费一次,当消费者消费了数据后,该条数据则从消息队列删除.
发布-订阅: 消息被持久化到一个topic中, 与点到点不同的是消费者可以订阅多个topic,消费者可以消费该topic中的所有数据, 同一条数据可以被多个人消费,数据被消费后不会删除. 两个角色分别为生产者和消费者.
Kafka的特点
Kafka的基本角色概念
Broker:Kafka集群包含一个或多个服务实例.
Topic: 每条发布到Kafka集群的消息都有一个类别.
Partition: Kafka将topic分成一个或多个Partition,每个分区在物理上对应一个文件夹,该文件夹存储这个分区的所有消息.
Producer: 负责发布消息到broker
Consumer: 消息消费者,从broker读取消息的客户端
ConsumerGroup: 每个Consumer属于一个特定的ConsumerGroup
Offset:每个消息在文件中的位置成为offset偏移量,offset是一个long型数字,他唯一标记一条消息
offset存储机制
Consumer group
每个Consumer都属于一个group,每条消息只能被group中的一个消费者消费,但可以被多个消费者组消费,即组间数据是共享的,但组内数据是竞争的.
Kafka中的其他角色
Replica:
°Partition的副本,保障Partition的高可用:Leader:
。Replica中的一个角色,Producer和Consumer只跟Leader交互。Follower:
。Replica中的一个角色,从Leader中复制数据。Controller:
。Kafka集群中的其中一个服务器,用来进行Leader election以及各种Failover。
Kafka Partition Replica
每个分区有一至多个副本,分区的副本分布在集群的不同broker上,以提高可用性,从存储角度分析
Kafka主从消息同步
Kafka分区副本从领导者那里拉取高水位以下的已经存储的消息到本地的log日志
Kafka HA
同一个分区可能会有多个副本,没有副本的情况下,一旦broker宕机,其上面所有数据不可被消费,同时生产者也不能再将数据存在上面的分区中,引入副本机制后同一个分区会有多个副本,而这时需要这些副本中选出一个leader,生产者与消费者只与这个leader交互,其他副本作为follower从leader中复制数据.
Kafka数据可靠性
Kafka所有消息都会被持久化到硬盘中,同时kafka通过对topic分区设置副本数来保障数据可靠
消息传输语句:
消息传输保障有三种方式:
最多一次At Most Once: 消息可能丢失,消息不会重复发送和处理.
最少一次At Lease Once: 消息不会丢失,消息可能会重复发送和处理.
仅有一次Exactly Once: 消息不会丢失 , 消息仅被处理一次.
可靠性保证- 幂等型
一个幂等性的操作就是一种被执行多次造成的影响和只执行一次造成的影响一样.
原理: 每发送到Kafka的消息都包含一个序列号,Broker将使用这个序列号来删除重复数据.
这个序列号被持久化到副本日志,即使分区的leader挂了,其他broker接管了leader,新leader任然可以判断重新发送的消息是否重复了.
这种机制的开销非常低,每批消息只有几个额外的字段.
可靠性保证-acks机制
Producer需要Server接收到数据之后发出的确认接受的信号,此项配置就是指procuder需要多少个这样的确定信号.为一下选项
ack=0 ,表示producer不需要等待任何确认接受的消息,副本立即加到socket buffer并认为已经发送, 没有任何保障这种情况下server已经成功接受数据. 回馈的offset会总是设置成-1
ack=1 :,表示至少要等leader已经成功将数据写入本地log,但是并没有等待所有follower是否成功写入,这种情况下,如果follow没有成功备份数据,而此时leader又挂掉,则消息会丢失.
ack=all , 这意味leader需要等到所有备份都成功写入日志,这种策略会保证只要有一个备份存活就不会丢失数据,这是最强的保证.
小结:JDBC:Java Database Connectivity,Java数据库连接
MRS:MapReduce Service, MapReduce服务
wal:Write-Ahead Log,预写式日志
syslog:System log,系统日志
http:Hyper Text Transfer Protocol,超文本传输协议
jms:Java Message Service,java消息服务
ISR:In-sync Replica,同步副本
msg:message,消息
十三 . ElasticSearch
近年ElasticSearch发展迅猛,已经超越了其最初的纯搜索引擎的角色,已经增加了数据聚合分析和可视化的特性,如果你有数百万的文档需要通过关键词进行定位时,ElasticSearch肯定是最佳选择。
如需要查询的数据有结构化数据、半结构化数据、非结构化数据等ElasticSearch可以对以上数据类型进行清洗、分词、建立倒排索引等一系列操作,然后提供全文检索的能力。
ES是一个高性能,基于Lucene的全文检索服务.分布式的搜索和数据分析引擎.
用于日志搜索和分析,时空检索,时序检索,智能搜索等场景.
ES系统架构
ES 核心概念
Index:索引
Type:文档类型,用于存储不同类型的文档,现在的版本中只有一个类型.
Document: 文档,是可以被索引的基本单位.
Mapping: 映射,用来约束字段的类型.
Cluster: 一个集群,集群中有多个节点,其中有一个主节点,通过选举产生.
EsNode: 一个节点就是一个实例.
EsMaster:临时管理,主节点不参与文档级别的变更或搜索.
shards: 代表索引分片,可以把一个完整的索引切成多个分片,分布到不同节点上.
replcas: 索引副本,设置多个副本可以提高容错性.
Recovery: 代表数据恢复,Es在节点加入或退出时会根据机器的负载对索引分片进行重新分配,挂掉的节点重新启动时也会进行数据恢复.
GateWay: 代表es索引快照的存储方式.默认先放到内存中,内存满了再持久化到本地硬盘.
Transport: 代表es内部节点或集群与客户端的交互方式,内部使用tcp协议.
倒排索引
正排就是通过key找value,倒排就时通过value找key,在全文搜索中value就时要搜索的关键词,通过value找到对应的文档.value可能在多个文档里.
es路由算法
Elasticsearch中提供了两种路由算法:
▫默认路由: shard=hash(routing)%number_of_primary_shards ,这里路由策略扩展受到shards个数的限制,扩容的时候需要成倍扩容(ES6.x),并且在创建index的时候要指定未来允许扩容的规模。ES5.x不支持扩容;ES7.x可以自由扩容。
自定义路由:该路由方式,通过指定routing的方式,可以影响文档写入到哪个shard,也可以仅仅检索特定的shard。
es平衡算法
Elasticsearch中提供了自动平衡功能
适用场景:扩容、减容、导入数据场景算法如下:
° weight_index(node, index)= indexBalance * (node.numShards(index)- avgShardsPerNode(index))a Weight node(node, index)= shardBalance * (node.numShards()-avgShardsPerNode)weight(node, index)= weight index(node, index)+ weight_node(node, index)
es扩容
扩容场景:
。物理资源消耗过大,即ElasticSearch的服务节点的CPU、内存占用率过高、磁盘空间不足。Elasticsearch单实例的索引数据太大,索引的数目达到10亿条或是数据大小达到1 TB。扩容方式:
增加EsNode实例。
。增加节点,在新节点增加EsNode实例。
扩容后,采用自动均衡策略。
es减容
减容场景
。节点需要重新安装操作系统。
集群数据量减少。
。退服场景。
减容方式
。在CloudSearch Service管理界面上删除ElasticSearch实例。减容注意事项:
确保要删除的实例上的shard下的replica在其他实例存在。0确保要删除的实例上的数据已经迁移到其他节点
es索引Hbase数据
es单节点多实例部署
es副本自动跨节点分配策略
es全文索引特性
通过建立HBase表和ElasticSearch索引的映射关系,支持索引存储ElasticSearch,而原始数据存储HBase。通过HBase2ES工具离线索引。
小结:
JMX:Java Management Extensions, Java管理扩展
NoSQL:Not Only SQL,非关系型数据库
ELK:Elasticsearch Logstash Kibana,三个开源软件的缩写
Es:ElasticSearch,分布式全文检索
HTTP:Hyper Text Transfer Protocol,超文本传输协议
Js:JavaScript,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言
Doc:Document,文档
CPU:Central Processing Unit,中央处理器ELKB:Elasticsearch Logstash Kibana Beats,四个开源软件的缩写
十四. 华为大数据平台MRS
大数据技术演进趋势
华为云MRS (MapReduceService,MapReduce服务) 是一个在华为云上部署和管理Hadoop系统的服务,一键即可部署Hadoop集群。
MRS提供租户完全可控的一站式企业级大数据集群云服务,完全兼容开源接口,结合华为云计算,存储优势及大数据行业经验,为客户提供高性能,低成本,灵活易用的全栈大数据平台,为客户提供高性能、低成本、灵活易用的全栈大数据平台,轻松运行Hadoop、Spark、HBase、Kafka、Storm等大数据组件,并具备在后续根据业务需要进行定制开发的能力,帮助企业快速构建海量数据信息处理系统并通过对海量信息数据实时与非实时的分析挖掘,发现全新价值点和企业商机。
MRS架构
Hudi
Hudi是一种数据湖的存储格式, 在Hadoop文件系统之上提供了更新数据和删除数据的能力,以及消费变化数据的能力,支持多种计算引擎,提供IUD接口,在HDFS的数据集上提供了插入更新和增量拉取的流原语
Hudi是数据湖的文件组织层,对Parquet格式文件进行管理提供数据湖能力,支持计算引擎,提供IUD接口
Hudi架构:
存储模式
cow模式:写时复制,写相对MOR慢,读性能高.
MOR模式:读取时merge,写性能高,读性能略低
存储格式支持Parquet,Hfile,ORC.
HetuEngine是华为自研高性能分布式SQL查询,数据虚拟化引擎.与大数据生态无缝融合,实现海量数据秒级查询;支持多源异构协同,使能数据湖内一站式SQL融合分析.
Ranger
提供了一个集中式安全管理框架,提供统一授权和统一审计能力.他可以对整个Hadoop生态中如HDFS,HIVE,Kafka,Storm等进行细粒度的数据访问控制,用户可以利用Ranger提供的前端WebUI控制台通过配置相关策略来控制用户对这些组件的访问权限.
LDAP是轻量目录访问协议lightweight directory access protocol 的缩写,是一种基于x.500目录访问协议的集中账号管理架构的实现协议标准.
Kerberos是安全认证,采用c/s架构与对称加密等技术,能够进行相互认证,客户端和服务器均可对对方进行身份验证.
MRS数据湖解决方案,实现三湖+集市业务场景,满足建设数据湖过程中不同各阶段的需求.
离线数据湖,实时数据湖,逻辑数据湖
小结:
Bl:Business Intelligence,商业智能
ETL: Extract、Transform、Load,数据从来源端经过抽取(Extract)、转换(Transform)、加载(Load)至目的端的过程
Al: Artificial Intelligence,人工智能
DWS:Data Warehouse Service,数据仓库服务
ES:ElasticSearch,分布式全文检索服务
OBS:Object Storage Service,对象存储服务
ORC:OptimizedRc File,ORc(OptimizedRc File)也是 Apache 的顶级项目,也是自描述的列存储
十五. 数据治理
面临的问题:
困难与挑战:
大数据组件众多,集成开发门槛高
大量命令行、SQL、Shell脚本散落在各个主机各个系统,缺少统一管控
Oozie作为调度工具,缺少图形化编排能力,无法支撑复杂业务场景
开源大数据组件缺少数据管理能力,对后续数据治理工作带来极大困难
数据治理是一门将数据视为一项企业资产的学科。它涉及到以企业资产的形式对数据进行优化、保护和利用的决策权利。它涉及到对组织内的人员、流程、技术和策略的编排以从企业数据获取最优的价值。
数据治理的最终目标是提升数据的价值,数据治理非常必要,是企业实现数字战略的基础,它是一个管理体系,包括组织、制度、流程、工具。
数据治理的价值
降低业务运营成本
提升业务处理效率
改善数据质量
控制数据风险
增强数据安全
赋能管理决策
华为数据治理中心DataArts Studio是具有智能数据管理能力的一站式治理运营平台.
提供数据集成,数据开发,规范设计,数据质量监控,数据资产管理,数据服务,数据安全等功能.
数据集成:多种方式异构数据源高效接入
规范设计: 数据建模可视化(逻辑/物理模型,关系建模,维度建模),自动化,智能化
数据开发: 一站式协同开发平台
数据质量:可控可检验
数据资产管理:360度全链路数据资产可视化
数据服务: 提升访问查询检索效率
数据安全:网络安全,用户权限策略,数据安全.
小结:
MPPDB:Massively Parallel Processing DataBase,大规模并行处理架构的数据库
ETL:是英文Extract-Transform-Load的缩写,用来描述将数据从来源端经过抽取(Extract)、转换(Transform)、加载(Load)至目的端的过程。
RDS:Relational Database Service,关系型数据库服务
DWS:Data Warehouse Service,数据仓库服务
CDM:Cloud Data Migration,云数据迁移
OBS:Object Storage Service,对象存储服务
FTP:FileTransferProtocol,是一种文件传输协议
SFTP:SSH File Transfer Protocol,是一种文件传输协议
DAG:Direct Acyclic Graph,有向无环图