Hadoop——开源分布式计算平台简介

Hadoop——开源分布式计算平台

起源:

        Hadoop 的框架最核心的设计就是:HDFS MapReduce。HDFS 为海量的数据提供了存储,则MapReduce 为海量的数据提供了计算。

特点:

Hadoop 是一个能够对大量数据进行分布式处理的软件框架。Hadoop 以一种可靠、高效、可伸缩的方式进行数据处理。
1)高可靠性。Hadoop 按位存储和处理数据的能力值得人们信赖。

2)高扩展性。Hadoop 是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中

3)高效性。Hadoop 能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。

4)高容错性。Hadoop 能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。

5)低成本。与一体机、商用数据仓库以及QlikView、Yonghong Z-Suite等数据集市相比,hadoop 是开源的,项目的软件成本因此会大大降低。

6)成熟的生态圈(开源、社区活跃参与者众多、设计分布式存储和计算的方方面面、已得到企业界验证)。

Hadoop 版本:


Hadoop 生态系统组成:

Hadoop 生态圈(组件构架):

整个Hadoop 家族由一下几个子项组成:
Hadoop Common:Hadoop 体系最底层的支撑组件,主要提供基础工具包和RPC 框架等,如:配置文件和日志操作等。

HDFS:是Hadoop 应用程序中主要的分布式存储系统(用于存储大数据的平台,提供一个可靠性的存储服务),HDFS 针对海量数据所设计,所以相比传统文件系统在大批量小文件上的优化,HDFS 优化的则是对小批量大型文件的访问和存储。

MapReduce:是一个分布式运算程序的编程框架,是用户开发“基于hadoop 的数据分析应用”的核心框架,用以轻送编写处理海量(TB 级)数据的并行应用程序,以可靠和容错的方式连接大型集群中上万个节点。

Pig:是一个用于大型数据分析的平台,包含了一个用于数据分析应用的高级语言以及评估这些应用的基础设施。Pig 应用的闪光特性在于他们的构架经得起大量的并行,也就是说让他们支撑起非常大的数据集。

ZooKeeper:是Google 的Chubby 一个开源的实现。它是一个针对大型分布式系统的可靠协调系统。ZooKeeper 的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

HBase:是Hadoop 数据库,一个可分布式、可扩展的大数据存储。其核心是Google Big table 论文的开源实现,分布式列式存储。

Hive:是Hadoop 的一个数据仓库系统。

Sqoop:用来将Hadoop 和关系型数据库中的数据相互转移的工具。

Hadoop 内核:

HDFS 简介:
基本原理:
a. 将文件切分成等大的数据块,存储到多台机器上
b. 将数据切分、容错、负载均衡等功能透明化
c. 可将HDFS 看成一个容量巨大、具有高容错性的磁盘
基本架构:

架构说明:
        HDFS 架构采用主从架构(master/slave),一个典型的HDFS 集群包含一个NameNode 节点和多个DataNode 节点。NameNode(主服务器)节点负责整个HDFS 文件系统中的文件的元数据的保管和管理,集群中通常只有一台机器上运行NameNode 实例,DataNode 节点保存文件中的数据,集群中的机其分别运行一个DataNode 实例。
        默认情况下,每个DataNode 都保存了3 个副本,其中两个保存在同一个机架的两个不同的节点上。另一个副本放在不同机架上的节点上。

注解:
a. NameNode:中心服务器(Master | 主节点),维护文件系统树、以及整棵树内的文件目录、负责整个数据集群的管理。

b. DataNode(分布在不同的机架上(Slaver)):
i)在客户端或者NameNode 的调度下,存储并检索数据块,并且定期向NameNode 发送所存储的数据块的列表。(存储实际的数据块,并执行数据块读/写操作)
i)默认情况下,每个DataNode 都保存了3 个副本,其中两个保存在同一个机架的两个不同的节点上。另一个副本放在不同机架上的节点上。

c. HDFS Client:切分,与NameNode 交互、管理、访问HDFS;与NameNode 获取元数据;与DataNode 交互获取数据。

应用场景:
a. 海量数据的可靠性存储                          b. 数据归档

特点:
a. 高容错性                          b. 适合批处                          c. 适合大数据处理

*HDFS 读流程示意图(重点):

a. 使用HDFS 提供的客户端Client, 向远程的Namenode 发起RPC 请求;NameNode 通过查询元数据,找到文件块所在的DataNode 地址。(因为真正的block 是存在Datanode 节点上的,而namenode 里存放了block 位置信息的元数据)

b. Namenode 会视情况返回文件的部分或者全部block 列表, 对于每个block, Namenode 都会返回有该block 拷贝的DataNode 地址;

c. 客户端拿到block 的位置信息后调用FSDataInputStream API 的read 方法并行的读取block 信息,图中4 和5 流程是并发的,block 默认有3 个副本,所以每一个block 只需要从一个副本读取就可以。(客户端Client 会选取离客户端最近的DataNode 来读取block; 如果客户端本身就是DataNode, 那么将从本地直接获取数据)

d. 读取完当前block 的数据后, 关闭当前的DataNode 链接, 并为读取下一个block 寻找最佳的DataNode;

e. 当读完列表block 后, 且文件读取还没有结束, 客户端会继续向Namenode 获取下一批的block 列表;

f. 读取完一个block 都会进行checksum 验证, 如果读取datanode 时出现错误, 客户端会通知Namenode, 然后再从下一个拥有该block 拷贝的datanode 继续读。

*HDFS 写流程示意图(重点):


        客户端要向HDFS 写数据,首先要跟namenode 通信以确认可以写文件并获得接收文件block 的datanode,然后,客户端按顺序将文件逐个block 传递给相应datanode,并由接收到block 的datanode 负责向其他datanode复制block 的副本。
如图:

详细步骤:
1)客户端向NameNode 请求上传文件,并告诉NameNode 上传文件的文件名、文件大小、文件拥有者。NameNode 检查目标文件是否已存在,父目录是否存在。

2)namenode 返回是否可以上传并根据以上信息算出文件需要切成多少块block,以及block 要存放在哪个datanode 上,并将这些信息返回给客户端。

3)client 会先对文件进行切分,比如一个blok 块128m,文件有300m 就会被切分成3 个块,一个128M、一个128M、一个44M 请求第一个block 该传输到哪些datanode 服务器上。

4)namenode 返回3 个datanode 节点(replication 的默认值为3),分别为dn1、dn2、dn3。

5)客户端请求dn1 上传数据,dn1 收到请求会继续调用dn2,然后dn2 调用dn3,(本质上是一个RPC 调用,建立pipeline)将这个通信管道建立完成。

6)dn1、dn2、dn3 逐级应答客户端。

7)客户端开始往dn1 上传第一个block(先从磁盘读取数据放到一个本地内存缓存),以packet 为单位,dn1 收到一个packet 就会传给dn2,dn2 传给dn3;dn1 每传一个packet 会放入一个应答队列等待应答。

8)当一个block 传输完成之后,客户端再次请求namenode 上传第二个block的服务器。(重复执行3-7 步)

补充注意:
1.namenode 实际客户端只上传一个datanode,其余两个是namenode 完成的。让datenote 自己复制的。然后复制完成以后逐级返回结果给namenode.如果2,3datanode 复制失败,再有namenode 分配新的datanode 地址。对于客户端来说默认上传一个datanode 就可以了,其余的由datanode 自己复制。(这样的优势就是快。)

2.datanode 切片是由客户端完成的。datanode 第二三个副本的上传和第一个上传是异步的。

HDFS 与操作系统的文件系统-要素比较:

YARN 简介:

        Yet Another Resource Negotiator(另一种资源协调者),是一种新的Hadoop资源管理器,使得多种计算机框架可以运行在一个集群中。
        YARN 的基本思想是将JobTracker 的两个主要功能(资源管理和作业调度/监控)分离,主要方法是创建一个全局的ResourceManager(RM)和若干个针对应用程序的ApplicationMaster(AM)。
        YARN 分层结构的本质是ResourceManager。
        ResourceManager:这个实体控制整个集群并管理应用程序向基础计算资源的分配。ResourceManager 将各个资源部分(计算、内存、带宽等)精心安排给基础NodeManager(YARN 的每节点代理)。ResourceManager 还与ApplicationMaster 一起分配资源,与NodeManager 一起启动和监视它们的基础应用程序。在此上下文中,ApplicationMaster 承担了以前的TaskTracker 的一些角色,ResourceManager 承担了JobTracker 的角色。(处理客户端请求、启动监控ApplicationMaster、监控NodeManager、资源分配与调度)
        ApplicationMaster 管理一个在YARN 内运行的应用程序的每个实例。ApplicationMaster 负责协调来自ResourceManager 的资源,并通过NodeManager 监视容器的执行和资源使用(CPU、内存等的资源分配)。
        NodeManager 管理一个YARN 集群中的每个节点。


核心思想:

将JobTracker 和TaskTracker 进行分离,它由下面几大构成组件:
a. 一个全局的资源管理器ResourceManager
b.ResourceManager 的每个节点代理NodeManager
c. 表示每个应用的ApplicationMaster
d. 每一个ApplicationMaster 拥有多个Container 在NodeManager 上运行

特点:

1)良好的扩展性、高可用性
2)对多种类型的应用层程序进行统一管理和调度
3)自带了多种用户调度器,适合共享集群环境

                                                                                       (Yarn 资源管理图)

MapReduce 简介:

        MapReduce 是一种编程模型,用于大规模数据集(大于 1TB)的并行运算;是面向大数据并行处理的计算模型、框架和平台(定义)。概念"Map(映射)"和"Reduce(归约)",是它们的主要思想。源于 Google 的 MapReduce 论文(发表于 2004 年 1 月 2),Hadoop MapReduce 是 Google MapReduce 克隆版。MapReduce 设计的一个理念是“计算向数据靠拢”,而不是“数据向计算靠拢”,因为移动数据需要大量的网络传输开销。

Job Tracter 主节点
Task Tracter 每一个从节点

核心功能:

将用户编写的业务逻辑代码和自带默认组件整合成一个完整的 分布式运算程序,并发运行在一个 hadoop 集群上。

特点:

1)良好的扩展性

2)高容错性

3)适合 PB 级以上海量数据的离线处理

执行步骤(运行机制):

Map 操作是可高度并行的

 

 

 

 

发布了81 篇原创文章 · 获赞 41 · 访问量 17万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 黑客帝国 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览