Hadoop总结---相关面试题

Hadoop总结—相关面试题

1. 入门

1.1 简要描述如何安装配置Apache的一个开源hadoop
  1. 使用root账户登录
  2. 修改ip
  3. 修改host主机
  4. 配置SSH免密登录
  5. 关闭防火墙(1-5可以简单说成准备一台服务器)
  6. 安装JDK
  7. 解压Hadoop安装包
  8. 配置Hadoop核心文件:hadoop-env.sh,core-site.xml,mapred-site.xml,hdfs-site.xml
  9. 配置hadoop环境变量
  10. 格式化hadoop namenode-format
  11. 启动节点:start-all.sh
1.2 hadoop中需要哪些配置文件,其作用是什么

文件名需要记住

  1. core-site.xml
  2. hadoop-env.sh
  3. hdfs-site.xml
  4. mapred-site.xml
  5. yarn-site.xml

在这里插入图片描述
在这里插入图片描述

1.3 请列出正常工作的hadoop集群中hadoop都分别需要启动哪些进程,它们的作用分别是什么
  1. NameNode它是hadoop中的主服务器,管理文件系统名称和对集群中存储的文件的访问,保存有metadata。
  2. SecondaryNameNode,它不是Namenode的热备,而是提供周期检查点和清理任务。帮助NN合并editslog,减少NN的启动时间。
  3. DataNode它负责管理连接到节点的储存(一个集群中可以有多个节点)。每个节点都运行一个DataNode。
  4. ResourceManager(JobTracker)负责调度DataNode上面的工作。每个DataNode有一个TaskTracker,它们执行实际工作。
  5. NodeManager,也就是TaskTracker。
1.4 简述Hadoop的几个默认端口及其含义
  1. dfs.namenode.http-address:50070
  2. SecondaryNameNode 辅助名称节点的端口号:50090
  3. dfs.datanode.address:50010
  4. fs.defaultFS:8020 or 9000
  5. yarn.resourcemanager.webapp.address:8088

2. HDFS

2.1 HDFS的读写流程

2.1.1 上传

  1. 客户端向namenode请求上传文件,namenode检查目标文件是否已经存在,父目录是否已经存在。
  2. namenode返回是否可以上传
  3. 客户端请求第一个block上传到哪几个datanode服务器上
  4. namenode返回3个datanode的节点,分别为dn1,dn2,dn3.
  5. 客户端请求dn1上传数据,dn1收到请求会继续调用dn2,然后dn2调用dn3,将通信管道建立完毕。
  6. dn1、dn2、dn3逐级应答客户端
  7. 客户端开始往dn1上传第一个block,以packet为单位,dn1收到了就会把它传给dn2,dn2收到了就传给dn3。dn1每传一个packet就会放入一个应答队列等待应答。
  8. 当一个block传输完毕之后,客户端再次请求NameNode上传第二个block的服务器,然后重复执行上述3-7步。

2.1.2 下载

  1. 客户端向namenode请求下载文件,namenode通过查询元数据,找到文件块所在的datanode地址。
  2. 挑选一台datanode(就近原则)服务器,请求读取数据
  3. datanode开始传输数据给客户端,从磁盘里读取数据,以packet为单位来做校验
  4. 客户端以packet为单位接收,现在本地缓存,然后写到目标文件。
2.2 SecondaryNameNode和NameNode的区别与联系

区别:

  1. NameNode负责管理整个文件系统的元数据,以及每个路径(文件)所对应的数据块信息。
  2. SecondaryNameNode主要用于定期合并镜像文件和编辑日志

联系:

  1. SecondaryNameNode中保存了一份namenode一直的镜像文件(fsimage)和编辑日志(edits)
  2. 在namenode发生故障的时候,可以从SecondaryNameNode恢复数据。
2.3 服役新节点和退役旧节点

关于白名单和黑名单

2.4 NameNode挂了怎么办
  1. 将SecondaryNameNode中数据拷贝到NameNode存储数据库的目录
  2. 使用-importCheckpoint选项启动NameNode守护进程,从而将SecondaryNameNode中的数据拷贝到NameNode目录中去

3. MapReduce

3.1 谈谈hadoop序列化和反序列化,以及自定义bean对象实现序列化
  • 序列化就是把内存中的对象,转换成字节序列(或者其他数据传输协议)以便于存储的持久化和网络传输。
  • 反序列化就是将收到的字节序列(或者其他传输协议)或者是磁盘的持久化数据转换成内存中的对象。
  • hadoop使用的是自己的序列化机制(Writable)
    自定义bean对象:
  • 自定义bean对象的时候必须要实现Writable的接口
  • 反序列化的时候,需要反射调用空参构造函数,所以bean对象一定要有空参构造函数。
  • 重写序列化和反序列化的函数
  • 反序列化参数到对象的顺序,一定要和序列化这些参数的顺序一致。
  • 如果需要把bean当成key值传输,还要写Comparable接口,它一般和Writable接口合并成WritableComparable接口。
3.2 FileInputFormat切片机制
  • 在向集群提交资源的时候,提交了:xml配置文件、jar包、切片信息
  • 提交到:
    在这里插入图片描述
  • 切片大小一般按块的大小切,数据量大于切片大小的1.1倍才切
3.3 自定义InputFormat
  • 自定义一个类继承FileInputFormat
  • 改写RecordReader,实现一次读取一个完整的文件封装成KV
3.4 一个job的Map和Reduce数量是由什么决定的
  • map
    由切片数量决定的

  • reduce
    reduce的数量可以根据job.setNumReduceTasks(N),N为Reduce的数量,不设置默认为1

3.5 MR工作流程(MapTask工作机制、ReduceTask工作机制)

Hadoop之MapReduce—Shuffle的详细工作流程
两张图

3.6 MapReduce有几种排序及排序发生的阶段

排序种类

  • 部分排序:MapReduce根据输入记录的键对数据集排序,保证输出的每个文件内部有序
  • 全排序:全排序的实现是内部快排+外部归并排序达到效果
  • 辅助排序(GroupingComparator分组
  • 二次排序:在使用CompareTo的时候,设定两个判断条件。
  • 自定义排序WritableComparable

发生阶段

  • 二次排序、全排序、部分排序发生在map
  • 辅助排序发生在Reduce
3.7 shuffle的流程和优化
  • 增加环形缓冲区发生溢写的比例,减小溢写的次数
  • 增加Combiner
  • 增大溢写文件
  • shuffle的过程可以把文件压缩进行传递
3.8 Combiner的作用是什么,什么情况可以使用,什么情况不可以使用,和reduce的区别在?
  • Combiner的意义就是对每个MapTask的输出进行局部汇总,以减小网络传输量
  • Combiner能够应用的前提是要不影响最终结果,并且,Combiner的输出kv跟reducer的输入KV要对应起来,这也就是说,Combiner的操作空间很小。
  • Combiner和Reducer的区别在于运行位置,Combiner是在每个MapTask所在的节点运行,reduce是接收所有的数据并且处理输出。
3.9 如果不自定义Partitioner,数据是如何分区的
  • 是根据每条数据的key的hashcode值模运算reduce的数量,得到的数字就是分区号。
3.10 MapReduce怎么实现TopN

可以自定义groupingComparator,或者在map端对数据进行排序,然后在reduce输出时,只输出N个数即可。

3.11 使hadoop任务输出到多个目录中

自定义OutputFormat

  • 自定义OutputFormat
  • 改写recordwriter,具体改写输出数据的方法write()
3.12 实现join的几种方法以及每种方法的实现
  • Reduce Join
    设两张表通过属性p进行连接,通过自定义分组,把具有相同p的数据放在一组,在reduce端对两张表进行数据的替换和连接。
  • Map Join
    把一张(或几张)小一点的表放进缓存,在map端就完成对表的拼接。
3.13 怎样实现二级排序

对map端输出的key进行排序,实现的compareTo方法,在该方法中排序的条件有两个。

3.14 切分成几块

hdfs块大小为64M
输入类型为FIleInputFormat
有三个文件的大小分别是:64kb、65MB、127MB
hadoop框架会把这些文件拆分成多少块

  • 五块:64k、64M、1M、64M、63M
    块的大小是严格切分的,只有切片才是大于1.1倍才切
3.15 RecordReader的作用

用来读取不同类型的文件的

3.16 编程题

1G的文件,分别有id,name,mark,source四个低端,按照mark分组,id排序,手写一个MapReduce,其中有几个Mapper?

public int compareTo(sortBean o){
	int result;
	
	if(this.mark>o.getmark()){
		return 1;
	}else if(this.mark<o.getmark()){
		return -1;
	}else{
		return (this.id>o.getid())?-1:1
	}
}

分为8块

4. Yarn

4.1 简述hadoop1与hadoop2的架构异同
  • 加入了yarn解决了资源的调度问题
  • 加入了zookeeper的支持,实现比较可靠的高可用
4.2 为什么会产生yarn,有什么优势
  • 完成了对资源运算和资源分配的完全解耦
  • yarn上可以运行各种类型的分布式运算系统,比如MapReduce,storm程序,spark程序等。
4.3 MR提交的全过程
4.4 HDFS的压缩算法?及每种算法的应用场景

hadoop之数据压缩

4.5 hadoop调度策略

主要有三种:FIFO(先进先出),Capacity Scheduler(容量调度器,默认),Fair Scheduler(公平调度器)

4.6 MapReduce推测执行算法及原理

在这里插入图片描述

5.MapReduce的优化

MapReduce的优化策略

6.重点

入门

  • 虚拟机准备
  • 编写脚本分发文件
  • SSH免密登录
  • 群起脚本

HDFS

  • shell操作(上传下载)

MapReduce

  • wordcount案例
  • 序列化案例
  • 自定义InputFormat案例
  • CombineTextInputFormat
  • 分区案例
  • 排序案例
  • OutputFormat
  • MapJoin案例

压缩

  • snappy
  • Lzo

优化

  • 调优参数(起码要知道有什么可以调)

其他案例

  • TopN案例
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值