赞
踩
Hadoop框架遵循分布式计算模型,其将对大数据集的计算分配到一组节点上,每个节点针对数据集的一部分进行计算。
分布式计算的核心需求:
(1)扩展性:机器数量的增长应该带来计算和存储能力的线性增长。
(2)容错性:如果分布式集群中的一个节点失败,主要的计算进程本身不能失败或受到不利影响。
(3)可恢复性:如果作业或其一部分失败,不应该有数据丢失。
Hadoop针对分布式计算需求的给出的解决方案:
(1)数据存储在所有或大部分集群节点上,将计算流向数据,而非数据流向计算,这样使得Hadoop能够有效处理海量数据;
(2)开发人员专注于数据和算法,分布式的底层细节由Hadoop负责。
(3)作业容错性高,当集群中的一个或多个节点失败以及作业自身的组件(被称为任务)失败时,并不影响作业本身的完成。
Hadoop的两个组件:Hdfs(存储组件)和Yarn(处理组件)。
Hadoop集群是一个使用以分布式文件系统(HDFS)和集群资源管理器(Yarn)为基础的Hadoop软件的计算机集合。这个集合可以仅包含少数几个节点,也可
以包含超过10000个节点,无论规模大小,在Hadoop集群中的所有节点都是同等运行的。
在实际情况下,Hadoop通过后台运行的一组守护进程来实现存储和处理。用户不必关心这些进程,因为它们在网络间执行输入/输出,无须用户干预。在
Linux系统中,每一个守护进程都在单独的Java虚拟机(JVM)上运行。
主节点:这些节点运行协调集群工作的服务。客户端联系主节点以执行计算任务。在每个集群中,可能有几个主节点,从3~6个不等,具体取决于集群的大小。
工作节点: 这些节点在主节点上运行的进程之下运行。集群的大多数节点都是工作节点。工作节点是存储数据与执行具体计算的节点。
(1)HDFS服务:
HDFS服务负责管理HDFS存储。
(2) Yarn服务:
与HDFS类似,Yarn也有一些服务运行在主节点和工作节点上。
HDFS是位于底层服务器存储之上的分布式文件系统,其与基础存储系统有许多相似之处。分布式文件系统通过由网络连接的许多计算机来存储海量数据,并利用内置冗余特性保障数据安全。HDFS是为快速、容错处理而设计的,因此它可以使用廉价的硬件来进行存储。基于这样的设计,HDFS能够对大数据实现流式访问。
最初,MapReduce是Hadoop中,可以使用的唯一编程引擎,其现在在Hadoop环境中也是非常受欢迎的。MapReduce能够处理大数据。它避免了使用NFS等存储系统时,由于网络和存储I/O而造成的速度减慢。大数据被分布在集群节点上,但MapReduce将其视为单一文件系统。因此,每个磁盘从本地磁盘(HDFS,而不是本地文件系统)读取其所有数据,这避免了网络传输数据。
在一个小型Hadoop集群中,可能只有少量的服务器。更大的集群中会有数以百计的服务器。无论集群大小如何,Hadoop将数据存储在所有的集群文件系统上,集群中的每个节点都存储部分数据。
HDFS具有一些特性,这些特性使其成为大规模分布式处理的理想选择下面介绍HDFS如何支持大数据集的高效处理。
通常非Hadoop的数据库是比较小的,处理的数据及往往只有数TB或只能处理少量的数据文件。Hadoop可以处理PB级别的数据以及数千个数据文件。
Hadoop依赖于大量服务器,可以在这些服务器之间并行工作。集群中的服务器和存储故障是可以预料的,系统不会被非功能存储单元(甚至故障服务器)影响。默认情况下,数据在Hadoop中被复制三次,这意味着HDFS中的每个数据块都存储在三个不同的节点上。可以减少或增加默认的“复制因子”。还可以对不同的数据集使用不同的复制级别。例如文件级复制。
传统数据库主要用于对数据进行快速访问,而不是进行批处。Hadoop设计的初衷就是为了批处理(尽管较新的产品已经使用了其他处理范例,如交互式SQL、迭代处理、搜索处理和流处理),并提供对数据集的流式访问。
与传统数据库不同,Hadoop数据文件采用了一次写入多次读取的访问模型。可更新数据库中可能出现的数据一致性问题在Hadoop文件系统中却不存在,因为只有单个写入程序可以随时写入文件。
HDFS使用户能够将数据存储在文件中,这些文件被分割成多个块。由于Hadoop旨在处理大数据,因此HDFS块的大小远大于典型关系型数据库的块大小。默认块大小为128MB,还可以配置为高达512MB。
在由多个节点组成的Hadoop集群中,一个或多个节点充当主节点。主节点运行Hadoop的关键服务,例如NameNode和ResourceManager。Hadoop集群中的其余服务器是工作节点,通常称为DataNodes。这些节点实际负责数据块的存储。工作节点还运行NodeManagers(Yarn)。不需要在每个节点上都运行NodeManager, 但大多数都会运行。
工作节点是HDFS文件系统中实际存储集群数据的节点。HDFS数据分布在集群的节点之间,但它们作为单个统一的文件系统向外界提供服务,可以从集群中的任一节点对HDFS文件系统进行访问。可以运行一个只有一个NameNode的集群,NameNode的工作是维护和存储与HDFS文件系统有关的元数。在生产集群中,通常使用两个NameNode,一个用作活动的NameNode,另一个作为备用主机。当活动的NameNode由于各种原因而失败时,备用NameNode会作为活动的NameNode使用。NameNode和DataNode一起协同工作来处理HDFS数据的写入和读取。
NameNode通过执行以下任务来管理文件命名空间。
DataNode根据NameNode所发送的指令执行以下功能。
HDFS文件系统组织结构与基础文件系统(例如Linux ex3 或 ex4文件系统)不同。HDFS采用基于块的文件系统,其中的文件被分解成块。
集群中的文件和服务器之间不是一对一的关系。这意味着文件文件可以由多个块组成,所有这些块很可能没有存储在同一台机器上。
一个文件的块随机分布在整个集群中。这使Hadoop能够支持大于单个磁盘大小的文件。如果文件块存储在多个服务器上,文件的每个块将被复制三次,即使一台机器失效,也不会有任何影响。
HDFS使用户能够将数据存储在文件中,这些文件被分割成多个块。由于Hadoop旨在处理大数据,因此HDFS块大小远大于关系型数据库使用的块大小。
不同于常规关系型数据库的中的块(通常为4-16M),Hadoop使用的最小块大小为64MB,通常使用128MB或256MB的块大小。大块尺寸可以提供以下优点:
HDFS中的文件以类似于Linux或Unix系统中的文件组织方式组织,其中有一个基于树的目录和文件层次结构。可以在HDFS中使用类似于Linux或UNIX文件系统中的操作命令。
由于HDFS采用一次写入多次读取的模式,一旦将文件写入HDFS,就无法修改其内容。也不能使用现有名覆盖文件。可以执行以下操作,因为它们仅仅是元数据操作,并不触及文件本身的内容:
HDFS需要处理存储在非常大的文件中的大量数据。在处理大型HDFS文件时,MapReduce以记录边界将文件分割成多个片段,从而可以通过启动Mapper程序同时从大文件中读取数据。可拆分数据格式允许文件在记录边界被正确分割成多个片段。
在对HDFS进行处理时,Hadoop更喜欢使用二进制格式而不是文本格式,因为二进制格式会阻止不完整的记录被写入文件,方法是捕获并忽略由于数据损坏而可能创建的错误记录或不完整记录。一个好的HDFS文件格式离不开数据压缩功能。
一种使用较多的流行二进制格式是Avro容器文件格式,它支持可拆分,也支持压缩。另一种常见的HDFS数据格式是SequenceFile,它是一种可拆分的文件格式,以键/值列表的形式来表示。用户也可以通过使用序列化来自定义数据格式,这样可以以任意格式写入数据。
当客户端应用程序需要将数据写入HDFS时,将在客户端本地的临时文件中进行初始写入。当客户端完成写入并关闭文件,或当临时文件的大小越过块边界时,Hadoop将创建一个文件并为其分配数据块。临时文件的内容随后被写入新的HDFS文件。写入第一个块之后,将两个副本(基于默认复制因子3)分别写入集群中的另外两个DataNode。只有当Hadoop成功将所有数据块副本都放置在目标节点中时,写操作才算成功。
数据复制是Hadoop的关键功能 之一,因为Hadoop基于此提供了集群的容错能力。由于Hadoop维护了多个数据副本,因此存储在集群中的数据很难丢失。(HDFS会自动复制未经复制的数据块)。
每个Hadoop集群都有一个NameNode(高可用性环境中可能有两个一个是Active NameNode,一个是Standby NameNode)。NameNode上保存着内存中的所有元数据,以便快速访问,但它也会将相同的信息保留在磁盘上。以下信息由NameNode保存在磁盘上的fsimage文件中:
Secondary NameNode定期执行对fsimage文件的检查。检查意味着Secondary NameNode会合并fsimage和edits文件。Secondary NameNode也被称为检查节点,因为它为NameNode执行检查服务。由于NameNode还将文件系统名称空间存储在内存中,并将其同步到NameNode的命名空间,因此也称其为备份NameNode。但是,它不为NameNode提供任何真正的备份功能。
由于NameNode负责维护文件系统命名空间和元数据,所以是集群中不可缺少的部分。Hadoop 2通过提供NameNode High Availability(HA)来克服Hadoop 1中NameNode单点的缺点。在Hadoop 2中,可以创建一个Standby NameNode来提供高可用性服务。使用Standby NameNode获取高可用性,不需要运行Secondary NameNode。
虽然HDFS在集群的一部分节点之间传递数据,但数据传递并不是自动的。当你首次创建集群并加载数据,或向其中添加新数据时,传入的数据会自动通过集群分发,以便所有的DataNodes都具有大致相同数量的数据。
然而,随着时间的推移,节点上的数据还是很有可能出现不平衡。一些节点的空间占用百分比会比其他节点高。此外,向集群中添加新节点时,HDFS不会自动将某些数据移动到新节点的存储磁盘上。这些磁盘可以被写入数据,但只能写入HDFS的新数据。如果不执行任何操作,新磁盘将始终保持较低的使用百分比。
当出现这种情况时,可以使用Hadoop提供的balancer工具来平衡数据。
YARN是一个用于管理在网络中的多台计算机上执行的分布式应用程序的框架。YARN管理Hadoop集群上的所有资源。除了MapReduce v2外,YARN还支持其他分布式处理框架,如Impala、Spark和Giraph。在Hadoop环境中运行的所有应用程序,包括MapReduce、Spark、Tez以及其他应用程序,都使用YARN执行它们的工作。
YARN是Hadoop的处理层,它包含资源管理器和作业调度程序。YARN使得多个处理框架可以在相同的Hadoop集群上运行,例如:
YARN依赖于一个集群范围的ResourceManager,它是Hadoop集群中运行的所有应用程序进行资源申请时的权威仲裁器。ResourceManager与在集群中的每个工作节点(DataNode)上运行的NodeManager(NM)协同工作。单个ResourceManager和节点上的NodeManager组成数据计算框架。
每个在YARN上运行的应用程序都有一个与之关联的ApplicationMaster(AM)。ApplicationMaster主要用来与ResourceManager协商资源,并与NodeManagers一起执行作为每个应用程序一部分的任务,
相关主要术语:
YARN使用容器,容器是用于应用处理的表示特定数量的内存和其他资源(如CPU)的逻辑结构。所有的YARN应用程序任务都运行在容器中。每个Hadoop作业包含多个任务,每个任务都运行在各自的容器中。当任务启动时,容器生效。当任务完成时,容器被杀死,其资源被分配给其他任务。
可以配置容器以满足资源和处理需求。同样,Hadoop也具有关于容器配置的默认值(例如,每个容器为8GB RAM)。
ResourceManager为每个应用程序分配容器。NodeManager管理容器的生命周期,ResourceManager负责调度容器。
每个YARN应用程序都运行在一个或多个容器中。默认情况下每个容器都有一定量的内存,也可以自定义内存大小。map和reduce容器通常使用的内存范围为1~4GB,但如果需要,也可以配置更多的内存。作为管理员,实际上无法指定甚至预测作业的单个容器在哪里运行,其完全由应用层进行管理。
任务数量以及可以在任何时候运行的YARN应用程序的数量受到集群能够分配的容器数量的限制。容器总数受分配给YARN的总内存量以及分配给YARN的处理器总数的限制。
每个集群中有一个ResourceManager,且执行如下工作:
Hadoop2集群中的每个DataNode运行NodeManager守护进程来执行YARN的功能(DataNode还运行一个DataNode守护进程来执行HDFS的功能)。每个节点上的NodeManager代理执行以下功能:
每个YARN应用程序都有一个专用的ApplicationMaster(与作业相同)。ApplicationMaster的主要功能有:
与所有YARN进程一样,ApplicationMaster在YARN容器内运行。实际上它运行在应用程序启动时的第一个容器内。一旦ApplicationMaster在应用程序的第一个容器内开始运行,它将与ResourceManager协商获取容器来执行应用中的mappers和reducers。之后会将ResourceManager分配的容器资源呈现给运行在每个DataNode上的NodeManager。
ApplicationMaster负责以容器资源容器的形式向ResourceManager请求资源以支持应用程序。它与运行在每个DataNode上的NodeManager服务协调工作以运行资源容器并监视如何使用分配给它们的资源。
ApplicationMaster的主要职责之一是提供资源容错。
当ApplicationMaster向ResourceManager发出资源请求以运行其map和reduce任务时,请求是具体的。每个资源请求指定以下内容:
完整集群中都有一个JobHistoryServer服务。JobHistoryServer归档YARN所有的作业指标及元数据,并通过JobHistoryServer Web UI公开。没有JobHistoryServer,集群也能良好运行,但我们将无法轻松访问作业日志和作业历史记录。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。