一、不定项选择题(1-12题每题2分,13题3分,共27分)
-
下面那个程序负责HDFS数据存储(C)?
A NameNode
B Jobtracker
C Datanode
D secondaryNameNode
E tasktracker -
关于SecondaryNameNode哪项是正确的(C)?
A 它是NameNode的热备。
B 它对内存没有要求。
C 它的目的是帮助NameNode合并编辑日志,减少NameNode启动时间。
D SecondaryNameNode应与NameNode部署到一个节点。 -
Client端上传文件的时候下列哪项是正确(B)?
A 数据经过NameNode传递给DataNode
B Client端将文件切分为Block,依次上传。
C Client只上传数据到一台DataNode,然后由NameNode负责Block复制
D 当某个DataNode失败,客户端不会继续传给其它的DataNode -
下面那些选项正确描述了HBase的特性(ABCD)?
A 高可靠性
B 高性能
C 面向列
D 可伸缩 -
以下描述错误的是(D)
A HDFS是解决分布式存储问题的
B MapReduce是解决计算问题的
C HBase可以实时地随机访问超大规模的数据集
D HBase是基于文档存储的非关系型数据库
解析:基于键值对
-
Hadoop是由何种语言编写的(C)
A Scala
B Erlang
C Java
D Python -
以下哪个不是Hadoop运行的模式(B).
A 单机版
B 嵌入式
C 伪分布式
D 完全分布式 -
Hadoop分布式文件系统(HDFS)具有(AC)的特性。
A 适合数据批量处理
B 数据处理能力极强
C 最大化吞吐率
D 允许计算向数据迁移
E 适合多线程问题
BD是MapReduce
-
HDFS系统主要包括(AB)两类节点。
A 元数据节点
B 数据节点
C 元节点
D 子节点 -
Hadoop Block Size 是否可以修改(B)
A 不可以
B 可以 -
Zookeeper的角色有哪些?(ABD)
A Leader
B Follower
C QuorumPeerMain
D Observer -
在开发分布式计算job的时候,可以去掉reduce阶段,这一说法是(A)的
A 正确
B 错误 -
写出以下组件的默认端口号,填写到对应的位置(每个组件只对应一个默认端口号)(版本为hadoop2.6.0-CDH5.14.2)
a) HDFS Namenode UI: 50070
b) ResourceManager UI: 8088
c) fs.defaultFS: 9000或8020
二、简答题(共52分)
- MapReduce中数据倾斜问题产生原因及解决方案?(6分)
--原因:主要是key分配不均,其次机器配置可能不同
--解决方案:key打散添加随机值,具体字段有空值单独处理,加盐等处理
- 请讲述一下Hadoop Shuffle原理过程(越详细越好)(5分)
map缓冲区溢写前分区排序,然后溢写文件,对分区文件合并
reduce 到map端拉取对应分区的数据,再次合并处理
详细见链接:mapreduce过程解析
- 简述一下hdfs写文件和读文件流程(6分)
详细见链接:hdfs读写流程 - 为什么hdfs不适合存小文件?(4分)
每个块会占用元数据空间,存储大量小文件使得namenode内存空间占用较多
- hadoop中的combine的作用?(3分)
在map端局部聚合,相当于本地的reduce,需要满足交换律和结合律,减少网络传输压力
- 说一下对hadoop的一些理解(提示:可以从Hadoop的概念、组件、作用方面回答) (5分)
概念:是一个开源分布式系统架构
组件:hdfs-分布式存储,mapreduce-分布式计算框架,yarn-分布式资源管理,commen-支持所有其他模块的公共工具程序
- 简述一下Hive的调优方法(8分)
详细见链接:hive调优 - 分片和分区的区别(2分)
分片:逻辑划分 根据文件大小等因素划分,一个map task 有一个分片
分区:和reduce个数有关,根据键的hash分区
-
简述一下Yarn 的Job提交流程(6分)
详细见链接:分布式资源管理yarn -
Hive的内部表和外部表的概念(4分)
内部表:又称管理表,hive自己管理数据,hdfs中表现为所属库的文件夹,删除表会删除数据
外部表:数据存储在指定的hdfs路径,删除表只会删除元数据,不会删除数据
- 如何避免HBase行键的热点问题(3分)
字符串反转,加盐,hash
三、编程题(每题7分,共21分)
-
利用MapReduce实现word count
见链接:MapReduce实现词频统计 -
已有test表中shop_id,item_id,num三列, 使用HiveSQL计算得到a,b列(温馨提示: 按照shop_id分组, a为num值/每组num的和, b为a的组内排序)
shop_id | item_id | num | a | b |
---|---|---|---|---|
A | a | 10 | 0.37 | 2 |
A | b | 12 | 0.44 | 1 |
B | a | 8 | 0.5 | 1 |
A | c | 5 | 0.19 | 3 |
B | c | 8 | 0.5 | 1 |
C | b | 9 | 1 | 1 |
With t1 as(
Select * ,sum(num) over(partition by shop_id) as s ,rank() over(partition by shop_id order by num desc ) as r from test)
Select t1.shop_id ,t1.item_id,t1.num,t1.num/s as a,t1.r as b
From t1;
- 使用hive计算num列的sum值
item | num | sum |
---|---|---|
A | 1,2,3,4 | |
B | 2,5,1 |
Select item,num,sum(c)
From test2
Lateral view explode(split(num,”,”)) tmp as c
group by item,num;