hadoop面试题整理

1. 描述下Shuffle过程中分区?


2.简单描述MapReduce不合适对哪些场景的使用?


3. 简述Combiner 和partition的作用
(1).combine分为map端和reduce端,作用是把同一个key的键值对合并在一起,可以自定义的。
combine函数把一个map函数产生的对(多个key,value)合并成一个新的.
将新的作为输入到reduce函数中这个value2亦可称之为values,因为有多个。这个合并的目的是为了减少网络传输。
(2).partition是分割map每个节点的结果,按照key分别映射给不同的reduce,也是可以自定义的。这里其实可以理解归类。"


4.什么是文件切分?
答:将文件拆分成splits,由于测试用的文件较小,所以每个文件为一个split,并将文件按行分割形成对。这一步由MapReduce框架自动完成,其中偏移量包括了回车所占的字符数。将分割好的对交给用户定义的map方法进行处理,生成新的对。得到map方法输出的对后,Mapper会将它们按照key值进行排序,并执行Combine过程,将key至相同value值累加,得到Mapper的最终输出结果。Reducer先对从Mapper接收的数据进行排序,再交由用户自定义的reduce方法进行处理,得到新的对,并作为任务的输出结果。"


5.什么是mapreduce压缩?
答:MapReduce应用使用非压缩的数据来读取和写入,我们也可以受益于压缩map阶段的中间输出。因为map作业的输出会被写入磁盘并通过网络传输到reducer节点,所以若使用LZO之类的快速压缩,能得到更好的性能,因为传输的数据量大大减少了"w'w'w


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


7.简单描述Shuffle过程环形缓冲区的作用?
数据从map()输出,经过Partitioner分区操作,在进入环形缓冲区。
默认情况下,环形缓冲区大小值为100MB。当map输入的数据进入环形
缓冲区的量达到80MB以上是,那么开始执行溢写过程。最终经过合并、
排序后落入本地磁盘。


8. Client端读取HDFS数据过程分析


9. Client端上传数据到HDFS过程分析


10.题目:某公司员工早上开始上班发现Hadoop环境被关闭,于是打算启动Hadoop集群,
启动集群了之后就马上传文件到hdfs系统:
hadoop fs -put ./install.log.syslog /
发现上传失败。提示信息为:
put: Cannot create file/install.log.syslog.COPYING_. Name node is in safe mode
1.该员工看不到这个错误提示是什么意思,请你简单的解释一下?

2.简单描述你对Hadoop集群SafeMode模式的理解?

当namenode发现集群中的block丢失数量达到一个阀值时,namenode就进入安全模式状态,
不再接受客户端的数据更新请求


在正常情况下,namenode也有可能进入安全模式:
集群启动时(namenode启动时)必定会进入安全模式,然后过一段时间会自动退出
安全模式(原因是datanode汇报的过程有一段持续时间)

也确实有异常情况下导致的安全模式
原因:block确实有缺失
措施:可以手动让namenode退出安全模式,bin/hdfs dfsadmin -safemode leave
 或者:调整safemode门限值:  dfs.safemode.threshold.pct=0.999f
 
进入安全模式:
hdfs dfsadmin -safemode enter


退出安全模式:
hdfs dfsadmin -safemode leave
 
查看集群的报告:
 hadoop dfsadmin -report
  
hdfs脚本和hadoo执行脚本的区别;
hadoop fs -put ./xxxx /
=
hdfs dfs -put ./xxxx /



11.无论hdfs还是mapreduce,对于小文件都有损效率,实践中,
又难免面临处理大量小文件的场景,此时,就需要有相应解决方案
小文件的优化无非以下几种方式:
(1)在数据采集的时候,就将小文件或小批数据合成大文件再上传HDFS
(2)在业务处理之前,在HDFS上使用mapreduce程序对小文件进行合并
(3)在mapreduce处理时,可采用combineInputFormat提高效率


12. mr数据倾斜问题如何处理?

13.HDFS冗余数据块的自动删除


在日常维护hadoop集群的过程中发现这样一种情况:
某个节点由于网络故障或者DataNode进程死亡,被NameNode判定为死亡,
HDFS马上自动开始数据块的容错拷贝;当该节点重新添加到集群中时,
由于该节点上的数据其实并没有损坏,所以造成了HDFS上某些block的备
份数超过了设定的备份数。通过观察发现,这些多余的数据块经过很长的
一段时间才会被完全删除掉,那么这个时间取决于什么呢?
该时间的长短跟数据块报告的间隔时间有关。Datanode会定期将当前该结
点上所有的BLOCK信息报告给Namenode,参数dfs.blockreport.intervalMsec
就是控制这个报告间隔的参数。
hdfs-site.xml文件中有一个参数:

dfs.blockreport.intervalMsec
3600000
Determines block reporting interval in milliseconds.

其中3600000为默认设置,3600000毫秒,即1个小时,也就是说,块报告的时间间隔为1个小时,
所以经过了很长时间这些多余的块才被删除掉。通过实际测试发现,当把该参数调整的稍小一
点的时候(60秒),多余的数据块确实很快就被删除了


14.hadoop datanode节点超时时间设置


datanode进程死亡或者网络故障造成datanode无法与namenode通信,
namenode不会立即把该节点判定为死亡,要经过一段时间,这段时
间暂称作超时时长。HDFS默认的超时时长为10分钟+30秒。如果定
义超时时间为timeout,则超时时长的计算公式为:
timeout  = 2 * heartbeat.recheck.interval + 10 * dfs.heartbeat.interval。
而默认的heartbeat.recheck.interval 大小为5分钟,dfs.heartbeat.interval默认为3秒。
需要注意的是hdfs-site.xml 配置文件中的heartbeat.recheck.interval的单位为毫秒,
dfs.heartbeat.interval的单位为秒。所以,举个例子,如果heartbeat.recheck.interval
设置为5000(毫秒),dfs.heartbeat.interval设置为3(秒,默认),则总的超时时间为40秒。
hdfs-site.xml中的参数设置格式:



    heartbeat.recheck.interval
    5000


    dfs.heartbeat.interval
    3

15.hadoop的日志目录(/home/hadoop/app/hadoop-2.6.4/logs)
1、hadoop启动不正常
用浏览器访问namenode的50070端口,不正常,需要诊断问题出在哪里:
a、在服务器的终端命令行使用jps查看相关进程
(namenode1个节点   datanode3个节点   secondary namenode1个节点)
b、如果已经知道了启动失败的服务进程,进入到相关进程的日志目录下,查看日志,分析异常的原因
1)配置文件出错,saxparser  exception; ——找到错误提示中所指出的配置文件检查修改即可
2)unknown host——主机名不认识,配置/etc/hosts文件即可,或者是配置文件中所用主机名跟实际不一致
(注:在配置文件中,统一使用主机名,而不要用ip地址)
3)directory 访问异常—— 检查namenode的工作目录,看权限是否正常

start-dfs.sh启动后,发现有datanode启动不正常
a)查看datanode的日志,看是否有异常,如果没有异常,手动将datanode启动起来
sbin/hadoop-daemon.sh start datanode
b)很有可能是slaves文件中就没有列出需要启动的datanode
c)排除上述两种情况后,基本上,能在日志中看到异常信息:
   1、配置文件
   2、ssh免密登陆没有配置好
   3、datanode的身份标识跟namenode的集群身份标识不一致(删掉datanode的工作目录)

16.1.在HDFS系统中,一定要区分好什么是主节点、从节点和客户端。
2.NameNode、DataNode、HdfsClient之间的通信
HdfsClientClient和namenode之间是通过rpc通信;
Datanode和NameNode之间是通过rpc通信;
HdfsClient和datanode之间是通过简单的socket通信;


datanode在MapReduce任务执行时,由于一行数据可能分布在两个数据块上,
所以可能会从其他datanode进行读取数据信息,所以datanode之间有通信,
通过rpc进行。
??????????????


3.Hadoop安装时为什么进行ssh配置?


Hadoop在执行诸如start-dfs.sh或者start-yarn.sh命令时,我们会从主节点
执行上述两条命令,然后主节点会通过ssh通信,登录到从节点执行相关的
hadoop-damen.sh start datanode之类的工作。所以,要进行ssh免密码登录配置。
而之后namenode向datanode发送数据块以及datanode向namenode发送心跳等一
系列问题都是通过rpc进行的,这跟ssh配置没有关系。

你可能感兴趣的:(数据库)