1- # Table of Contents
1+ # 目录
22
33* [ Hadoop生态] ( #hadoop生态 )
4+
45 * [ hdfs] ( #hdfs )
56 * [ 架构] ( #架构 )
67 * [ 读写] ( #读写 )
2526 * [ 个人公众号:黄小斜] ( #个人公众号:黄小斜 )
2627
2728
29+
2830---
29- title: Hadoop生态学习总结
30- date: 2018-07-08 22:15:53
31+
32+ title: Hadoop生态学习总结
33+ date: 2018-07-08 22:15:53
3134tags:
32- - Hadoop
33- categories:
34- - 后端
35- - 技术总结
35+
36+ - Hadoop
37+ categories:
38+ - 后端
39+ - 技术总结
40+
3641---
42+
3743这篇总结主要是基于我之前Hadoop生态基础系列文章而形成的的。主要是把重要的知识点用自己的话说了一遍,可能会有一些错误,还望见谅和指点。谢谢
3844
3945更多详细内容可以查看我的专栏文章:Hadoop生态学习
4046
4147https://blog.csdn.net/a724888/article/category/7779280
42- <!-- more -->
48+ <!-- more -->
4349
4450# Hadoop生态
4551
4652## hdfs
4753
4854### 架构
55+
4956hdfs是一个分布式文件系统。底层的存储采用廉价的磁盘阵列RAID,由于可以并发读写所以效率很高。
5057
5158基本架构是一个namenode和多个dataNode。node的意思是节点,一般指主机,也可以是虚拟机。
@@ -76,8 +83,8 @@ MapReduce是基于Hadoop集群的分布式计算方案。一般先编写map函
7683
7784### wordcount
7885
79- 首先是一个文本文件: hi hello good hello hi hi。
80- 三个节点,则进行三次map。hi hello,good hello,hi hi分别由三个节点处理。结果分别是hi 1 hello 1,good 1 hello 1,hi 1,hi 1。
86+ 首先是一个文本文件: hi hello good hello hi hi。
87+ 三个节点,则进行三次map。hi hello,good hello,hi hi分别由三个节点处理。结果分别是hi 1 hello 1,good 1 hello 1,hi 1,hi 1。
8188shuffle时进行combine操作,得到hi 1,hello 1,good 1 hello 1,hi 2。最终reduce的结果是hi 3 hello 2 good 1.
8289
8390## hive
@@ -94,10 +101,11 @@ hbase是基于列的数据库。
94101
95102首先在表结构上,hbase使用rowkey行键作为唯一主键,通过行键唯一确定一行数据。
96103
97- 同时,hbase使用列族的概念,每个表都有固定的列族,每一行的数据的列族都一样,但是每一行所在列族的实际列都可以不一样。
104+ 同时,hbase使用列族的概念,每个表都有固定的列族,每一行的数据的列族都一样,但是每一行所在列族的实际列都可以不一样。
98105比如列族是info,列可以是name age,也可以是sex address等。也就是说具体列可以在插入数据时再进行确认。
99106
100107并且,hbase的每一行数据还可以有多个版本,通过时间戳来表示不同的数据版本。
108+
101109### 存储
102110
103111一般情况下hbase使用hdfs作为底层存储,所以hdfs提供了数据的可靠性以及并发读写的高效率。
@@ -129,68 +137,65 @@ zab协议实现原理:
1291373选主结束以后,主节点与slave进行主从同步,保证数据一致性,然后对外提供服务,并且写入只能通过master而读取可以通过任意一台机器。
130138
131139## sqoop
140+
132141将hive表中的内容导入到MySQL数据库,也可以将MySQL中的数据导入hive中。
133142
134143## yarn
135144
136- 没有yarn之前,hdfs使用jobtracker和tasktracker来执行和跟踪任务,jobtracker的任务太重,又要执行又要监控还要获取结果。
145+ 没有yarn之前,hdfs使用jobtracker和tasktracker来执行和跟踪任务,jobtracker的任务太重,又要执行又要监控还要获取结果。
137146并且不同机器的资源情况没有被考虑在内。
138147
139148yarn是一个资源调度系统。提供applicationmaster对一个调度任务进行封装,然后有一个resourcemanager专门负责各节点资源的管理和监控。同时nodemanager则运行每个节点中用于监控节点状态和向rm汇报。还有一个container则是对节点资源的一个抽象,applicationmaster任务将由节点上的一个container进行执行。rm会将他调度到最合适的机器上。
149+
140150## kafka
141151
142152架构
143153
144154> kafka是一个分布式的消息队列。
145- >
155+ >
146156> 它组成一般包括kafka broker,每个broker中有多个的partition作为存储消息的队列。
147- >
157+ >
148158> 并且向上提供服务时抽象为一个topic,我们访问topic时实际上执行的是对partition的写入和读取操作。
149159
150160
151161读写和高可用
152162
153163> partition支持顺序写入,效率比较高,并且支持零拷贝机制,通过内存映射磁盘mmap的方式,写入partition的数据顺序写入到映射的磁盘中,比传统的IO要快。
154- >
155- > 由于partition可能会宕机,所以一般也要支持partition的备份,1个broker ,master通常会有多个
164+ >
165+ > 由于partition可能会宕机,所以一般也要支持partition的备份,1个broker ,master通常会有多个
156166> broker slave,是主从关系,通过zookeeper进行选主和故障切换。
157- >
167+ >
158168> 当数据写入队列时,一般也会通过日志文件的方式进行数据备份,会把broker中的partition被分在各个slave中以便于均匀分布和恢复。
159169
160170生产者和消费者
161171
162172> 生产者消费者需要访问kafka的队列时,如果是写入,直接向zk发送请求,一般是向一个topic写入消息,broker会自动分配partition进行写入。然后zk会告诉生产者写入的partition所在的broker地址,然后进行写入。
163- >
173+ >
164174> 如果是读取的话,也是通过zk获取partition所在位置,然后通过给定的offset进行读取,读取完后更新offset。
165- >
175+ >
166176> 由于kafka的partition支持顺序读写。所以保证一个partition中的读取和写入时是顺序的,但是如果是多个partition则不保证顺序。
167- >
177+ >
168178> 正常情况下kafka使用topic来实现消息点对点发送,并且每个consumer都要在一个consumer group中,而且comsumer group中每次只能有一个消费者能接受对应topic的消息。因为为了实现订阅也就是一对多发送,我们让每个consumer在一个单独的group,于是每个consumer都可以接受到该消息。
169179
170180
171181## flume
172182
173183flume用于数据的收集和分发,flume可以监听端口的数据流入,监视文件的变动以及各种数据形式的数据流入,然后再把数据重新转发到其他需要数据的节点或存储中。
174184
175- 1、Flume的概念
176-
177- flume是分布式的日志收集系统,它将各个服务器中的数据收集起来并送到指定的地方去,比如说送到图中的HDFS,简单来说flume就是收集日志的。
178-
179- 2、Event的概念
180- 在这里有必要先介绍一下flume中event的相关概念:flume的核心是把数据从数据源(source)收集过来,在将收集到的数据送到指定的目的地(sink)。为了保证输送的过程一定成功,在送到目的地(sink)之前,会先缓存数据(channel),待数据真正到达目的地(sink)后,flume在删除自己缓存的数据。
181-
182- 在整个数据的传输的过程中,流动的是event,即事务保证是在event级别进行的。那么什么是event呢?—–event将传输的数据进行封装,是flume传输数据的基本单位,如果是文本文件,通常是一行记录,event也是事务的基本单位。event从source,流向channel,再到sink,本身为一个字节数组,并可携带headers(头信息)信息。event代表着一个数据的最小完整单元,从外部数据源来,向外部的目的地去。
183-
184- flume使用
185- ## ambari
185+ 1、Flume的概念
186+ flume是分布式的日志收集系统,它将各个服务器中的数据收集起来并送到指定的地方去,比如说送到图中的HDFS,简单来说flume就是收集日志的。
187+ 2、Event的概念 在这里有必要先介绍一下flume中event的相关概念:flume的核心是把数据从数据源(source)收集过来,在将收集到的数据送到指定的目的地(sink)。为了保证输送的过程一定成功,在送到目的地(sink)之前,会先缓存数据(channel),待数据真正到达目的地(sink)后,flume在删除自己缓存的数据。
188+ 在整个数据的传输的过程中,流动的是event,即事务保证是在event级别进行的。那么什么是event呢?—–event将传输的数据进行封装,是flume传输数据的基本单位,如果是文本文件,通常是一行记录,event也是事务的基本单位。event从source,流向channel,再到sink,本身为一个字节数组,并可携带headers(头信息)信息。event代表着一个数据的最小完整单元,从外部数据源来,向外部的目的地去。
189+ flume使用 ## ambari
186190ambari就是一个Hadoop的Web应用。
187191
188192## spark
193+
189194spark和MapReduce不同的地方就是,把计算过程放在内存中运行。
190195
191196spark提出了抽象的RDD分布式内存模型,把每一步的计算操作转换成一个RDD结构,然后形成一个RDD连接而成的有向图。
192197
193- 比如data.map().filter().reduce();
198+ 比如data.map().filter().reduce();
194199程序提交到master以后,会解析成多个RDD,并且形成一个有向图,然后spark再根据这些RD结构在内存中执行对应的操作。当然这个拓扑结构会被拆分为各个子任务分发到各个spark节点上,然后计算完以后再形成下一个rdd。最后汇总结果即可。
195200
196201由于是在内存中对数据进行操作,省去了不必要的IO操作,,不需要像Mapreduce一样还得先去hdfs读取文件再完成计算。
@@ -216,9 +221,8 @@ Storm集群和Hadoop集群表面上看很类似。但是Hadoop上运行的是Map
216221
217222在Storm的集群里面有两种节点: 控制节点(master node)和工作节点(worker node)。控制节点上面运行一个叫Nimbus后台程序,它的作用类似Hadoop里面的JobTracker。Nimbus负责在集群里面分发代码,分配计算任务给机器, 并且监控状态。
218223
219- 每一个工作节点上面运行一个叫做Supervisor的节点。Supervisor会监听分配给它那台机器的工作,根据需要启动/关闭工作进程。每一个工作进程执行一个topology的一个子集;一个运行的topology由运行在很多机器上的很多工作进程组成。
220-
221- ![ ] ( https://img-blog.csdn.net/20160107221357281?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center )
224+ 每一个工作节点上面运行一个叫做Supervisor的节点。Supervisor会监听分配给它那台机器的工作,根据需要启动/关闭工作进程。每一个工作进程执行一个topology的一个子集;一个运行的topology由运行在很多机器上的很多工作进程组成。
225+ ![ ] ( https://java-tutorial.oss-cn-shanghai.aliyuncs.com/20230408112703.png )
222226
223227Nimbus和Supervisor之间的所有协调工作都是通过Zookeeper集群完成。另外,Nimbus进程和Supervisor进程都是快速失败(fail-fast)和无状态的。所有的状态要么在zookeeper里面, 要么在本地磁盘上。这也就意味着你可以用kill -9来杀死Nimbus和Supervisor进程, 然后再重启它们,就好像什么都没有发生过。这个设计使得Storm异常的稳定。
224228
@@ -230,47 +234,37 @@ storm则不然。
230234
2312351.Topology
232236
233- Storm对任务的抽象,其实 就是将实时数据分析任务 分解为 不同的阶段
234-
237+ Storm对任务的抽象,其实 就是将实时数据分析任务 分解为 不同的阶段
235238 点: 计算组件 Spout Bolt
236239
237- 边: 数据流向 数据从上一个组件流向下一个组件 带方向
238-
239-
240+ 边: 数据流向 数据从上一个组件流向下一个组件 带方向
240241
2412422.tuple
242243
243- Storm每条记录 封装成一个tuple
244-
245- 其实就是一些keyvalue对按顺序排列
244+ Storm每条记录 封装成一个tuple
246245
247- 方便组件获取数据
246+ 其实就是一些keyvalue对按顺序排列
248247
249-
248+ 方便组件获取数据
250249
2512503.Spout
252251
253- 数据采集器
254-
252+ 数据采集器
255253 源源不断的日志记录 如何被topology接收进行处理?
256254
257- Spout负责从数据源上获取数据,简单处理 封装成tuple向后面的bolt发射
255+ Spout负责从数据源上获取数据,简单处理 封装成tuple向后面的bolt发射
258256
259-
260257
2612584.Bolt
262259
263- 数据处理器
264-
265- 二:开发wordcount案例
260+ 数据处理器 二:开发wordcount案例
266261
2672621.书写整个大纲的点线图
268263
269- ![ ] ( https://images2015.cnblogs.com/blog/1027015/201701/1027015-20170126164121691-1448959654.png )
270-
271- topology就是一个拓扑图,类似于spark中的dag有向图,只不过storm执行的流式的数据,比dag执行更加具有实时性。
264+ ![ ] ( https://java-tutorial.oss-cn-shanghai.aliyuncs.com/20230408112730.png )
265+ topology就是一个拓扑图,类似于spark中的dag有向图,只不过storm执行的流式的数据,比dag执行更加具有实时性。
272266
273- topology包含了spout和bolt。
267+ topology包含了spout和bolt。
274268spout负责获取数据,并且将数据发送给bolt,这个过程就是把任务派发到多个节点,bolt则负责对数据进行处理,比如splitbolt负责把每个单词提取出来,countbolt负责单词数量的统计,最后的printbolt将每个结果集tuple打印出来。
275269
276270这就形成了一个完整的流程。
@@ -289,6 +283,5 @@ spout负责获取数据,并且将数据发送给bolt,这个过程就是把
289283
290284作者是 985 硕士,蚂蚁金服 JAVA 工程师,专注于 JAVA 后端技术栈:SpringBoot、MySQL、分布式、中间件、微服务,同时也懂点投资理财,偶尔讲点算法和计算机理论基础,坚持学习和写作,相信终身学习的力量!
291285
292- ** 程序员3T技术学习资源:** 一些程序员学习技术的资源大礼包,关注公众号后,后台回复关键字 ** “资料”** 即可免费无套路获取。
293-
294- ![ ] ( https://img-blog.csdnimg.cn/20190829222750556.jpg )
286+ ** 程序员3T技术学习资源:** 一些程序员学习技术的资源大礼包,关注公众号后,后台回复关键字 ** “资料”** 即可免费无套路获取。
287+ ![ ] ( https://img-blog.csdnimg.cn/20190829222750556.jpg )
0 commit comments