2023年12月21日发(作者:)

习题

一、选择题

1.下列有关 Hadoop 的说法正确的是( ABCD )。

A .Hadoop 最早起源于 Nutch

B

.Hadoop

HDFS

的理念来源于谷歌发表的分布式文件系统(

GFS

)的论文 C .Hadoop 中 MapReduce 的思想来源于谷歌分布式计算框架 MapReduce 的论文

D.Hadoop

是在分布式服务器集群上存储海量数据并运行分布式分析应用的一个开源的 软件框架

2.使用 Hadoop 的原因是( ABCD )。

A.方便:

Hadoop

运行在由普通商用机器构成的大型集群上或者云计算服务上

B.稳健:

Hadoop

致力于在普通商用硬件上运行, 其架构假设硬件会频繁失效,

Hadoop

可以从容地处理大多数此类故障

C

.可扩展:

Hadoop

通过增加集群节点,可以线性地扩展以处理更大的数据集

D.简单:

Hadoop

允许用户快速编写高效的并行代码

3.Hadoop 的作者是( B )。

A

.Martin Fowler B

.Doug Cutting C

.Kent Beck D

.Grace Hopper

4.以下关于大数据特点的描述中, 不正确的是(

ABC

)。

A

. 巨大的数据量 B .多结构化数据 C .增长速度快

D

.价值密度高

二、简答题

1.Hadoop 是一个什么样的框架?

答:Hadoop

是一款由

Apache

基金会开辟的可靠的、可伸缩的分布式计算的开源软件。 它

允许使用简单的编程模型在跨计算机集群中对大规模数据集进行分布式处理。

2.Hadoop

的核心组件有哪些?简单介绍每一个组件的作用。

答:核心组件有 HDFS 、MapReduce 、YARN 。

HDFS ( Hadoop Distributed File Sy,stdoop 分布式文件系统)是 Hadoop 的核心组件之 一,作为最底层的分布式存储服务而存在。它是一个高度容错的系统,能检测和应对硬件故障, 可在低成本的通用硬件上运行。

MapReduce 是 Hadoop 的一个分布式计算框架, 也是一种大规模数据集并行运算的编程模型,

主要用于处理海量数据的运算。 MapReduce 主要包括 map (映射)和 reduce(规约)两部份。它 是一个分布式运算程序的编程框架,其核心功能是将用户编写的业务逻辑代码和自带的默认组 件整合成一个完整的分布式运算程序,并发运行在

Hadoop

集群上。

Hadoop YARN 是开源 Hadoop 分布式处理框架中的资源管理和作业调度框架,主要负责将

系统资源分配给在

Hadoop

集群中运行的各种应用程序,并调度在不同集群节点上执行的任务

3.简述Hadoop

生态体系,并列举此生态体系中涉及的技术。

答: 当今的

Hadoop

已经成长为一个庞大的生态体系, 随着生态体系的成长,新浮现的项目

也越来越多,其中不乏一些非

Apache

主管的项目,这些项目对

Hadoop

做了更好的补充或者更

高层的抽象,涉及的技术有

HBase、Hive、Sqoop、Pig、Flume、Oozie、ZooKeeper、kafka、Spark

等。

4.简单列举几个 Hadoop 的应用场景。

答: (

1

)在线旅游

(

2

) 电子商务

(

3

) 挪移数据

(4)能源发现

(

5

)节约能源

(

6

)图象处理

(

7

)医疗保健

(

8

) IT 安全

(

9

)欺诈检测

(

10

)基础设施管理

习题

一、填空题

1.Hadoop 集群中的节点 DataNode 负责 HDFS 的数据存储。

2.Hadoop 集群中的 Jobtracker 程序通常与 NameNode 在一个节点启动。

3.Hadoop

的运行模式有 独立(本地)运行模式 、伪分布式运行模式 和彻底分布式运行

环境 。

4.Hadoop

集群搭建中常用的

4

个配置文件有

core-site,xm、l mapred-

site,.xm和l 。

二、操作题

1.根据 2.2节伪分布式安装的安装及配置步骤, 在自己计算机上搭建伪分布式

Hadoop

集群

环境,环境搭建完毕后通过命令及

Web

访问方式查看集群的启动情况。

答:具体步骤见章节内容。

2.

根据

2.3

节彻底分布式安装的安装及配置步骤,根据自己计算机的实际配置情况分析是 否可以搭建至少

2

台节点的彻底分布式

Hadoop

集群环境, 如果配置允许则搭建彻底分布式集群 环境,搭建完毕后通过命令或者

Web

访问方式查看集群的启动信息。

答:具体步骤见章节内容。

习题

一、填空题

1.由于

NameNode

宕机,导致无法对外提供服务,可通过搭建

HDFS HA

来解决。

2.YARN 的高可用主要是解决 ResourceManager单点故障 。

3.由于

HDFS

存储数据量过大,导致

NameNode

内存不足,可以通过搭建 联邦

来解决。

二、简答题

1.Hadoop 是如何解决高可用问题的?

答:对于 Hadoop 集群, RM 和 NN 都是 S“ingle Point of Fai(lu单re点故障)”,起着“一票否 决”的作用,所以Hadoop 对 NN 和 RM 都提供了 HA 选项,采用的都是 Active/Standb 措施来 达到 HA 的要求。

所谓 Active/Standb是y一种热备方案, 这种方案中, “在位”的行使职权 ctive 的管理者惟独一个,但有一个作为备份(即 Standby)的候补管理者时刻准备着,当 Active的管 理者发生故障, Standby的管理者就立刻顶上, 并进行业务的接管,不用暂时开机和初始化。

2.简述 ZooKeeper 的功能及其在 Hadoop 高可用中起到的作用。

答:ZooKeeper

主要用来解决分布式应用中时常遇到的一些数据管理问题, 如统一命名服务、

状态同步服务、集群管理、 分布式应用配置项的管理等。

在 Hadoop 的 HA 集群中,使用 ZooKeeper 的存储功能可保存 NameNode 的状态信 息,ZooKeeper会监听两个 NameNode 的工作状态,当状态发生改变时,由其协调 Active与 Standby 状态的切换。

3.YARN

是如何解决高可用问题的?

答: Hadoop 在 2.4版本之后,针对 YARN 引入了 HA 机制,也就是 ResourceManager 的

Active/Standb。yYARN 的 HA 与 HDFS 的 HA 基本相同,但 YARN HA 能够支持多个 Standby的

ResourceManager

(

Hadoop 2.x的 HDFS HA

只允许有一个

Standby的 NameNode

,Hadoop 3.x之 后,允许有多个 Standby 的 NameNode ),Active和 Standby 的状态可以通过控制台命令手动切 换,也可以自动切换。

4.Hadoop 联邦解决了什么问题?

答: Hadoop 集群启动后, NameNode 在内存中保存了文件和块的映射关系,这意味着对于

一个拥有大量文件的超大集群来说, 由于数据量太大, NameNode 的内存中可能也无法放下这么

多的对应关系, 内存将成为限制系统横向扩展的瓶颈。 Hadoop 2.x版本中引入了 HDFS 联邦机制

来解决这个问题

一、选择题

1.数据块(block)的大小由(

A

)参数决定。

A

.ize B

.ation C

.tFS D

2.创建 HDFS 新目录 /“newdi 的命令为(D )。

A

.hadoop mkdir /newdir B

.hadoop fs mkdir /newdir

C

.hadoop fs mkdir newdir D

.hadoop fs mkdir /newdir

二、简答题

简述

HDFS

的写数据流程。

答: (

1

) 客户端首先与

NameNode

建立连接,发起文件上传请求。

(

2

)

NameNode

检查上传路径是否存在,目标文件是否存在, 权限是否允许。 若无问题则修

改命名空间,并反馈允许上传。

(

3

) 客户端收到允许上传反馈后再次请求第一个 Block 所在的节点名。

( 4 ) NameNode 根据机架感知原理选取三个节点( DataNode1、DataNode2、DataNode3 )并

将其反馈给客户端。

(

5

) 客户端从获取的三个节点中选取一个节点建立管道 (

Pipelin)e连接, 请求上传数据。 节 点

1

收到请求后与节点

2

获取连接,节点

2

收到请求后与节点

3

获取连接。

(6)连接全部建立成功后,客户端开始向第一个节点传输第一个 Block。该 Block 数据以

Packet 为单位进行传输。数据的校验则是以更小的

Chunk

单位进行的。数据在客户端本地和

DataNode 端都有读取和写入的缓存队列。每一次 Packet在 Pipeline上的传输都需要反向应答。 直到写完预定的 Block 为止。节点 1、节点

2

和节点

3

之间也会以同样的方式同步传输。

(7)当第一个 Block传输完毕后,客户端会再次发送请求到

NameNode

,将整个流程再次重

复。

三、编程题

编写程序完成

HDFS

文件系统根目录下所有文件的列举。

Configuration conf = new Configuration();

FileStatus[] listStatus = atus(new Path(path));

for(FileStatus fs:listStatus) {

..println(h())

);

习题

一、填空题

1.YARN 提供的调度器策略有 FIFO Scheduler(FIFO 调度器 )、Capacity Schedule 容 量调度器)和 Fair Schedule(r公平调度器 ) .

2.YARN 采用的体系架构是主从结构,其中主节点是 ResourceManager ,从节点是

NodeManager 。

3.ResourceManager 的两个重要组件是 Scheduler和 ApplicationsManager。

4.在 NodeManager 中封装内存、CPU 、磁盘、网络等资源的是 Container 。

二、简答题

1.简述共享集群模式的优点。

答:

( 1 )资源利用率高

( 2 )运维成本低

( 3)数据共享

2.简述 ApplicationMaster的主要作用。

答:

( 1 )为运行应用向 ResourceManager 申请资源。

( 2 )在 Job 中对 Task 实现调度。

( 3)与 NodeManager 通信以启动或者住手任务。

( 4 )监控所有任务的运行情况,并在任务失败的情况下重新为任务申请资源以重启任

3.简述 YARN 的工作流程。

答:

( 1 )用户编写客户端应用程序, 向 YARN 中提交应用程序, 其中包括 ApplicationMaster 程序、启动 ApplicationMaster的命令、用户程序等。

( 2 ) ResourceManager 接到客户端应用程序的请求,会为该应用程序分配一个

Container, 同 时 ResourceManager 的 ApplicationManager 会 与 该 容 器 所 在 的

NodeManager 通信,要求它在这个 Container中启动一个 ApplicationMaste。r (

3)ApplicationMaster被创建后首先向 ResourceManager 注册, 这样用户可以直接通 过

ResourceManager 查看应用程序的运行状态,然后它将为各个任务申请资源,并监 控它的运行状态,直到运行结束,即重复步骤 4 ~步骤 7。

( 4 ) ApplicationMaster采用轮询的方式,通过 RPC 协议向 ResourceManager 申请和 领取资源。

( 5 )一旦 ApplicationMaster申请到资源, 就会与该容器所在的 NodeManager 通信, 要求它启动任务。

习题

一、 填空题

1.MapReduce 执行过程中,数据都是以 key、value的形式进行传递的。

2.整个MapReduce 作业的生命周期是由 ApplicationMaste来r管理的。

3.整个MapReduce 作业的资源分配是由 ResourceManager来管理的。

二、简答题

1.简述 MapReduce 的执行过程。

答:在

map

阶段,系统会将数据拆分成若干个“分片”s

li)t,分片完成后,再将这些“分片” 数据以键-值方式传递给 map 进行处理, map 和 reduce都以键-值形式作为输入和输出。 作为 map 端的输入,默认情况下,键是字符的位移,值是当前行的数据;此键-值对会作为参数被陆续传 递给

map

端的处理程序,直到数据全部传递完成。

map

方法产生输出时,经过分区和排序后将 其写入磁盘。

在 reduce端的, reduce端会通过多个复制线程去“拉取”不ap 节点输出的数据文件,并 对这些数据文件进行排序和合并, 合并之后的文件被传入 reduce方法中, reduce方法执行后, 数 据将被输出到文件系统,通常是

HDFS

2.简述 shuffle过程。

答: ( 1 ) map 端

map

任务产生输出时,基于效率的考虑,输出数据不会直接写到磁盘上,而是先写入一

个缓冲区中, 此缓冲区默认大小为

100MB

,当写入的数据达到缓冲区的阈值(默认为

80%

) 时,

会将缓冲区中的数据溢写(spil)l到磁盘,生成一个文件,在写入磁盘文件之前,会对这部份数

据进行分区, 然后对每一个分区中的数据按键进行排序, 然后写入磁盘中。 随着

map

任务的执行,

可能会产生多个溢写文件, 这些文件在任务结束执行前, 会合并为一个已分区且每一个分区都已排 序的完整的文件,并保存在本地的磁盘中。

( 2 ) reduce 端

reduce端并不会等待所有map 任务结束再去获取map 端输出的数据, reduce端的一个线程会定

期问询 ApplicationMaste,r一旦有 map 任务结束,reduce端就开始复制数据。 reduce会启动若干复制 线程,以并行的方式从各个map

节点复制数据。reduce节点通常不会复制map

节点整个的输出文件,

而是只复制属于自己的分区数据,复制完成所有map

的数据后,会将各部份数据再次进行合并,合

并前会进行必要的排序,以保持数据的完整性。

3.简述本地化的含义。

答:map

任务有本地化的局限, 意思是

map

任务普通情况下都会运行在分片所在的节点上,

这样的好处是可以不用跨节点传输数据,从而大大提高了程序运行效率。

4.简述数据分片过程。

答:在

map

阶段,系统会将数据拆分成若干个“分片”s

li)t,这里所说的“分片”只是逻辑上 的切分,并非真正物理上的切分,每一个分片的大小默认就是一个块的大小。例如,假设初始设定 一个块的大小为

128MB

,如果有两个文件,一个

50MB

,一个

150MB

,则一共会被划分成

3

个 分片,

50MB 的划分成一个, 150MB 划分成两个,分别是 128MB 和 22MB 。

5.简述 YARN 的 MapReduce 的资源分配过程。

答:当 MapReduce 作业启动后,会通知 YARN ,并由 YARN 的 ResourceManager 在

NodeManager 的管理下分配一个容器 ( Containe ,然后在这个容器中启动 ApplicationMaste进r

程。

MapReduce

作业的

ApplicationMaste是r一个

Java程序,

它的主类是

MRAppMaster

ApplicationMaste启r动后,首先会做一定的初始工作, 然后会分析MapReduce 作业的规模,

如果规模足够大,则再次向 ResourceManager请求容器用于 map 和 reduce任务的执行。对于 map

任务, 根据数据本地化的要求,会尽可能地将容器分配到数据所在节点,而 reduce任务则不会

考虑。默认情况下,每一个 map 和 reduce任务都被分配了 1024MB 的内存和一个虚拟 CPU 内核,

容器启动后,会拉取任务所需的相关的配置信息、打包好的MapReduce

JAR

文件以及来自分

布式缓存的文件到当前节点, 然后开始运行map

或者 reduce任务。

6.简述 InputFormat和 OutputFormat的作用。

答: ( 1 ) InputFormat负责创建输入分片并将它们分割成记录

( 2 ) OutputFormat 主要用于描述输 出数据 的格 式, 它 能够将用户提供 的

key/value对

写入特定格式的文件中

习题

一、选择题

1.Writable接口中进行序列化写操作的方法为(

A

)。

A

.write B

.readFields C

.writeFields D

.read

2. r成新记录的添加的方法为( C )。

A

.write B

.new C

.append D

.add

二、简答题

列举 和ngText类型的区别。

答: ( 1 ) Text对象的 charAt方法返回的是当前位置字符对应的 Unicode编码的位置, String 对象返回的是当前位置对应的字符(char类型)。

三、编程题

实现自定义序列化类,要求该类可以实现以下数据的序列化。

编号 姓名 年龄

String String Byte

public class People implements Writable{

private String id;

private String name;

private byte age;

@ Override

public void readFields(DataInput in) throws IOException {

id=F();

name=F();

age =te();

}

@ Override

public void write(DataOutput out) throws IOException {

(es());

(es());

(age);

}

}

习题

一、选择题

1.Hadoop 3.x是基于( C )版本的 JDK 进行编译的。

A

.JDK 1.6 B

.JDK 1.7 C

.JDK 1.8 D

.JDK 1.9

2.Hadoop 2.x版本中 HDFS 默认的 NameNode rpc监听端口号是( B ),Hadoop 3.x中

将此默认端口号改为了(

B

)。

A

.9000 9820 B

.8020 9820 C

.50070 8020 D

.50010 50070

3.Hadoop 的 NameNode rpc 监听端口可以在配置文件( C )中进行配置。

A

C

. D

4.以下不属于 Hadoop 3.x新特性的是( D )。

A .引入了

EC

技术

B

.JDK

进行了升级

C .实现了

DataNode

内部负责均衡 D .实现了

HA

集群

二、填空题

1.EC 技术的全称是 Erasure Codin,g 是 Hadoop HDFS 3.x 版本以上新增的功能。

2.在较老版本的 Hadoop 集群中, NameNode 是 HDFS 集群中的单点故障。 每一个集群惟独一

NameNode

,并且如果该计算机或者进程不可用,则整个集群将不可用。

3.Hadoop 2.x 版本中 HDFS 默认的 NameNode HTTP UI 端口号是 50070,Hadoop 3.x版本

中将此默认端口号改为了

9870。

三、简答题

1.Hadoop 3.x相比 Hadoop 2.x都有哪些新的特性?

答: ( 1 ) Hadoop 2.x版本是基于 JDK 1.7进行编译的,而 Hadoop 3.x所有的 Hadoop JARs 都是 针对

JDK 1.8编译的。

(

2

)

HDFS 3.x

不少改进采用了

EC

技术,且支持数据的擦除编码

( 3 ) Hadoop 3.x引入了 YARN Timeline Service( YARN 时间轴服务) v.2,创建 v.2是为了应 对

v.1的两个主要挑战: 提高时间轴服务的可伸缩性和可靠性、通过引入流和聚合来增强可用性。

(4)在 Hadoop 3 中允许用户运行多个备用的 NameNode 。

( 5 ) DataNode 内部负载均衡

(6)端口号的改变

( 7 ) Shell脚本重写

( 8 ) GPU 和 FPGA 支持

2.Hadoop 3.x支持的 NameNode 和传统的 Hadoop HA 架构相比有什么优势?

答:在 Hadoop 3 中允许用户运行多个备用的 NameNode

3.Hadoop 3.x的 DataNode 内部负载均衡功能如何使用?

答:

Hadoop 3.x

通过新的内部

DataNode

平衡功能来处理内部负载均衡,具体是通过

HDFS Disk Balancer CLI( HDFS 磁盘平衡命令行接口)来实现的,实现 Disk Balance功r能,首 先需要创建操作计划,然后在

DataNode

上执行该计划。操作计划通常是由一组语句组成的, 计 划中描述两个磁盘之间应挪移多少数据。 使用磁盘平衡功能前应该注意在默认情况下,集群上未 启

用 磁 盘 平 衡 器 。 要 启 用 磁 盘 平 衡 功 能 , 必 须 在 配 置 文 件 中 将 为

true。

习题

一、填空题

1.Cloudera Manager的主要组件包括 Server

Agent

Management

Database、

Cloudera

Repositor和y Client。s

2.ClouderaManager

提供的管理功能有 批量自动化部署节点 、 可视化的参数配置 、 智能

参数验证以及优化 和 权限管理 。

3.Cloudera

Manager提供的监控功能有 服务监控 、 主机监控、 行为监控、 事件活动、报警

和 日志和报告 。

二、简答题

1.简述 Cloudera Manager的主要特点。

答:

(

1

)大数据处理相关服务安装过程自动化,部署时间从几周缩短到几分钟。

(

2

)提供集群范围内的主机和正在运行的服务的实时视图。

(

3

)提供了单个中央控制台,方便在整个集群中进行配置更改。

(

4

) 整合了各种报告和诊断工具,可以优化集群的性能和利用率, 提高服务质量,提高合规

性并降低管理成本。

2.分别简述 service和 service instan的ce概念。

答: Service(服务) 是 ClouderaManager 中的托管功能类别,有时也被称为服务类型, 这些服务运行在集群中, 可能是分布式的, 也可能是单节点的, 如 MapReduce 、HDFS 、YARN

Spark。

Service Instan(c服e务实例 ) 即在 Cloudera Manager集群中运行的服务的实例。

3.分别简述 role、role instanerole grou的p概念。

Role(角色) 是指 service中的一类功能,有时也被称为角色类型。例如,HDFS

服务中的角

色有

NameNode

、SecondaryNameNode

、DataNode

Balancer。

Role Instanc(e角色实例)是指 Cloudera Manager中,在主机上运行的角色的实例,它通常 会映射到

UNIX

进程中,我们可以通过 jps命令对其进行查看。

在 Cloudera Manager中, Role Group(角色组)是指角色实例的一组配置属性,这是一种将

配置分配给一组角色实例的机制。

三、上机题

1.根据 9.4节,完成 Cloduera Manager和 CDH 的离线部署,搭建 CDH 集群环境。 答:见章节内容

2.在 Cloudera Manager管理菜单中启动 HDFS HA 和 YARN HA 。

答:见章节内容

习题

一、填空题

1.Avro Schema

的基本类型中表示空值的是

null

,表示

8

位无符号字节序列的是

bytes。

2.Avro Schema 的复杂类型中 record类型定义 record名称的属性是 name ,限定名称的属

性是

namespace

3.定义 Avro Schema 类型的属性是 type ,定义 JSON 数组的属性是 fields 。

二、简答题

1.简述 Apache Avro 的主要功能。

答: (

1

)丰富的数据结构。

(

2

)一种紧凑、快速的二进制数据格式。

(

3

)容器文件,用于存储持久性数据。

(

4

)远程过程调用。

(

5

)与动态语言的简单集成。读取或者写入数据文件,使用或者实现

RPC

协议均不需要代码生

成。代码生成是可选的优化,仅对于静态类型的语言值得实现。

2.简述

Avro

序列化与反序列的过程。

答: ( 1 )定义 Schema

(2) 基于定义的 Schema 自动创建 Java Bean类

(3) 通过 DatumWriter实现序列化

( 4 )通过 DatumReader 实现反序列化

三、上机题

按照要求完成以下操作。

( 1 )定义 Student的 Schema ,包括 sid(学号)、name (姓名)、age (年龄)属性。

]

}

( 2 )分别使用 avro-tools ja和r maven 自动创建 。

java -jar /path/to/ compile schema ./( 3)创建 Student测试对象,并将其数据序列化到磁盘中。

S

D atumWriter studDatumWriter

new

=

SpecificDatumWriter();

D ataFileWriter dataFileWriter = new DataFileWriter(studDatumWriter); d

(student);

();

(

4

)将上一题保存在磁盘中的文件反序列化为对象。

DatumReader studDatumReader = new

SpecificDatumReader();

D ataFileReader dataFileReader = new DataFileReader( new

Student stud = null;

w hile (t()) {

stud = (stud);

n(stud);

}