1: hadoop 1.x
- 由 hdfs 和 MapReduce 组成。
2: hadoop 2.x
- 由 hdfs 和 MapReduce 和 YARN三个分支组成。
- hdfs:NN Federation (联邦) 和 HA。
- hadoop 2.x 只支持2个节点HA。
3:hadoop 3.x
- 实现了一主多备。
4: hadoop的发展史
- Hadoop的思想之源:Google
- Openstack : NASA
- 面对的数据计算难题
- 大量网页怎么存储
- 搜索算法
- 带给我们关键技术和思想
- – GFS
- – Map-Reduce
- – Bigtable
5: hadoop的组成(重点)
-
.HDFS:分布式文件系统,提供高吞吐量的应用程序数据访问。
------优点: 高可靠性、高扩展性和高吞吐率的数据存储服务 -
MapReduce:一个分布式海量数据处理的软件框架集计算集群。
-----优点: 具有 易于编程、高容错性和高扩展性等优点。 -
Avro :doug cutting主持的RPC项目,主要负责数据的序列化。有点类似Google的protobuf和Facebook的thrift。avro用来做以后hadoop的RPC,使hadoop的RPC模块通信速度更快、数据结构更紧凑*
-
HIve : 重点(给过去的数据 进行历史分析用的;底层存储用的是 hdfs 计算用的mapreduce 。
是一个数据仓库 历史数据仓库 分析数据)类似CloudBase,也是基于hadoop分布式计算平台上的提供data warehouse的sql功能的一套软件。使得存储在hadoop里面的海量数据的汇总,即席查询简单化。hive提供了一套QL的查询语言,以sql为基础,使用起来很方便。
-----优点:简单容易上手:提供了类SQL查询语言HQL (2)可扩展:为超大数据集设计了计算/扩展能力(MR作为计算引擎,HDFS作为存储系统) 一般情况下不需要重启服务Hive可以自由的扩展集群的… -
HBase : 基于HadoopDistributed File System,是一个开源的,基于列存储模型的可扩展的分布式数据库,支持大型表的存储结构化数据。
-
ZooKeeper:Google的Chubby一个开源的实现。它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
-----优点: -
Chukwa:一个管理大型分布式系统的数据采集系统 由yahoo贡献。
-
Cassandra:无单点故障的可扩展的多主数据库
-
Mahout :一个可扩展的机器学习和数据挖掘库.
-
Pig :是一个并行计算的高级的数据流语言和执行框架 ,SQL-like语言,是在MapReduce上构建的一种高级查询语言,把一些运算编译进MapReduce模型的Map和Reduce中,并且用户可以定义自己的功能。
6: hadoop的三种运行模式
- 伪分布式
1: 本地运行模式不需要额外的设置. 只需要执行响应的jar包就可以了.不需要任何的集群配置, 本地运行模式其实也是一种单节点模式. - 全分布式
1: Hadoop也可以以伪分布模式的方式运行在单节点上, 这个时候每一个Hadoop守护进程都是一个单独的Java进程.
这种模式需要进行相应的分布式设置, 但是又由于只有一个节点, 所以我们称之为伪分布模式.
由于Hadoop2.x增加了Yarn, 所以有两个选择: 可以把MapReduce程序直接运行在HDFS上, 也可以选择运行在Yarn上。 - 完全分布式
1:在集群中, 一般情况下每个节点的配置都是一样的, 所以一般会在一个节点配置完成后, 然后再分发到其他节点上.
所以, 我们可以自己写一个这样的集群分发脚本来完成这个工作.
2:假设我们的配置是先在hadoop101上配置完成, 然后再分发到其他节点上: hadoop102, hadoop103
7:HDFS的组成架构
-
HDFS优点:分布式存储系统
1: 提供了 高可靠性、高扩展性和高吞吐率的数据存储服务
2:高容错性,数据自动保存多个副本
3“ 副本丢失后,自动恢复
4:适合批处理
5:移动计算而非数据
6:数据位置暴露给计算框架(Block偏移量)
7:适合大数据处理 GB 、TB 、甚至PB 级数据 百万规模以上的文件数量
10K+ 节点
8:可构建在廉价机器上 通过多副本提高可靠性 提供了容错和恢复 机制。扫描二维码关注公众号,回复: 9423101 查看本文章 -
HDFS缺点:
1:低延迟数据访问,比如毫秒级,低延迟与高吞吐率。2:小文件存取,占用NameNode 大量内存,寻道时间超过读取时间,并发写入、文件随机修改,一个文件只能有一个写者 仅支持append。
-
HDFS的块大小
1:文件线性切割成块(Block) :偏移量offset (byte)
一Block分散存储在集群节点中2:单一文件Block大小-致,文件与文件可以不一致
3:Block可以设置副本数,副本分散在不同节点中
副本数不要超过节点数量4:文件上传可以设置Block大小和副本数
5:已上传的文件Block副本数可以调整,大小不变
只支持一次写入多次读取,同一时刻只有一个写入者
可以append追加数据
8: HDFS数据的 (读,写) 和下载流程
-
写流程
1:首先一个 a.txt文件2:a.txt 文件的拆分是在HDFS client(客户端)中完成的,拆分成了3个
Block(A,B,C)。3:HDFS client(客户端)会去询问NameNoed,哪些DataNode可以存储Block A
因为NameNode存储着整个文件系统的元数据,它知道哪个DataNode上有空间可以存储这个Block A4: NameNode通过查看它的元数据信息,发现DataNode1、2、7上有空间可以存储Block A,预示将此信息高速传达给 HDFS Client(客户端).
5:HDFS Client(客户端)接到NameNode返回的DataNode列表信息后,它会直接联系第一个DataNode 1
6:让它准备接收Block A–实际上就是建立彼此之间的TCP连接。然后将Block A和NameNode返回的所有关于DataNode的元数据一并传给DataNode1。
7:在DataNode1与HDFS Client (客户端) 建立好TCP连接后,
8:它会把HDFS Client (客户端) 要写Block A 的请求顺序传给DataNode2 要求DataNode2也准备好接收Block A,
建立DataNode2到DataNode1的TCP连接。9:HDFS Client (客户端) 要写Block A 的请求顺序在传给DataNode3
建立 DataNode2与DataNode3的TCP连接。10:当HDFS Client(客户端)接收到 DataNode1 的成功反馈信息后,说明这3个DataNode都已经准备好了,
HDFS Client就会开始往这三个DataNode写入Block A11:在DataNode1 2 7都准备好接收数据后,HDFS Client(客户端)开始往DataNode1写入Block A数据。
当DataNode1 接收完A数据后,HDFS Client(客户端)会顺序将
Block A数据传输给DataNode2,12:(注意这里是DataNode2) 然后 DataNode2 再传输给 DataNode7 每个 DataNode 在接受完Block A 数据后,
会发消息给NameNode,告诉他Block数据已经接收完毕。13:当 Block A 成功写入3个 DataNode 之后, DataNode1 (这里是DataNode1)会发送一个成功消息给 HDFS Client,
同时HDFS Client也会发一个Block A成功写入的信息给NameNode,之后
HDFS Client(客户端) 才能开始继续处理下一个(Block B 和 Block C) -
下载流程
1:HDFS Client(客户端) 会先去联系 NameNode,询问a.txt总共分为几个Block ,比如一个文件被拆分为(Block A,Block B,Block C)而且这些Block分别存放在哪些DataNode上。
2:由于每个Block都会存在几个副本,所以NameNode会把a.txt文件组成的Block 对应的所有 DataNode 列表都返回给 HDFS Client(客户端).
3: 然后HDFS Client(客户端)会选择 DataNode 列表里的第一个 DataNode去读取对应的 Block,(比如Block A存储在DataNode 1 2 7),
4:那么HDFS Client(客户端)会到 DataNode1 去读取Block A,
5:Block C存储在DataNode7 8 9那么 HDFS
Client 就回到 DataNode7 去读取Block C.6:读取完毕后 会合并成一个大文件输出到本地;
9:HDFS副本策略
-
第一个副本:放置在上传文件的DN;如果是集群外提交,则随机挑选一台磁盘不太满,CPU不太忙的节点。
-
第二个副本:放置在于第一个副本不同的 机架的节点上。
-
第三个副本:与第二个副本相同机架的节点。
-
更多副本:随机节点
10:NN和2NN之间的工作机制
-
NameNode
1:基于内存存储 :不会和磁盘发生交换,只存在内存中。持久化NameNode主要功能:
1:接受客户端的读写服务2:收集DataNode汇报的Block列表信息
3: NameNode保存metadata信息包括
文件owership和permissions 文件大小,时间
(Block列表:Block偏移量),位置信息
Block每副本位置(由DataNode上报)。 -
NameNode持久化:
1:NameNode的metadate信息在启动后会加载到内存
2:metadata存储到磁盘文件名为”fsimage”
3:Block的位置信息不会保存到fsimage
4:edits记录对metadata的操作日志。。。redis -
SecondaryNameNode主要功能:
1:(其主要作用就是:合并edit和fsimage)
可自定以时间(默认一个小时)
操作日志中的数据满了(100w次操作)2:根据配置文件设置edits log大小 fs.checkpoint.size 规定edits文件的最大值默认是64MB
3: 请求NameNode是否需要CheckPoint,直接带回 NameNode是否检查结果
4:在SecondaryNameNode内存中合并日志文件和fsimage文件
生成新的fsimage.chkpoint5:.将fsimage.chkpoint拷贝到NameNode中
6:重命名fsimage.chkpoint为fsimage
-
NameNode 和 SecondaryNameNode的工作机制
-
1:secondary namenode会定期将fsimage和edits从namenode上拉取进行合并,
-
2:且在在secondary nemenode上有副本,当namenode节点损坏后,我们可以通过这些副本来还原一定程度上的namenode。
恢复方法 (有两种) -
1:将secondary namenode上的数据复制到namenode上
-
2:
Kill namenode 00000 进程1、清空namenode下name中的fsimage和edtis文件
2、将secondary namenode下的name中的fsimage和edits复制到namenode对应文件夹中
rsync -av hadoop101:/home/enche/software/hadoop- 2.7.7/data/hadoop/dfs/secondaryname/
jinghang@hadoop102 /home/enche/software/hadoop-2.7.7/data/name3、启动namenode
hadoop-daemon.sh start namenode5、访问namenode节点页面,成功
11:DataNode的工作机制
- DataNode
1:本地磁盘目录存储数据(Block),文件形式
2:同时存储Block的元数据信息文件
3:启动DN时会向NN汇报block信息
4:通过向NN发送心跳保持与其联系(3秒一次),如果NameNode 10分钟没有收到DataNode的心跳,则认为其已经lost,并copy其上的block 到其它DataNode。
完结撒花==