大数据技术原理与应用作业八

大数据技术原理与应用作业八

1. 试述在Hadoop推出之后其优化与发展主要体现在哪两个方面。

Hadoop的优化与发展主要体现在两个方面:一方面是Hadoop资深两大核心组件MapReduce和HDFS的架构设计改进,另一方面是Hadoop生态系统其他组件的不断丰富。通过这些优化和提升,Hadoop可以支持更多的应用场景,提供更高的集群可用性,同时也带来了更高的资源利用率。

2. 试述HDFS1.0中只包含一个名称节点会带来哪些问题。

只包含一个名称节点会存在单点失效的问题。HDFS1.0 采用单点名称节点的设计,不仅会带来单点故障问题,还存在可扩展性、性能和隔离性等问题。

可扩展性:NameNode把整个HDFS文件系统中的元数据信息都保存在自己的内存中,HDFS1.0中只有一个名称节点,不可以水平扩展,而单个名称节点的内存空间是有上限的,这限制了系统中数据块、文件和目录的数目。

性能:整个HDFS文件系统的性能会受限于单个名称节点的吞吐量。

隔离性:单个名称节点难以提供不同程序之间的隔离性,一个程序可能会影响到其他运行的程序。

3. 请描述HDFS HA架构组成组件及其具体功能。

在一个典型的HA集群中,一般设置两个名称节点,其中一个名称节点处于“活跃(Active)”状态,另一个处于“待命(Standby)”状态,如下图所示。处于活跃状态的名称节点负责对外处理所有客户端的请求,而处于待命状态的名称节点则最为备用节点,保存了足够多的系统元数据,当名称节点出现故障时提供快速恢复能力。也就是说,在HDFS HA中,处于待命状态的名称节点提供了“热备份”,一旦活跃节点出现故障,就可以立即切换到待命节点,不会影响到系统的正常对外服务。
大数据技术原理与应用作业八

4. 请分析HDFS HA架构中数据节点如何和名称节点保持通信。

在HDFS联邦中,所有名称节点会共享底层的数据节点存储资源。每个数据节点要向集群中所有的名称节点注册,并周期性地向名称节点发送“心跳“和块信息,报告自己的状态,同时也会处理来自名称节点的指令。

5. 请阐述为什么需要HDFS联邦,即它能够解决什么问题。

采用HDFS联邦的设计方式,可解决单名称节点存在的以下3个问题:

  1. HDFS集群可扩展性。多个名称节点各自分管一部分目录,使得一个集群可以扩展到更多节点,不再像HDFS1.0中那样由于内存的限制制约文件存储数目。
  2. 性能更高效。多个名称节点管理不同的数据,且同时对外提供服务,将为用户提供更高得读写吞吐率。
  3. 良好的隔离性。用户可根据需要将不同业务数据交由不同名称节点管理,这样不同业务之间的影响很小。

6. 请描述HDFS联邦中“块池的概念”,并分析为什么HDFS联邦中的一个名称节点失效,也不会影响到与它相关的数据节点继续为其他名称节点提供服务。

HDFS联邦拥有多个独立的命名空间,其中,每一个命名空间管理属于自己的一组块,这些属于同一个命名空间的块构成一个“块池”(Block Pool)。每个数据节点会为多个块池提供块的存储。可以看出,数据节点时一个物理概念,而块池属于逻辑概念,一个块池是一组块的逻辑集合,块池中的各个块实际上是存储在各个不同的数据节点中的。因此,HDFS联邦中的一个名称节点失效,也不会影响到与它相关的数据节点继续为其他名称节点提供服务。

7. 请阐述MapReduce1.0体系结构中存在的问题。

MapReduce1.0 采用Master/Slave架构设计,包括一个JobTracker和若干个TaskTracker,前者负责作业的调度和资源的管理,后者负责执行JobTracker指派的具体任务。这种架构设计具有一些很难克服的缺陷,具体如下:

  1. 存在单点故障。由JobTracker负责所有MapReduce作业的调度,而系统中只有一个JobTracker,因此会存在单点故障问题,即这个唯一的JobTracker出现故障就会导致系统不可用。
  2. JobTracker”大包大揽“导致任务过重。JobTracker既要负责作业的调度和失败恢复,又要负责资源管理分配。执行过多的任务,需要消耗巨大的内存开销,这也潜在地增加了JobTracker失败的风险。正因如此,业内普遍总结出MapReduce1.0支持的主机数目的上限为4000个。
  3. 容易出现内存溢出。在TaskTracker端,资源的分配并不考虑CPU、内存的实际使用情况,而只是根据MapReduce任务的个数来分配资源,当两个具有较大内存消耗的任务被分配到同一个TaskTracker上时,很容易发生内存溢出的情况。
  4. 资源划分不合理。资源(CPU、内存)被强制等量划分为多个”槽“(Slot),槽又被进一步划分为Map槽和Reduce槽两种,分别供Map任务和Reduce任务使用,彼此之间不能使用分配给对方的槽,也就是说,当Map任务已经用完Map槽时,即使系统中还有大量剩余的Reduce槽,也不能拿来执行Map任务,反之亦然。这就意味着,当系统中只存在单一的Map任务或者Reduce任务时,会造成资源的浪费。

8. 请描述YARN架构中各组件的功能。

组件 功能
ResourceManager ✦ 处理客户端请求
✦ 启动/监控ApplicationMaster
✦ 监控NodeManager
✦ 资源分配与调度
ApplicationMaster ✦ 为应用程序申请资源,并分配给内部任务
✦ 任务调度、监控与容错
NodeManager ✦ 单个节点上的资源管理
✦ 处理来自ResourceManager的命令
✦ 处理来自ApplicationMaster的命令

9. 请描述在YARN框架中执行一个MapReduce程序时,从提交到完成需要经历的具体步骤。

  1. 用户编写客户端应用程序,向YARN提交应用程序,提交的内容包括ApplicationMaster程序、启动ApplicationMaster的命令、用户程序等。
  2. YARN中的RecourseManager负责接收和处理来自客户端的请求。接到客户端应用程序请求后,ResourceManager里面的调度器会为应用程序分配一个容器。同时,ResourceManager的应用程序管理器会与该容器所在的NodeManager通信,为该应用程序在该容器中启动一个ApplicationMaster。
  3. ApplicationMaster被创建后会首先向ResourceManager注册,从而使得用户可以通过ResourceManager来直接查看应用程序的运行状态。
  4. ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请资源。
  5. ResourceManager以”容器“的形式提出申请的ApplicationMaster分配资源,一旦ApplicationMaster申请到资源后,就会与该容器所在的NodeManager进行通信,要求它启动任务。
  6. 当ApplicationMaster要求容器启动任务时,它会为任务设置好运行环境(包括环境变量、JAR包、二进制程序等),然后将任务启动命令写到一个脚本中,最后通过在容器中运行该脚本来启动任务。
  7. 各个任务通过某个RPC协议向ApplicationMaster回报自己的状态和进度,让ApplicationMaster可以随时掌握各个任务的运行状态,从而可以在任务失败时重启任务。
  8. 应用程序运行完成后,ApplicationMaster向ResourceManager的应用程序管理器注销并关闭自己。若ApplicationMaster因故失败,ResourceManager中的应用程序管理器会监测到失败的情形,然后将其重新启动,直到所有的任务执行完毕。

10. 请对YARN和MapReduce1.0框架进行优劣势对比分析。

  1. 大大减少了承担中心服务功能的ResourceManager的资源消耗。MapReduce1.0中的JobTracker需要同时承担资源管理、任务调度和任务监控等三大功能,而YARN中的ResourceManager只需要负责资源管理,需要消耗大量资源的任务调度和监控重启工作则交由ApplicationMaster来完成。由于每个作业都有与之关联的独立的ApplicationMaster,所以,系统中存在多个作业时,就会同时存在多个ApplicationMaster,这就实现了监控任务的分布化,不再像MapReduce1.0那样监控任务只集中在一个JobTracker上。
  2. MapReduce1.0既是一个计算框架,又是一个资源管理调度框架,但是只能支持MapReduce编程模型。而YARN则是一个纯粹的资源调度管理框架,在它上面可以运行包括MapReduce在内的不同计算框架,默认类型是MapReduce。因为,YARN中的ApplicationMaster是可变更的,针对不同的计算框架,用户可以采用任何编程语言自己编写服务于该计算框架的ApplicationMaster。比如编写一个面向MapReduce计算框架的ApplicationMaster,从而使得MapReduce计算框架可以运行在YARN框架之上。同理,还可以编写面向Spark、Storm等计算框架的ApplicationMaster,从而使得Spark、Storm等计算框架也可以运行在YARN框架之上。
  3. YARN中得资源管理比MapReduce1.0更加高效。YARN采用容器为单位进行资源管理和分配,而不是以槽位单位,避免了MapReduce1.0中槽的闲置浪费情况,大大提高了资源的利用率。

11. 请分别描述Pig、Tez和Kafka的功能。

1. Pig

Pig是Hadoop生态系统的一个组件,提供了类似SQL的Pig Latin语言(包含Filter、GroupBy、Join、OrderBy等操作,同时也支持用户自定义函数),允许用户通过编写简单的脚本来实现复杂的数据分析,而不需要编写复杂的MapReduce应用程序,Pig会自动把用户编写的脚本转换成MapReduce作业在Hadoop集群上运行,而且具备对生成的MapReduce程序进行自动优化的功能,所以用户在编写Pig的时候,不需要具体关心程序的运行效率,这就大大减少了用户编程时间。

2. Tez

Tez是Apache开源的支持DAG作业的计算框架,直接源于MapReduce框架,核心思想是将Map和Reduce两个操作进一步进行拆分,即Map被拆分成Input、Processor、Sort、Merge和Output,Reduce被拆分成Input、Shuffle、Sort、Merge、Processor和Output等,经过分解后的这些元操作可以进行*任意组合产生新的操作,经过一些控制程序组装后就可形成一个大的DAG作业。

通过DAG作业的方式运行MapReduce作业,提供了程序运行的整体处理逻辑,就可以除去工作流当中多余的Map阶段,减少不必要的操作,提升数据处理的性能。Hortonworks把Tez应用到数据仓库Hive的优化中,使得性能提升了约100倍。

3. Kafka

Kafka是由Linkedln公司开发的一种高吞吐量的分布式发布订阅消息系统,用户用过Kafka系统可以发布大量的消息,同时也能实时订阅消费信息。Kafka设计的初衷是构建一个可以处理海量日志、用户行为和网站运营统计等的数据处理框架。

上一篇:MapRedrec入门(wordcount单词计数(本地运行))


下一篇:Hive架构设计总结