Hadoop 架构HDFS, Yarn & MapReduce

什么是Hadoop体系结构?

Hadoop具有主从拓扑。 在这种拓扑中,我们有一个主节点和多个从节点。 主节点的功能是将任务分配给各个从节点并管理资源。 从节点进行实际计算。 从节点存储实际数据,而在主节点上,其存储元数据信息。

Hadoop体系结构包括三个主要层:

  • HDFS (Hadoop Distributed File System)
  • Yarn
  • MapReduce

1、HDFS

HDFS代表Hadoop分布式文件系统。 它提供了Hadoop的数据存储。 HDFS将数据单元分为称为块的较小单元,并以分布式方式存储它们。 它有两个守护程序正在运行。 一个用于主节点– NameNode,另一个用于从节点– DataNode。

a. NameNode and DataNode

HDFS具有主从结构。 名为NameNode的守护程序在主服务器上运行。 它负责命名空间管理并管理客户端对文件的访问。 DataNode守护程序在从属节点上运行。 它负责存储实际的业务数据。 在内部,文件被分成多个数据块,并存储在一组从属计算机上。 Namenode管理对文件系统名称空间的修改。 这些操作如打开,关闭和重命名文件或目录。 NameNode还跟踪块到DataNode的映射。 此DataNodes可以处理来自文件系统客户端的读/写请求。 DataNode还可以根据需要从NameNode创建,删除和复制块。

Hadoop Architecture Diagram

Hadoop是用java语言实现的。 因此,可以在安装Java的计算机上部署DataNode和NameNode。 在典型的部署中,有一台运行NameNode的专用计算机。 集群中的所有其他节点都运行DataNode。 NameNode包含元数据,例如数据节点上块的位置。 并在各种竞争数据节点之间仲裁资源。

b. Block in HDFS

Block是HDFS上最小的存储单元。 它是分配给文件的最小连续存储。 在Hadoop中,我们的默认块大小为128MB或256 MB。

在选择Block大小时应该非常谨慎。 为了解释为什么,以一个大小为700MB的文件为例。 如果我们的Block大小为128MB,则HDFS会将文件分为6个块。 五块128MB和一块60MB。 如果块大小为4KB,会发生什么? 在HDFS中,文件大小将在TB到PB之间。 如果Block大小为4KB,将导致有许多Block。 这将创建巨大的元数据,从而使NameNode过载。 因此,我们必须明智地选择HDFS块大小。

c. Replication Management

为了提供容错能力,HDFS使用副本技术。 其以复制Block并存储在不同的DataNode上。 副本因子决定要存储多少个块副本。 默认情况下为3,但是我们可以配置为任何值。

Hadoop Replication Factor

上图显示了副本技术的工作方式。 假设我们有一个1GB的文件,副本因子为3,那么则需要3GB的总存储空间。

为了维持副本因子,NameNode从每个DataNode收集Block报告。 每当Block复制不足或过度复制时,NameNode就会相应地添加或删除副本。

d. What is Rack Awareness?

Hadoop Architecture

一个机架包含许多DataNode计算机,生产中有多个这样的机架。 HDFS遵循机架感知算法,以分布式方式放置块的副本。 这种机架感知算法可提供低延迟和容错能力。 假设配置的复制因子为3。现在,机架感知算法会将第一个块放置在本地机架上。 它将其他两个块保留在不同的机架上。 如果可能,它在同一机架中最多可以存储两个块。

2. MapReduce

MapReduce是Hadoop的数据处理层。 它是一个软件框架,可让您编写用于处理大量数据的应用程序。 MapReduce以可靠且容错的方式,在低端计算机集群上并行运行这些应用程序 。

MapReduce作业包括许多map任务和reduce任务。 每个任务都处理一部分数据。 这将负载分布在整个群集上。 Map任务的功能是加载,解析,转换和过滤数据。 每个reduce任务都对map任务的输出子集起作用。 Reduce任务将分组和聚合来自map任务的中间数据。

HDFS上存在MapReduce作业的输入文件。 inputformat决定如何将输入文件拆分为input splits。 input splits是输入文件块的面向字节的视图。 此input splits将由map任务加载。map任务在存在相关数据的节点上运行。 数据无需通过网络移动并在本地进行处理。

Hadoop Architecture - MapReduce

a. Map Task

Map任务按以下阶段运行:

a. RecordReader

recordreader将输入拆分成记录。 它将数据解析为记录,但不解析记录本身。 它以键值对的形式向映射器函数提供数据。 通常,键是位置信息,值是组成记录的数据。

b. Map

在此阶段,mapper函数的处理来自记录读取器的key-value对。 并产生零个或多个中间key-value对。

键值对的产生取决于mapper函数。 key通常是reduce函数进行分组操作的数据。 value是在reducer函数中汇总得到最终结果的数据。

c. Combiner

Combiner实际上是一个本地化的reducer,可以在map阶段对数据进行聚合。 它是可选的。 Combiner从mapper获取中间数据并将其汇总。它是在较小范围内一个mapper内完成的。 在许多情况下,这会减少在网络上移动所需的数据量。 例如,移动(Hello World,1)三次,比移动(Hello World,3)消耗更多的网络带宽。 Combiner可提供无与伦比的性能提升。 Combiner不能保证执行。

d. Partitioner

Partitioner从mapper中提取中间key-value对。 它将它们分成shards,每个reduce一个shard。 默认情况下,Partitioner将获取key的哈希值。 Partitioner通过reducer的个数进行模运算:key.hashcode()%(reducers的数量)。 这将key均匀地分布在reducer上。 它还可以确保具有相同值但来自不同mapper的key最终进入相同的reducer。 从每个map任务将分区的数据写入本地文件系统。 并等待reducer拉取。

b. Reduce Task

reduce任务的各个阶段如下:

i. Shuffle and Sort

reducer从 Shuffle 和Sort步骤开始。 此步骤将 Partitioner写入的数据下载到运行reducer的计算机上。 将单个数据分类到一个大数据列表中。 这种排序的目的是将相同的key收集在一起。 框架这样做是为了让我们可以在reduce任务中轻松地对其进行迭代。 此阶段不可自定义。 该框架会自动处理所有内容。 但是,开发人员可以控制如何通过 comparator对象对key进行排序和分组。

ii. Reduce

reducer对每个key group执行一次reduce 函数。 框架会传递函数key和包含与该key有关的所有value的迭代器对象。

我们可以编写reducer以多种方式过滤,聚合和组合数据。 reduce函数完成后,它将为outputformat提供零个或多个键值对。 像mapper一样,reducer根据任务的不同而不同。 其是解决方案的核心逻辑。

iii. OutputFormat

这是最后一步。 它从reducer中获取key-value对,并由 recordwriter将其写入文件。 默认情况下,它用制表符分隔key和value,并用换行符分隔每个记录。 我们可以对其进行自定义以提供更丰富的输出格式。 但是最终数据仍然要写入HDFS。

Hadoop MapReduce Architecture Diagram

3. YARN

YARN或另一个资源调度器是Hadoop的资源管理层。 YARN的基本原理是将资源管理和作业计划/监视功能分离到单独的守护程序中。 在YARN中,只有一个全局ResourceManager和每个应用程序ApplicationMaster。 应用程序可以是单个作业,也可以是作业的DAG。

在YARN框架内,有两个守护程序ResourceManager和NodeManager。 ResourceManager在系统中所有竞争应用程序之间仲裁资源。 NodeManger的工作是监视容器的资源使用情况,并将其报告给ResourceManger。 资源如CPU,内存,磁盘,网络等。

ApplcationMaster与ResourceManager协商资源,并与NodeManger合作执行和监视作业。

Hadoop Architecture

ResourceManger具有两个重要组件– Scheduler和ApplicationManager

i. Scheduler

调度程序负责将资源分配给各种应用程序。 这是纯调度程序,因为它不执行应用程序状态跟踪。 它还不会重新计划因软件或硬件错误而失败的任务。 调度程序根据应用程序的需求分配资源。

ii. Application Manager

以下是ApplicationManager的功能

  • 接受job的提交
  • 协商用于执行ApplicationMaster的第一个容器。 包含诸如CPU,内存,磁盘和网络之类的元素
  • 失败时重新启动ApplicationMaster容器

ApplicationMaster的功能:

  • 与Scheduler协商资源容器
  • 跟踪资源容器状态
  • 监控应用程序进度

通过YARN的联合功能,我们可以将YARN扩展到几千个节点。 此功能使我们可以将多个YARN群集绑定到单个大型群集中。 这样就可以使用独立的群集,将它们组合在一起以完成非常大的工作。

iii. Features of Yarn

a. Multi-tenancy(多租户)

YARN允许在同一Hadoop数据集上使用多种访问引擎(开源或专有)。 这些访问引擎可以是批处理,实时处理,迭代处理等。

b. Cluster Utilization

通过动态分配资源,YARN可以很好地利用群集。 与Hadoop早期版本中的静态map-reduce规则相比,后者减少了集群的使用。

 c. Scalability

任何数据中心的处理能力都在不断扩大。 YARN的ResourceManager专注于调度并应对不断扩展的集群,处理数PB的数据。

d. Compatibility(兼容性)

为Hadoop 1.x开发的MapReduce程序仍可以在此YARN上使用。 而且这不会破坏已经运行的流程。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值