Hadoop简介及HDFS

版权声明:Designed By JiaMingcan https://blog.csdn.net/qq_41571900/article/details/83932577

1.Hadoop简介

Hadoop是Apache基金会开发的分布式系统基础架构。开创者是Lucene–Doug Cutting,而Google是hadoop的思想之源(GFS–>HDFS,Map-Reduce–>MR,BigTable–>HBase)。
目前主流的是2.0x版本的Hadoop,它由HDFS、Mapreduce、Yarn、Core四个部分组成。

Hadoop 的优势

1)高可靠性:因为 Hadoop 假设计算元素和存储会出现故障,因为它维护多个工作数据副
本,在出现故障时可以对失败的节点重新分布处理。
2)高扩展性:在集群间分配任务数据,可方便的扩展数以千计的节点。
3)高效性:在 MapReduce 的思想下,Hadoop 是并行工作的,以加快任务处理速度。
4)高容错性:自动保存多份副本数据,并且能够自动将失败的任务重新分配。

Hadoop 组成

1)Hadoop HDFS:一个高可靠、高吞吐量的分布式文件系统。
2)Hadoop MapReduce:一个分布式的离线并行计算框架。
3)Hadoop YARN:作业调度与集群资源管理的框架。
4)Hadoop Common:支持其他模块的工具模块(Configuration、RPC、序列化机制、日志操作)。

2.HDFS

HDFS架构

在这里插入图片描述

这种架构主要由四个部分组成,分别为 HDFS Client、NameNode、DataNode 和 Secondary
NameNode。下面我们分别介绍这四个组成部分。
1)Client:就是客户端。
(1)文件切分。文件上传 HDFS 的时候,Client 将文件切分成一个一个的 Block,然后进行存储。
(2)与 NameNode 交互,获取文件的位置信息。
(3)与 DataNode 交互,读取或者写入数据。
(4)Client 提供一些命令来管理 HDFS,比如启动或者关闭HDFS。
(5)Client 可以通过一些命令来访问 HDFS。
2)NameNode:就是 master,它是一个主管、管理者。
(1)管理 HDFS 的名称空间。
(2)管理数据块(Block)映射信息
(3)配置副本策略
(4)处理客户端读写请求。
3)DataNode:就是 Slave。NameNode 下达命令,DataNode 执行实际的操作。
(1)存储实际的数据块。
(2)执行数据块的读/写操作。
4)Secondary NameNode:并非 NameNode 的热备。当 NameNode 挂掉的时候,它并不能马上替换 NameNode 并提供服务。
(1)辅助 NameNode,分担其工作量。
(2)定期合并 Fsimage 和 Edits,并推送给 NameNode。
(3)在紧急情况下,可辅助恢复 NameNode。

HDFS读/写操作

在这里插入图片描述
客户端在读取数据时,会有一个就近原则,挑选最近的datenode来读取数据。

在这里插入图片描述
在写数据时,因为副本数默认为3,所以第一个副本在client所在的节点,第二个副本在第一个副本所在的机架的随机节点上,第三个副本在不同机架的随机节点。这里体现了HDFS的高容错性。

DataNode的工作机制

在这里插入图片描述
这里需要注意的是datanode向namenode注册之后,每3s返回一次心跳;若10分钟namenode没有收到来自datanode的心跳消息,则判定datanode死亡;datanode每小时上报所有的块消息给namenode。还有datanode的block中的数据有校验和,它会在读取数据时,通过orc奇偶校验判断数据是否损坏,保证了数据的完整性。

HDFS的高可用

可以通过两个NameNode实现避免单点故障导致的服务中断。
若要实现高可用,元数据的管理方式需要改变,在之前是存储在namenode,可以通过secondrynamenode来帮助namenode恢复数据、整合数据。需要改变为,两个namenode都存储有元数据,但是只有active状态的namenode来实现写edits,共享的edits可以放在jounalnode中。
但是上面说的这种方式,如果一台namenode宕机了,另一台机器还需要我们手动来从standby状态转为active状态。所以要通过zookeeper这个提供协调服务的软件,namenode会在zookeeper中维护一个持久会话,如果这个会话中断了,zookeeper就知道该namenode发生了故障,立即通知另一台namenode转换为active提供服务。每台运行namenode的机器也运行了zkfc的进程,该进程对namenode进行监控,并可以获得znode锁,保证了只有一个namenode为active。
在这里插入图片描述

总结

   通过以上对于Hadoop的简介可以看出来,Hadoop其实就是一个分布式的大数据处理架构平台,如今Hadoop已经成为一个生
态圈,它的生态圈中有许多组件,可以帮我们存储海量的数据,也可以帮助我们对海量的数据进行处理分析。
   而HDFS是Hadoop生态圈中的一个很厉害的组件,它是一个分布式文件存储系统,可以使用很多廉价的机器组成一个强大的分布
式集群,为我们的以后处理的数据提供了一个存储数据的平台,就目前来说,主流的spark并没有自身的文件存储功能,还是需要
依靠HDFS来提供,在之后所学到的HIVE、HBase、sqoop、flume等,都有面向HDFS的接口,它是Hadoop生态圈中不可缺少的一
部分。
   它是有多台廉价机器组成的集群,所以它能够提供给我们海量的存储空间。它的容错机制为我们存储数据提供了保障,防止某台
机器发生故障导致数据丢失。但是它的缺点也很明显,不能像我们存储在本地那样可以随意修改,只支持一个线程去修改,而且不适
合去存储很多小文件。因为在每次namenode启动时,会将fsimage加载到内存中,小文件元数据信息太多会浪费namenode的内
存,但正因为namenode记录着元数据信息,我们读取或写数据的时候,我们并不需要知道文件存储在哪台datanode,我们只需要
对文件进行拉取或者写入操作就行,方便了我们的操作。
   但对于刚学习Hadoop的人们,没必要配置HA,配置全分布就行。因为HA确实很耗费资源,会导致以后hive之类以MR为底层的
计算过程耗时比较长。

										 summed up by JiaMingcan
										 转载请署名:JiaMingcan

猜你喜欢

转载自blog.csdn.net/qq_41571900/article/details/83932577