Hadoop面试百问

1. MR流程

2. hdfs了解多少?读写流程,架构

3. 写流程中备份三,其中一个写失败了怎么弄的?

4. hdfs HA(过程,启动流程)

5. 介绍下yarn

6. shuffle主要介绍下

7. shuffle怎么落地的?

8. 伪分布式模式中的注意点?

9. 全分布式模式中的注意点?

10. Hadoop的核心配置是什么?

11. RAM的溢出因子是?

12. 如何检查Namenode是否正常运行?

13. Hadoop需要什么样的网络?

14. 如何在浏览器中查找Namenode?

15. 全分布式环境下为什么需求password-less SHH?

16. 这会导致安全问题吗?

17. SSH中的注意点还包括?

18. 是客户端还是Namenode决定输入的分片?

19. 给一个案例 用mapreduce去实现,,这个实现过程,会遇到什么问题,怎么解决

20. HA原理

21. mr数据倾斜解决办法

22. hdfs文件创建

23. hdfs异步读

24. hdfs api 源码 解答:文件创建工作流程

25. Hadoop是由哪几个组件组成并阐述HDFS写入数据的实现机制

26. 如何决定一个Job的Map和 Reduce的数量

27. Hadoop的 SEQUENCEFILE的格式,并说明下什么是JAVA序列化,如何实现JAVA序列化

28. 简述 Hadoop1与 Hadoop2的架构异同

29. YARN的新特性

30. 如何使用 MapReduce实现2个表的J0IN

31. 请描述 MapReduce二次排序原理

32. 请描述 MapReduce中排序发生在几个阶段

33. 请描述 MapReduce中 shuffle阶段的工作流程,如何优化 shuffle阶段

34. 请描述 MapReduce中 Combiner的作用是什么,一般应用场景,哪些场景不适用

35. 1GB数据写入到HDFS的流程(备注:数据块大小为256MB)请简要写明该步骤

36. 请写出 MapReduce的执行过程

37. 请说明 hadoop为何不适合存储大量小文件,假如有小文件存储需求如何优化。

38. Container的含义和作用是什么?

39. Hadoop成功启动后都启动了哪些进程,这些进程的作用是什么?

40. 数据文件为 data. txt,请用 MapReduce模型求出其中的最大值,文件其内容如下,请写出实现代码:

2
8
3
5

41. 检查并列出“hive/ warehouse/dw”下所有文件的状态,请写出相关命令。

42. 配置机架感知,下面说法正确的是

a)如果一个机架出问题,不会影响数据读写
b)写入数据的时候会写到不同机架的 DataNode中
c) MapReduce会根据机架获取离自己比近的网络数据

43. HA模式下, Hadoop, hbase,hive, zookeeper的启动顺序

a)hbase/hive-> zookeeper-> Hadoop
b) Hadoop->zookeeper> hbase/hive
c)zookeeper-> Hadoop->hbase/hive
d) zookeeper->hbase/hive->Hadoop

44. mapreduce流程基本原理:

45. 用代码写出你使用过的mapreduce?

46. 从 client写一个文件到 hadoop的过程是什么样的

47. 运行一个 hadoop任务的流程是什么样的。

48. secondary namenode/ HA namenode是如何工作的。

49. 什么样的计算不能用mr来提速,举5个例子

50. 一个mr作业跑的比较慢,如何来优化,至少给出6个方面

51. hadoop会有哪些重大故障,如何应对?至少给出5个

52. 什么情况下会触发 recovery过程, recover是怎么做的。

53. 你为hadoop有哪些计不合理的地方。

54. mapreduce的原理和架构。

55. 数据倾斜在什么时候发生。

56. 简要描述如何安装配置apache的一个开源hadoop,只描述即可,无需列出具体步骤,列出具体步骤更好。

答:第一题:a使用root账户登录
b 修改IP
c 修改host主机名
d 配置SSH免密码登录
e 关闭防火墙
f安装JDK
g 解压hadoop安装包
h配置hadoop的核心文件 hadoop-env.sh,core-site.xml , mapred-site.xml , hdfs-site.xml
i 配置hadoop环境变量
j 格式化 hadoop namenode-format
k启动节点start-all.sh

57. 请列出正常的hadoop集群中hadoop都分别需要启动 哪些进程,他们的作用分别都是什么,请尽量列的详细一些。

namenode:负责管理hdfs中文件块的元数据,响应客户端请求,管理datanode上文件block的均衡,维持副本数量
Secondname:主要负责做checkpoint操作;也可以做冷备,对一定范围内数据做快照性备份。
Datanode:存储数据块,负责客户端对数据块的io请求
Jobtracker :管理任务,并将任务分配给 tasktracker。
Tasktracker: 执行JobTracker分配的任务。
Resourcemanager
Nodemanager
Journalnode
Zookeeper
Zkfc

58. 请写出以下的shell命令

(1)杀死一个job
(2)删除hdfs上的 /tmp/aaa目录
(3)加入一个新的存储节点和删除一个节点需要执行的命令
答:

(1)hadoop job –list 得到job的id,然后执行 hadoop job -kill jobId就可以杀死一个指定jobId的job工作了。
(2)hadoopfs -rmr /tmp/aaa
(3)增加一个新的节点在新的几点上执行
Hadoop daemon.sh start datanode
Hadooop daemon.sh start tasktracker/nodemanager
下线时,要在conf目录下的excludes文件中列出要下线的datanode机器主机名
然后在主节点中执行 hadoop dfsadmin -refreshnodes
下线一个datanode删除一个节点的时候,只需要在主节点执行
hadoop mradmin -refreshnodes
下线一个tasktracker/nodemanager

59. 请列出你所知道的hadoop调度器,并简要说明其工作方法

答:Fifo schedular :默认,先进先出的原则
Capacity schedular :计算能力调度器,选择占用最小. 优先级高的先执行,依此类推。
Fair schedular:公平调度,所有的 job 具有相同的资源。

60. \\请列出你在工作中使用过的开发mapreduce的语言

\\答:java,hive,(python,c++)hadoop streaming

61. 当前日志采样格式为

a , b , c , d
b , b , f , e
a , a , c , f
请你用最熟悉的语言编写mapreduce,计算第四列每个元素出现的个数
答:

public classWordCount1 {
	public static final String INPUT_PATH="hdfs://hadoop0:9000/in";
public static final String OUT_PATH ="hdfs://hadoop0:9000/out";
public static void main(String[] args)throws Exception {
Configuration conf = newConfiguration();
FileSystem fileSystem =FileSystem.get(conf);
if(fileSystem.exists(newPath(OUT_PATH))){}
fileSystem.delete(newPath(OUT_PATH),true);
Job job = newJob(conf,WordCount1.class.getSimpleName());
//1.0读取文件,解析成key,value对
FileInputFormat.setInputPaths(job,newPath(INPUT_PATH));
//2.0写上自己的逻辑,对输入的可以,value进行处理,转换成新的key,value对进行输出
job.setMapperClass(MyMapper.class);
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(LongWritable.class);
//3.0对输出后的数据进行分区
//4.0对分区后的数据进行排序,分组,相同key的value放到一个集合中
//5.0对分组后的数据进行规约
//6.0对通过网络将map输出的数据拷贝到reduce节点
//7.0 写上自己的reduce函数逻辑,对map输出的数据进行处理
job.setReducerClass(MyReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(LongWritable.class);
FileOutputFormat.setOutputPath(job,new Path(OUT_PATH));
job.waitForCompletion(true);
}
static class MyMapper extendsMapper<LongWritable, Text, Text, LongWritable>{
@Override
protected void map(LongWritablek1, Text v1,
org.apache.hadoop.mapreduce.Mapper.Contextcontext)
throws IOException,InterruptedException {
String[] split =v1.toString().split("\t");
for(String words :split){
context.write(split[3],1);}}}
static class MyReducer extends Reducer<Text,LongWritable, Text, LongWritable>{
protected void reduce(Text k2,Iterable<LongWritable> v2,
org.apache.hadoop.mapreduce.Reducer.Contextcontext)
throws IOException,InterruptedException {
Long count = 0L;
for(LongWritable time :v2){
count += time.get();}
context.write(v2, newLongWritable(count));}}}

62. 你认为用java , streaming , pipe方式开发map/reduce , 各有哪些优点

就用过 java 和 hiveQL。
Java 写 mapreduce 可以实现复杂的逻辑,如果需求简单,则显得繁琐。
HiveQL 基本都是针对 hive 中的表数据进行编写,但对复杂的逻辑(杂)很难进行实现。写起来简单。

63. 请简述hadoop怎样实现二级排序(就是对key和value双排序)

第一种方法是,Reducer将给定key的所有值都缓存起来,然后对它们再做一个Reducer内排序。但是,由于Reducer需要保存给定key的所有值,可能会导致出现内存耗尽的错误。
第二种方法是,将值的一部分或整个值加入原始key,生成一个组合key。这两种方法各有优势,第一种方法编写简单,但并发度小,数据量大的情况下速度慢(有内存耗尽的危险),
第二种方法则是将排序的任务交给MapReduce框架shuffle,更符合Hadoop/Reduce的设计思想。这篇文章里选择的是第二种。我们将编写一个Partitioner,确保拥有相同key(原始key,不包括添加的部分)的所有数据被发往同一个Reducer,还将编写一个Comparator,以便数据到达Reducer后即按原始key分组。

64. 简述hadoop实现jion的几种方法

Map side join----大小表join的场景,可以借助distributed cache
Reduce side join

65. 请简述mapreduce中的combine和partition的作用

答:combiner是发生在map的最后一个阶段,其原理也是一个小型的reducer,主要作用是减少输出到reduce的数据量,缓解网络传输瓶颈,提高reducer的执行效率。
partition的主要作用将map阶段产生的所有kv对分配给不同的reducer task处理,可以将reduce阶段的处理负载进行分摊

66. 用mapreduce怎么处理数据倾斜问题

本质:让各分区的数据分布均匀
可以根据业务特点,设置合适的partition策略
如果事先根本不知道数据的分布规律,利用随机抽样器抽样后生成partition策略再处理

67. hadoop框架怎么来优化

答:
可以从很多方面来进行:比如hdfs怎么优化,mapreduce程序怎么优化,yarn的job调度怎么优化,hbase优化,hive优化

68. 我们在开发分布式计算job的时候,是否可以去掉reduce阶段

答:可以,例如我们的集群就是为了存储文件而设计的,不涉及到数据的计算,就可以将mapReduce都省掉。
比如,流量运营项目中的行为轨迹增强功能部分
怎么样才能实现去掉reduce阶段
去掉之后就不排序了,不进行shuffle操作了

69. hadoop中常用的数据压缩算法

答:
Lzo
Gzip
Default
Snapyy
如果要对数据进行压缩,最好是将原始数据转为SequenceFile 或者 Parquet File(spark)

70. mapreduce的调度模式(题意模糊,可以理解为yarn的调度模式,也可以理解为mr的内部工作流程)

答: appmaster作为调度主管,管理maptask和reducetask
Appmaster负责启动. 监控maptask和reducetask
Maptask处理完成之后,appmaster会监控到,然后将其输出结果通知给reducetask,然后reducetask从map端拉取文件,然后处理;
当reduce阶段全部完成之后,appmaster还要向resourcemanager注销自己

71. datanode在什么情况下不会备份数据

答:在客户端上传文件时指定文件副本数量为1

72. combine出现在哪个过程

答:shuffle过程中
具体来说,是在maptask输出的数据从内存溢出到磁盘,可能会调多次
Combiner使用时候要特别谨慎,不能影响最后的逻辑结果

73. hdfs的体系结构

答:
集群架构:
namenode datanode secondarynamenode
(active namenode ,standby namenode)journalnode zkfc
内部工作机制:
数据是分布式存储的
对外提供一个统一的目录结构
对外提供一个具体的响应者(namenode)
数据的block机制,副本机制
Namenode和datanode的工作职责和机制
读写数据流程

74. 三个datanode中当有一个datanode出现错误时会怎样?

答:
Namenode会通过心跳机制感知到datanode下线
会将这个datanode上的block块在集群中重新复制一份,恢复文件的副本数量
会引发运维团队快速响应,派出同事对下线datanode进行检测和修复,然后重新上线

75. 描述一下hadoop中,有哪些地方使用到了缓存机制,作用分别是什么?

答:
Shuffle中
Hbase----客户端/regionserver

76. MapReduce优化经验

答:(1.)设置合理的map和reduce的个数。合理设置blocksize
(2.)避免出现数据倾斜
(3.combine函数
(4.对数据进行压缩
(5.小文件处理优化:事先合并成大文件,combineTextInputformat,在hdfs上用mapreduce将小文件合并成SequenceFile大文件(key:文件名,value:文件内容)
(6.参数优化

77. mapreduce的大致流程

答:主要分为八个步骤
1.对文件进行切片规划
2.启动相应数量的maptask进程
3.调用FileInputFormat中的RecordReader,读一行数据并封装为k1v1
4.调用自定义的map函数,并将k1v1传给map
5.收集map的输出,进行分区和排序
6.reduce task任务启动,并从map端拉取数据
7.reduce task调用自定义的reduce函数进行处理
8.调用outputformat的recordwriter将结果数据输出

78. 用mapreduce实现sql语 select count (x) from a group by b;

79. 搭建hadoop集群 , master和slaves都运行哪些服务

答:master主要是运行我们的主节点,slaves主要是运行我们的从节点。

80. hadoop参数调优

81. hadoop运行原理

答:hadoop的主要核心是由两部分组成,HDFS和mapreduce,首先HDFS的原理就是分布式的文件存储系统,将一个大的文件,分割成多个小的文件,进行存储在多台服务器上。
Mapreduce的原理就是使用JobTracker和TaskTracker来进行作业的执行。Map就是将任务展开,reduce是汇总处理后的结果。

82. mapreduce的原理

答:mapreduce的原理就是将一个MapReduce框架由一个单独的master JobTracker和每个集群节点一个slave TaskTracker共同组成。master负责调度构成一个作业的所有任务,这些的slave上,master监控它们的执行,重新执行已经失败的任务。而slave仅负责执行由maste指派的任务。

83. HDFS存储机制

答:HDFS主要是一个分布式的文件存储系统,由namenode来接收用户的操作请求,然后根据文件大小,以及定义的block块的大小,将大的文件切分成多个block块来进行保存

84. \\举一个例子说明mapreduce是怎么运行的。

\\Wordcount

85. 如何确认hadoop集群的健康状况

答:有完善的集群监控体系(ganglia,nagios)
Hdfs dfsadmin –report
Hdfs haadmin –getServiceState nn1

86. mapreduce作业,不让reduce输出,用什么代替reduce的功能。

87. 下面哪个程序负责 HDFS 数据存储。 答案 C

a)NameNode b)Jobtracker c)Datanode d)secondaryNameNode e)tasktracker

88. HDFS 中的 block 默认保存几份?

3份

89. 下列哪个程序通常与 NameNode 在一个节点启动?

a)SecondaryNameNode b)DataNodec)TaskTracker d)Jobtracker e)zkfc

90. \\Hadoop 作者 答案D

\\a)Martin Fowler b)Kent Beck c)Doug cutting

91. HDFS 默认 Block Size 答案 B [M1]

a)32MB b)64MB c)128MB

92. 下列哪项通常是集群的最主要瓶颈 答案D[M2]

a)CPU b)网络 c)磁盘 d)内存

93. 关于 SecondaryNameNode 哪项是正确的? 答案C

a)它是NameNode的热备
b)它对内存没有要求
c)它的目的是帮助 NameNode 合并编辑日志,减少 NameNode 启动时间
d)SecondaryNameNode 应与 NameNode 部署到一个节点

94. 配置机架感知[M3] 的下面哪项正确 答案 ABC

a)如果一个机架出问题,不会影响数据读写
b)写入数据的时候会写到不同机架的 DataNode 中
c)MapReduce 会根据机架获取离自己比较近的网络数据

95. Client 端上传文件的时候下列哪项正确 答案BC

a)数据经过 NameNode 传递给 DataNode
b)Client 端将文件切分为 Block,依次上传
c)Client 只上传数据到一台 DataNode,然后由 NameNode 负责 Block 复制工作

96. \\下列哪个是 Hadoop 运行的模式 答案 ABC

\\a)单机版 b)伪分布式 c)分布式

97. Cloudera 提供哪几种安装 CDH 的方法 答案 ABCD

a)Cloudera manager b)Tar ball c)Yum d)Rpm

98. 判断题:全部都是错误滴

a.Ganglia 不仅可以进行监控,也可以进行告警。
b.Block Size 是不可以修改的。
c. Nagios 不可以监控 Hadoop 集群,因为它不提供 Hadoop 支持。
d. 如果 NameNode 意外终止, SecondaryNameNode 会接替它使集群继续工作。
e. Cloudera CDH 是需要付费使用的。
f. Hadoop 是 Java 开发的,所以 MapReduce 只支持 Java 语言编写。
g. Hadoop 支持数据的随机读写。
h. NameNode 负责管理 metadata, client 端每次读写请求,它都会从磁盘中读取或则
会写入 metadata 信息并反馈 client 端。
i. NameNode 本地磁盘保存了 Block 的位置信息。
j. DataNode 通过长连接与 NameNode 保持通信。
k. Hadoop 自身具有严格的权限管理和安全措施保障集群正常运行。
l. Slave节点要存储数据,所以它的磁盘越大越好。
m. hadoop dfsadmin –report 命令用于检测 HDFS 损坏块。
n. Hadoop 默认调度器策略为 FIFO
o. 集群内每个节点都应该配 RAID,这样避免单磁盘损坏,影响整个节点运行。
p. 因为 HDFS 有多个副本,所以 NameNode 是不存在单点问题的。
q. 每个 map 槽(进程)就是一个线程。
r. Mapreduce 的 input split 就是一个 block。
s. NameNode的默认Web UI 端口是 50030,它通过 jetty 启动的 Web 服务。
t. Hadoop 环境变量中的 HADOOP_HEAPSIZE 用于设置所有 Hadoop 守护线程的内存。它默认是200 GB。
u. DataNode 首次加入 cluster 的时候,如果 log中报告不兼容文件版本,那需要
NameNode执行“Hadoop namenode -format”操作格式化磁盘。

99. 谈谈 hadoop1 和 hadoop2 的区别

答:
hadoop1的主要结构是由HDFS和mapreduce组成的,HDFS主要是用来存储数据,mapreduce主要是用来计算的,那么HDFS的数据是由namenode来存储元数据信息,datanode来存储数据的。Jobtracker接收用户的操作请求之后去分配资源执行task任务。
在hadoop2中,首先避免了namenode单点故障的问题,使用两个namenode来组成namenode feduration的机构,两个namenode使用相同的命名空间,一个是standby状态,一个是active状态。用户访问的时候,访问standby状态,并且,使用journalnode来存储数据的原信息,一个namenode负责读取journalnode中的数据,一个namenode负责写入journalnode中的数据,这个平台组成了hadoop的HA就是high availableAbility高可靠。
然后在hadoop2中没有了jobtracker的概念了,统一的使用yarn平台来管理和调度资源,yarn平台是由resourceManager和NodeManager来共同组成的,ResourceManager来接收用户的操作请求之后,去NodeManager上面启动一个主线程负责资源分配的工作,然后分配好了资源之后告知ResourceManager,然后ResourceManager去对应的机器上面执行task任务。

100. 文件大小默认为 64M,改为 128M 有啥影响?

答:更改文件的block块大小,需要根据我们的实际生产中来更改block的大小,如果block定义的太小,大的文件都会被切分成太多的小文件,减慢用户上传效率,如果block定义的太大,那么太多的小文件可能都会存到一个block块中,虽然不浪费硬盘资源,可是还是会增加namenode的管理内存压力。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值