2020.12.24课堂笔记(Hadoop阶段考试参考答案)

一、不定项选择题(1-12题每题2分,13题3分,共27分)下面那个程序负责HDFS数据存储(C)?A NameNodeB JobtrackerC DatanodeD secondaryNameNodeE tasktracker关于SecondaryNameNode哪项是正确的(C)?A 它是NameNode的热备。B 它对内存没有要求。C 它的目的是帮助NameNode合并编辑日志,减少NameNode启动时间。D SecondaryNameNode应与NameNode部署到
摘要由CSDN通过智能技术生成

一、不定项选择题(1-12题每题2分,13题3分,共27分)

  1. 下面那个程序负责HDFS数据存储(C)?
    A NameNode
    B Jobtracker
    C Datanode
    D secondaryNameNode
    E tasktracker

  2. 关于SecondaryNameNode哪项是正确的(C)?
    A 它是NameNode的热备。
    B 它对内存没有要求。
    C 它的目的是帮助NameNode合并编辑日志,减少NameNode启动时间。
    D SecondaryNameNode应与NameNode部署到一个节点。

  3. Client端上传文件的时候下列哪项是正确(B)?
    A 数据经过NameNode传递给DataNode
    B Client端将文件切分为Block,依次上传。
    C Client只上传数据到一台DataNode,然后由NameNode负责Block复制
    D 当某个DataNode失败,客户端不会继续传给其它的DataNode

  4. 下面那些选项正确描述了HBase的特性(ABCD)?
    A 高可靠性
    B 高性能
    C 面向列
    D 可伸缩

  5. 以下描述错误的是(D)
    A HDFS是解决分布式存储问题的
    B MapReduce是解决计算问题的
    C HBase可以实时地随机访问超大规模的数据集
    D HBase是基于文档存储的非关系型数据库

  6. Hadoop是由何种语言编写的(C)
    A Scala
    B Erlang
    C Java
    D Python

  7. 以下哪个不是Hadoop运行的模式(B).
    A 单机版
    B 嵌入式
    C 伪分布式
    D 完全分布式

  8. Hadoop分布式文件系统(HDFS)具有(AC)的特性。
    A 适合数据批量处理
    B 数据处理能力极强
    C 最大化吞吐率
    D 允许计算向数据迁移
    E 适合多线程问题

  9. HDFS系统主要包括(AB)两类节点。
    A 元数据节点
    B 数据节点
    C 元节点
    D 子节点

  10. Hadoop Block Size 是否可以修改(B)
    A 不可以
    B 可以

  11. Zookeeper的角色有哪些?(ABD)
    A Leader
    B Follower
    C QuorumPeerMain
    D Observer

  12. 在开发分布式计算job的时候,可以去掉reduce阶段,这一说法是__A__的
    A 正确
    B 错误

  13. 写出以下组件的默认端口号,填写到对应的位置(每个组件只对应一个默认端口号)(版本为hadoop2.6.0-CDH5.14.2)
    a) HDFS Namenode UI: 50070
    b) ResourceManagerUI: 8088
    c) fs.defaultFS: 9000

二、简答题(共52分)

1.MapReduce中数据倾斜问题产生原因及解决方案?(6分) (出现原因:2 分,解决方案 4 分.答案不唯一, 合理即可)

出现数据倾斜的主要原因是在于 key 的分布不均,如果能过将 key 进行充分打散,让数据根据 key 值,平均分配到 reducer 中,就解决该问题:
1)设置一个 hash 份数 N,用来对条数众多的 key 进行打散。
2)对有多条重复 key 的那份数据进行处理:从 1 到 N 将数字加在 key 后面作为新key
3)上一步之后,key 被平均分散到很多不同的 reduce 节点。

2.请讲述一下Hadoop Shuffle原理过程(越详细越好)(5分)

shuffle 阶段可以分为 Map 端的 shuffle 和 Reduce 端的 shuffle。
一、Map 端的 shuffle
Map 端会处理输入数据并产生中间结果,这个中间结果会写到本地磁盘,而不是 HDFS。每个 Map 的输出会先写到环形缓冲区中(默认大小为 100M),当写入的数据达到设定的阈值时,系统将会启动一个线程将缓冲区的数据写到磁盘,这个过程叫做 spill。
在 spill 写入之前,会先进行二次排序,首先根据数据所属的 partition 进行排序,然后每个 partition 中的数据再按 key 来排序。partition 的目是将记录划分到不同的Reducer 上去,以期望能够达到负载均衡,以后的 Reducer 就会根据 partition 来读取自己对应的数据。接着运行 combiner(如果设置了的话),combiner 的本质也是一个Reducer,其目的是对将要写入到磁盘上的文件先进行一次处理,这样,写入到磁盘的数据量就会减少。最后将数据写到本地磁盘产生 spill 文件(spill 文件保存在{mapred.local.dir}指定的目录中,Map 任务结束后就会被删除)。
最后,每个 Map 任务可能产生多个 spill 文件,在每个 Map 任务完成前,会通过多路归并算法将这些 spill 文件归并成一个文件。至此,Map 的 shuffle 过程就结束了。
二、Reduce 端的 shuffle
Reduce 端的 shuffle 主要包括三个阶段,copy、sort(merge)和 reduce。
首先要将 Map 端产生的输出文件拷贝到 Reduce 端,但每个 Reducer 如何知道自己应该处理哪些数据呢?因为 Map 端进行 partition 的时候,实际上就相当于指定了每个 Reducer 要处理的数据(partition 就对应了 Reducer),所以 Reducer 在拷贝数据的时候只需拷贝与自己对应的 partition 中的数据即可。每个 Reducer 会处理一个或者多个 partition,但需要先将自己对应的 partition 中的数据从每个 Map 的输出结果中拷贝过来。
接下来就是 sort 阶段,也成为 merge 阶段,因为这个阶段的主要工作是执行了归并排序。从 Map 端拷贝到 Reduce 端的数据都是有序的,所以很适合归并排序。最终在 Reduce 端生成一个较大的文件作为 Reduce 的输入。
最后就是 Reduce 过程了,在这个过程中产生了最终的输出结果,并将其写到HDFS 上。

3.简述一下hdfs写文件和读文件流程(6分)

(1)写数据流程
1.客户端发出请求 hdfs dfs -put /etc/profile /qf/data
2.namenode 查看维护的目录结构,检查/qf/data 是否存在,如不存在直接报错”no such file or directory“,如存在返回给客户端同意上传文件请求,将操作写入日志文件
3.客户端请求上传第一个块,询问 namenode 块的存储位置
4.namenode 查看自己的 datanode 池,返回给客户端一个 datanode 列表
5.客户端发出请求建立 pipeline
6.客户端先把文件写入缓存,达到一个块的大小时,会在客户端和第一个datanode 建立连接开始流式的传输数据,这个 datanode 会一小部分一小部分(4K)的接收数据然后写入本地仓库,同时会把这些数据传输到第二个 datanode,第二个datanode 也同样一小部分一小部分的接收数据并写入本地仓库,同时传输给第三个datanode (在流式复制时,逐级传输和响应采用响应队列来等待传输结果。队列响应完成后返回给客户端)
7.第一个数据块传输完成后会使用同样的方式传输下面的数据块直到整个文件
上传完成。
8.整个文件完成,namenode 更新内存元数据
(2)读数据流程
1.客户端向 namenode 发起 RPC 调用,请求读取文件数据。
2.namenode 检查文件是否存在,如果存在则获取文件的元信息(blockid 以及对应的 datanode 列表)。
3.客户端收到元信息后选取一个网络距离最近的 datanode,依次请求读取每个数据块。客户端首先要校检文件是否损坏,如果损坏,客户端会选取另外的 datanode 请求。
4.datanode 与客户端建立 socket 连接,传输对应的数据块,客户端收到数据缓存到本地,之后写入文件。
5.依次传输剩下的数据块,直到整个文件合并完成。

4.为什么hdfs不适合存小文件?(4分)

HDFS 天生就是为存储大文件而生的,一个块的元数据大小大概在 150 字节左右,存储一个小文件就要占用 150 字节的内存,如果存储大量的小文件,快就将内存耗尽,而整个集群存储的数据量很小,失去了 HDFS 的意义,可以将数据合并上传,或者将文件 append 形式追加在 HDFS 文件末尾。

5.hadoop中的combine的作用?(3分)

每一个 map 都可能会产生大量的本地输出,Combiner 的作用就是对 map 端的输出先做一次合并,以减少在 map 和 reduce 节点之间的数据传输量,以提高网络 IO 性能,是 MapReduce 的一种优化手段之一。

6.说一下对hadoop的一些理解(提示:可以从Hadoop的概念、组件、作用方面回答) (5分)

<
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值