hadoop一些面试可能问的东西

时间: 2023-07-18 admin 互联网

hadoop一些面试可能问的东西

hadoop一些面试可能问的东西

一、Hadoop 1.x、2.x、3.x的区别

# Hadoop 1.x时代,MapReduce同时处理业务逻辑运算和资源的调度,耦合度较大
# Hadoop 2.x时代,将MapReduce加以拆分,分成了只负责逻辑运算的MapReduce和只负责资源调度的yarn
# Hadoop 3.x时代,组成上没有什么变化

二、常用端口号

# Hadoop 3.x 
# 	HDFS NameNode内部通常端口:8020/9000/9820
# 	HDFS NameNode对用户的查询端口:9870
# 	Yarn查看任务运行情况的:8088
# 	历史服务器:19888# Hadoop 2.x 
# 	HDFS NameNode内部通常端口:8020/9000
# 	HDFS NameNode对用户的查询端口:50070
# 	Yarn查看任务运行情况的:8088
# 	历史服务器:19888

三、常用配置文件

# Hadoop 3.x
# 	core-site.xml
# 	hdfs-site.xml  
# 	yarn-site.xml  
# 	mapred-site.xml 
# 	workers# Hadoop 2.x
# 	core-site.xml
# 	hdfs-site.xml
# 	yarn-site.xml
# 	mapred-site.xml
#	slaves

四、HDFS文件块(Block)大小

# HDFS中的文件在物理上是分块存储(Block),块的大小可以通过配置参数(dfs.blocksize)来规定
# 默认大小在Hadoop 2.x以上版本中是128M,老版本中是64M# Block块的默认值为128m,是基与最佳损耗理论得出来的
#	最佳传输损耗理论:在一次传输中,寻址时间占用总传输时间的1%时,本次传输的损耗最小,为最佳性价比传输
#	目前硬件的发展条件,普通磁盘写的速率大概为100M/S,寻址时间一般为10ms
#		10ms / 1% = 1000ms = 1s
#		1s * 100M/s = 100M
# 	Blocak块在传输时,每64k还需要校验一次,因此必须是2的n次方,所以最接近100M的就是128M

块的大小不能太小,也不能太大

# 太小,会增加寻址时间,程序一直在找块的开始位置
# 太大,从磁盘传输数据的时间明显大于定位这个块开始位置所需的时间# HDFS块的大小主要取决于磁盘的传输速率

五、HDFS读写数据

1) HDFS写数据流程

# 1) 当有数据需要存储到HDFS时,HDFS客户端就会创建一个分布式的文件系统Distributed FileSystem
# 	 该文件系统会向NameNode发送请求上传文件的请求
# 	 NameNode收到该请求会检查该目录树是否有权限、目录是否存在
# 2) NameNode响应给客户端是否可以上传文件
# 3) 客户端请求NameNode返回存储Block的DataNode节点
# 4) NameNode返回存储数据的节点
# 5) 客户端创建管道流FSDataOutputStream,请求连接DataNode集群的通道
# 6) DataNode会返回一个应答成功
# 7) 以packet(64k)为单位传送数据
#	 packet大小为chunk的512字节+校验位的4字节
#	 数据传输是一边存储一边传送(先从磁盘读取数据放到一个本地内存缓存)
# 8) 客户端关闭管道流并向NameNode发送传送完成

节点距离计算

# 节点距离=两个节点距离共同祖先的距离的总和

①同一节点上的进程

Distance(d1/r1/n0,d1/r1/n0)=0

②同一机架上的不同节点

Distance(d1/r1/n1,d1/r1/n2)=2

③同一集群不同机架节点

Distance(d1/r2/n0,d1/r3/n2)=4

④不同集群节点

Distance(d1/r2/n1,d2/r4/n1)=6

2) HDFS读数据流程

# 1) 当有数据需要从HDFS下载时,HDFS客户端就会创建一个分布式的文件系统Distributed FileSystem
# 	 通过该文件系统向NameNode发送下载请求
# 2) NameNode接收到请求判断该用户是否具有下载权限和HDFS文件系统中是否有该文件
# 	 向客户端返回目标文件的元数据
# 3) 客户端创建管道流FSDataOutputStream,请求连接DataNode读数据
# 	 读数据的原则是
# 	 	①选择节点距离最近的节点读取数据,然后剩下得节点随机选择
# 	 	②负载均衡原则
# 4) 返回传输的数据,客户端以packet为单位接收数据,先在本地缓存,然后写入目标文件

六、NameNode和Secondary NameNode工作机制

# NameNode
#	(1) 如果第一次启动NameNode,创建镜像文件fsimage和追加的日志文件edits
#		如果不是第一次,直接加载fsimage和edits到内存
#	(2) 客户端对元数据进行操作
#	(3) 先记录操作日志,然后加载到内存
#	(4) 在内存对数据进行操作# Secondary NameNode
#	(1) 每隔一段时间就会询问NameNode是否需要CheckPoint请求
#	(2) 当定时时间到或者edits中的数据满了,就会请求执行CheckPoint操作
#	(3) 这时会将NameNode中的edits复制出一份新的作为后续操作的记录
#		edits和fsimage同时复制到Secondary NameNode
# 	(4) 在Secondary NameNode中将edits和fsimage同时加载到内存进行合并,生成一个后缀名为.chkpoint的新文件
#	(5) 将这份文件复制到NameNode中并覆盖fsimage成为新的镜像文件