hadoop 面试题分享 部分有答案(自己总结的)
MapReduce的原理
(1)MapReduce 是一种分布式计算框架,由 Google 提出,主要用于搜索领域,以解决海量数据的计算问题。(分布式存储和分布式计算发轫于 Google 这样的公司是不足为奇的)
(2)MapReduce 由两个阶段组成:Map (开始)和 Reduce(结束),用户只需实现 map() 和 reduce() 两个函数,即可实现分布式计算,十分便捷
输入文件来自于:HDFS
(3)这两个函数的形参是 key、value,表示函数的输入信息。
执行流程:
构造[K1, V1]
Map:[K1, V1] ⇒ [K2, V2]
分区
分组:[K2, V2] ⇒ [K2, {Vs}](将相同 key 的 values 置于一个集合中)
规约
copy 到节点,排序
Reduce:[K2, {Vs}] ⇒ [K3, V3]
保存
mapreduce 作业,不使用 reduce 来输出,用什么能代替 reduce 的功能
每个reduce输出一个结果文件,有多少reduce就会有多少输出文件,然后会有一些其他文件。不会合并的,导出的时候可以用命令行进行合并
hive 如何调优?
1. 设置执行引擎
set hive.execution.engine=mr;
set hive.execution.engine=spark;
如果设置执行引擎为mr,那么就会调用Hadoop的maprecude来运行需要执行job的程序;如果设置执行引擎为spark,那么就会调用spark来执行任务。有条件的话,就设置执行引擎为Spark,因为实在是运行的比Hadoop的MapReduce快了很多。
2. 针对mr调优,可以设置参数(针对map端):
set mapred.max.split.size=1000000;
3. 针对mr调优,可以设置参数(针对reduce端)
mapreduce.job.reduces=2(可手工设置)
Hive.exec.reducers.max (hive设置的最大可用reducer)
hive.exec.reducers.bytes.per.reducer (hive默认每1G文件分配一个reduce)
分配算法
num_reduce_tasks=min[maxReucers,input.size/perReducer]
HBase写数据的原理
1、客户端向hregionServer请求写数据
2、hregionServer将数据先写入hlog中。
3、hregionServer将数据后写入memstore中。
4、当内存中的数据达到阈值64M的时候,将数据Flush到硬盘中,并同时删除内存和hlog中的历史数据。
5、将硬盘中数据通过HFile来序列化,再将数据传输到HDFS进行存储。并对Hlog做一个标记。
6、当HDFS中的数据块达到4块的时候,Hmaster将数据加载到本地进行一个合并(如果合并后数据的大小小于256M则当数据块再次达到4块时(包含小于256M的数据块)将最新4块数据块再次进行合并,此时数据块大于256M)。
7、若数据块大于256M,则将数据重新拆分,将分配后的region重新分配给不同的hregionServer进行管理。
8、当hregionServer宕机后,将hregionServer上的hlog重新分配给不同的hregionServer进行加载(修改.META文件中关于数据所在server的信息)。注意:hlog会同步到HDFS中。
读数据的流程
1、通过zk来获取ROOT表在那个节点上,然后进一步通过-ROOT表和-META表来获取最终的位置信息。
2、数据从内存和硬盘合并后返回到客户端。
hbase 宕机如何处理
HBase的故障恢复我们都以RegionServer宕机恢复为例,引起RegionServer宕机的原因各种各样,有因为Full GC导致、网络异常导致、官方Bug导致(close wait端口未关闭)以及DataNode异常导致等等。
HBase故障恢复的最大看点就在于如何通过HLog回放补救丢失数据。如果不幸一旦发生RegionServer宕机或者其他异常,这种设计可以从HLog中进行日志回放进行数据补救,保证数据不丢失。
宕机RegionServer上的所有Region重新分配到集群中其他正常RegionServer上去,再根据HLog进行丢失数据恢复,恢复完成之后就可以对外提供服务,整个过程都是自动完成的,并不需要人工介入。
、hadoop 运转的原理 即是 MapReduce的原理
Hdfs主要模块:NameNode、DataNode
Yarn主要模块:ResourceManager、NodeManager
HDFS 存储的机制
集群中的每个服务器都运行一个DataNode后台程序,这个后台程序负责把HDFS数据块读写到本地的文件系统。当需要通过客户端读/写某个 数据时,先由NameNode告诉客户端去哪个DataNode进行具体的读/写操作,然后,客户端直接与这个DataNode服务器上的后台程序进行通 信,并且对相关的数据块进行读/写操作。
hadoop 中 Combiner 的效果
combiner 也是一个 reduce,它可以削减 map 到 reudce 的数据传输,进步 shuff 速度。
牢记平均值不要用。需求输入=map 的输出,输出=reduce 的输入
Linux 下 hadoop的常用命令
1.上传文件
1)hadoop fs -put words.txt /path/to/input/
2)hdfs dfs -put words.txt /path/wc/input/
2.获取hdfs中的文件
hadoop fs -get /path/wc/input/words.txt
3.合并下载多个文件
hadoop fs -getmerge /path/wc/input/words.txt /path/wc/input/words2.txt
4.查看某目录下所含文件
1)hadoop fs -ls /path/wc/input/
2)hadoop fs -ls hdfs://node1:9000/path/wc/input/
5.查看文件内容
hadoop fs -cat /path/wc/input/words.txt
6.显示一个文件的末尾
hadoop fs -tail /weblog/test.log
7.以字符形式打印一个文件的内容
hadoop fs -text /weblog/test.log
8.在hdfs上创建目录
hadoop fs -mkdir -p /aaa/bbb/cc/dd
9.从本地剪切粘贴到hdfs
hadoop fs -moveFromLocal /home/hadoop/a.txt /aaa/bbb/cc/dd
10.从hdfs剪切粘贴到本地
hadoop fs -moveToLocal /aaa/bbb/cc/dd /home/hadoop/a.txt
11.从本地文件系统中拷贝文件到hdfs路径去
hadoop fs -copyFromLocal /home/hadoop/a.txt /aaa/bbb/cc/dd
12.从hdfs拷贝到本地
hadoop fs -copyToLocal /aaa/bbb/cc/dd /home/hadoop/a.txt
13.从hdfs的一个路径拷贝hdfs的另一个路径
hadoop fs -cp /aaa/test1.txt /bbb/test2.txt
14.在hdfs目录中移动文件
hadoop fs -mv /aaa/jdk.tar.gz /
15.追加一个文件到已经存在的文件末尾
1)hadoop fs -appendToFile hello.txt hdfs://node1:9000/hello.txt
2)hadoop fs -appendToFile hello.txt /hello.txt
16.离开hadoop的 安全模式(系统处于只读状态,namenode不会处理任何块的复制和删除命令)
hadoop dfsadmin -safemode leave
17.删除目录及其里面内容
hadoop fs -rmr /path/wc/input/words.txt
18.删除空目录
hadoop fs -rmdir /aaa/bbb/ccc
19.与linux文件系统中的用法一样,对文件所属权限
1)hadoop fs -chmod 666 /hello.txt
2)hadoop fs -chown someuser:somegrp /hello.txt
20.统计文件系统的可用空间信息
hadoop fs -df -h /
21.统计文件夹的大小信息
hadoop fs -du -s -h /aaa/*
22.统计一个指定目录下的文件节点数量
hadoop fs -count /aaa/
23.设置hdfs中文件的副本数量
hadoop fs -setrep 3 /aaa/test.txt
Map Reduce 的益写
MapReduce是一个分布式计算框架,用于大规模数据集的并行运算。简单地说,MapReduce就是”任务的分解与结果的汇总”:将一个大的数据处理任务划分成许多个子任务,并将这些子任务分配给各个节点并行处理,然后通过整合各个节点的中间结果,得到最终结果。
MapReduce是主从架构,在master上跑的是JobTracker/ResourceManager,负责资源分配与任务调度;而各个slave上跑的是TaskTracker/NodeManager,负责执行任务,并定期向master汇报最新状态与执行进度。