Skip to content

Commit 1aeb8ac

Browse files
committed
modify big backend
1 parent 958cd12 commit 1aeb8ac

15 files changed

+1605
-974
lines changed

docs/big-backEnd/Hadoop生态总结.md

Lines changed: 52 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
# Table of Contents
1+
# 目录
22

33
* [Hadoop生态](#hadoop生态)
4+
45
* [hdfs](#hdfs)
56
* [架构](#架构)
67
* [读写](#读写)
@@ -25,27 +26,33 @@
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
3134
tags:
32-
- Hadoop
33-
categories:
34-
- 后端
35-
- 技术总结
35+
36+
- Hadoop
37+
categories:
38+
- 后端
39+
- 技术总结
40+
3641
---
42+
3743
这篇总结主要是基于我之前Hadoop生态基础系列文章而形成的的。主要是把重要的知识点用自己的话说了一遍,可能会有一些错误,还望见谅和指点。谢谢
3844

3945
更多详细内容可以查看我的专栏文章:Hadoop生态学习
4046

4147
https://blog.csdn.net/a724888/article/category/7779280
42-
<!-- more -->
48+
<!-- more -->
4349

4450
# Hadoop生态
4551

4652
## hdfs
4753

4854
### 架构
55+
4956
hdfs是一个分布式文件系统。底层的存储采用廉价的磁盘阵列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。
8188
shuffle时进行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协议实现原理:
129137
3选主结束以后,主节点与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

139148
yarn是一个资源调度系统。提供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

173183
flume用于数据的收集和分发,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
186190
ambari就是一个Hadoop的Web应用。
187191

188192
## spark
193+
189194
spark和MapReduce不同的地方就是,把计算过程放在内存中运行。
190195

191196
spark提出了抽象的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

223227
Nimbus和Supervisor之间的所有协调工作都是通过Zookeeper集群完成。另外,Nimbus进程和Supervisor进程都是快速失败(fail-fast)和无状态的。所有的状态要么在zookeeper里面, 要么在本地磁盘上。这也就意味着你可以用kill -9来杀死Nimbus和Supervisor进程, 然后再重启它们,就好像什么都没有发生过。这个设计使得Storm异常的稳定。
224228

@@ -230,47 +234,37 @@ storm则不然。
230234

231235
1.Topology
232236

233-
  Storm对任务的抽象,其实 就是将实时数据分析任务 分解为 不同的阶段    
234-
237+
Storm对任务的抽象,其实 就是将实时数据分析任务 分解为 不同的阶段    
235238
  点: 计算组件 Spout Bolt
236239

237-
  边: 数据流向 数据从上一个组件流向下一个组件 带方向
238-
239-
240+
边: 数据流向 数据从上一个组件流向下一个组件 带方向
240241

241242
2.tuple
242243

243-
  Storm每条记录 封装成一个tuple
244-
245-
  其实就是一些keyvalue对按顺序排列
244+
Storm每条记录 封装成一个tuple
246245

247-
  方便组件获取数据
246+
其实就是一些keyvalue对按顺序排列
248247

249-
248+
方便组件获取数据
250249

251250
3.Spout
252251

253-
  数据采集器
254-
252+
数据采集器
255253
  源源不断的日志记录 如何被topology接收进行处理?
256254

257-
  Spout负责从数据源上获取数据,简单处理 封装成tuple向后面的bolt发射
255+
Spout负责从数据源上获取数据,简单处理 封装成tuple向后面的bolt发射
258256

259-
260257

261258
4.Bolt
262259

263-
  数据处理器
264-
  
265-
二:开发wordcount案例
260+
数据处理器  二:开发wordcount案例
266261

267262
1.书写整个大纲的点线图
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。
274268
spout负责获取数据,并且将数据发送给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

Comments
 (0)