Hadoop简介


前言

数据日趋庞大和多样,读写数据的性能出现了瓶颈,并且用户应用对实时性和响应时间要求越来越高,处理和分析数据使用的模型越来越复杂,计算量指数级上升。因此我们需要设这么一种架构,能够:

  • 存储大量数据
  • 快速的处理大量数据
  • 从大量数据中进行分析

Hadoop是什么?

Hadoop是一个开源的分布式计算和存储框架,由Apache基金会开发和维护。
Hadoop为庞大的计算机集群(集群:多个服务器组成的一个集体)提供可靠的、可伸缩的应用层计算存储支持,它允许使用简单的编程模型跨计算机集群分布式处理大型数据,并且支持在单台计算机和几千台计算机之间进行扩展。
Hadoop使用Java开发,所以可以在不同硬件平台的计算机上部署和应用。

Hadoop的 优势?

  1. 高可靠性:底层维护多个数据副本,即使Hadoop某个计算节点出现故障,也不会导致数据的丢失。
  2. 高扩展性:可以方便地扩展数以千计的节点。
  3. 高效性:在MapReduce的思想上,Hadoop是并行工作的,可以加快任务处理速度。
  4. 高容错性:能够自动将失效的任务重新分配。

Hadoop的发展、组成?

  1. Hadoop 1.x:为了解决两个问题,一个是海量数据如何存储,一个是海量数据如何计算。该版本的Hadoop核心设计就是HDFS(解决了海量数据存储的问题)、MapReduce(解决了海量数据如何计算)、Common(辅助工具)。
  2. Hadoop 2.x:解决了Hadoop 1.x存在的单点故障和内存受限问题。该版本增加了资源管理器YARN,HDFS块的大小由64MB扩展为128MB。
  3. Hadoop 3.x:在组成上和Hadoop 2.x没有任何区别。
    Hadoop组成

Hadoop生态圈组件及其作用?

1. Sqoop:Sqoop是一款开源的工具,主要用于在大数据框架(Hadoop、Hive等)与传统的数据库(MySQL)间进行数据的传递,可以将一个关系型数据库中的数据导进Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
2. Flume:Flume是一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据。
3. Kafka:Kafka是一种高吞吐量的分布式发布/订阅消息系统。
4. Spark:Spark是当前非常流行的开源大数据内存计算框架,可以基于Hadoop上存储的大数据进行计算。
5. HBase:HBase是一个分布式的、面向列的开源数据库,HBase不同于一般的关系型数据库,它是一个适合于非结构化数据存储的数据库。
6. Hive:Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射成一张数据库表,并提供简单的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行。
7. ZooKeeper:它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、服务式同步、组服务等。

HDFS架构概述?

HDFS主要由3个组件构成,分别是NameNode、SecondaryNode和DataNode。
HDFS是以Master/Slave模式运行的,其中,NameNode和SecondaryNameNode运行在Master节点上,而DataNode运行在Slave节点上,所以HDFS集群一般由一个NameNode、一个SecondaryNameNode和许多DataNode组成,其架构如下:
HDFS架构

在HDFS中,文件是被分成块来进行存储的,一个文件可以包含许多块,每个块存储在不同的DataNode中。
当一个客户端请求读取一个文件时,它需要先从NameNode中获取文件的元数据信息,然后从对应的数据节点上并行地读取数据块。

NameNode

NameNode是主服务器,负责管理文件系统的命名空间以及客户端对文件的访问。当客户端请求数据时,仅仅从NameNode中获取文件的元数据信息,具体的数据传输不经过NameNode,而是直接与具体的DataNode进行交互。

文件的元数据信息记录了文件系统中的文件名和目录名,以及它们之间的层级关系,同时也记录了每个文件目录的所有者及其权限,甚至还记录每个文件由哪些块组成,这些元数据信息记录在文件fsimage中。
当系统初次启动时,NameNode将读取fsimage中的信息并保存到内存中。

这些块的位置信息是由NameNode启动后从每个DataNode获取并保存在内存当中的(动态重建),这样既减少了NameNode的启动时间,又减少了读取数据的查询时间,提高了整个系统的效率。

SecondaryNameNode

定时与NameNode进行同步,具体操作为:定期合并文件系统镜像和编辑日志,然后把合并后的传给NameNode,替换其镜像,并清空编辑日志。
NameNode失效后仍需要手工将其设置成主机。

NameNode和SecondaryNameNode的区别与联系?

区别:
NameNode负责管理整个文件系统的元数据,以及每一个文件锁对应的数据块信息;
SecondaryNameNode主要用于定期合并命名空间镜像和命名空间镜像的编辑日志。
联系:
SecondaryNameNode保存了一份和NameNode一直的镜像文件fsimage和编辑日志edits;
在NameNode发生故障时,可以从SecondaryNameNode恢复数据。

DataNode

DataNode是HDFS 中的从服务器,负责存储数据块,也为客户端提供数据块的读写服务,同时也响应NameNode的相关指令,如完成数据块的复制、删除等。
DataNode会定期发送心跳信息给NameNode,告知NameNode当前节点存储的文件块信息。
当DataNOde在执行块存储操作时,DataNode还会与其他DataNode通信,复制这些块到其他DataNode上实现冗余。

HDFS的读写机制

读文件

HDFS通过RPC调用NameNode获取文件块的位置信息,并对每个块返回所在的DataNode的地址信息,然后再从DataNode获取数据块。
操作步骤如下:

  1. 客户端发起读文件的请求;
  2. NameNode将文件对应的数据块信息及每个块的位置信息,包括每个块的所有副本的位置信息,都传送给客户端;
  3. 客户端受到数据块地址信息后,会根据网络拓扑选择离它最近的DataNode通信,并行地读取数据块,如果失败,则选取另一个,并对故障的DataNode做标记,避免与它重复通信,并发送NameNode故障节点的信息。

写文件

当客户端发送写文件请求时,NameNode负责通知DataNode创建文件,在创建之前会检查客户端是否有允许写入数据的权限,通过检测后,NameNode会向日志文件中写入一条创建文件的操作记录。
操作步骤如下:

  1. 客户端在向NameNode发送写请求之前,先将数据写入本地的临时文件中;
  2. 待临时文件达到系统设置的块大小时,开始向NameNode请求写文件;
  3. NameNode会检查集群中每个DataNode的状态信息,获取空闲的节点,并在检查客户端权限后创建文件,返回客户端一个数据块的id及其对应的DataNode的地址列表,列表中包含副本存放的地址;
  4. 客户端在获取DataNode相关信息后,将临时文件中的数据块写入列表中的第一个DataNode,DataNode接收后,将数据写入到本地磁盘,并以流水线的形式写入和备份到所有的DataNode中,每个DataNode收到数据后会向前一个结点发送确认信息。
  5. 当客户端收到DataNode的确认信息时,会向NameNode发送确认信息,,如果4中任何一个DataNode失败,客户端会告知NameNode,将数据备份到新的DataNode中。

YARN架构概述?

YARN是Hadoop集群资源管理系统,主要由ResourceManager、NodeManager、ApplicationManager和Container等几个组件构成。YARN架构如下:
YARN架构
ResourceManager:是一个全局的资源管理器,负责整个系统的资源管理和分配,它根据程序的需求,调度优先级以及可用资源情况,动态分配特定节点来运行应用程序(处理客户端请求),它与每个节点的NodeManager和每一个应用程序的ApplicationMaster协调工作(监控NodeManager和ApplicationMaster)。

NodeManager:负责本节点程序的运行,以及资源的管理和监控(管理单个节点的资源),向ResourceManager汇报本节点的资源使用情况和Container运行状态,处理来自ApplicationMaster的命令,包括Container启动、停止等请求。

ApplicationMaster:ApplicationMaster负责与Scheduler协商合适的Container,跟踪应用程序的状态,以及监控它们的进度(任务的监控和容错)。每个应用程序都有自己的ApplicationMaster,负责与ResourceManager协商资源,并且和NodeManager协同工作来执行和监控任务。

Container:YARN中资源的抽象,封装了本地节点的多维度资源,如内存、CPU、磁盘、网络等。

MapReduce架构概述?

MapReduce的思想核心是“分而治之,先分后合”,即将一个大的、复杂的工作或任务,拆分成多个小的任务,并型处理,最终进行合并,适用于大量复杂的、时效性不高的任务处理场景。

MapReduce由两步分组成,分别是Map和Reduce两部分,Map负责“分”,把复杂的任务分解为若干个简单的任务来进行并行处理;Reduce负责“合”,将map阶段的结果进行全局汇总。
MapReduce
MapReduce主要是先读取文件数据,然后进行Map处理,接着Reduce处理,最后把处理的结果写到文件中。

Hadoop的默认块大小?

HDFS中的文件在物理上是分块存储,块的大小可以通过配置参数来规定,默认的大小是128MB。
HDFS块大小设置与磁盘的传输速度紧密相关。当寻址时间为传输时间的百分之一时,为最佳状态。一般的寻址时间约为10ms,则传输时间约为1s,而目前磁盘的传输速度普遍为100MB/s,所以将块的大小设置为128MB最为合理。
随着磁盘的传输速度的提升,可以适当调整块的大小。

Hadoop启动时需要启动哪些进程?作用分别是什么?

1. NameNode :它是hadoop中的主服务器,管理文件系统名称空间和对集群中存储的文件的访问,保存有metadata。
2. SecondaryNameNode: 它不是namenode的冗余守护进程,而是提供周期检查点和清理任务。帮助NN合并editslog,减少NN启动时间。
3. DataNode :它负责管理连接到节点的存储(一个集群中可以有多个节点)。每个存储数据的节点运行一个datanode守护进程。
4. ResourceManager(JobTracker): JobTracker负责调度DataNode上的工作。每个DataNode有一个TaskTracker,它们执行实际工作。
5. NodeManager(TaskTracker): 执行任务。
6. DFSZKFailoverController: 高可用时它负责监控NN(NameNode)的状态,并及时的把状态信息写入ZK。它通过一个独立线程周期性的调用NN上的一个特定接口来获 取NN的健康状态。FC也有选择谁作为Active NN的权利,因为最多只有两个节点,目前选择策略还比较简单(先到先得,轮换)。
7. JournalNode :高可用情况下存放namenode的editlog文件。

参考
http://c.biancheng.net/view/6502.html
https://www.w3cschool.cn/hadoop/flxy1hdd.html
https://www.nowcoder.com/

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值