Hadoop大数据面试题

一、hadoop操做命令mv 对比copy?算法

mv 性能更高,copy会改变时间属性,mv不会。数据库

 

二、操做HDFS有哪几种方式?apache

JAVA API 、Web UI 、Shell数组

 

三、MR的执行流程(yarn的工做流程、做业执行过程)?缓存

客户端提交一个做业,ResourceManager为该做业分配第一个Container,并与对应的NodeManager通讯,要求NodeManager在这个Container内启动做业的APPlicationMaster。安全

APPlicationMaster首先向ResourceManager注册本身,而后便采用轮询的方式经过RPC协议向ResourceManager申请资源。一旦成功便会与对应的NodeManager通讯,要求它启动Container来运行Maptask和Reducetask。架构

NodeManager经过脚本启动任务后,任务会经过RPC协议向APPlicationMaster报告本身的进度和执行状况,客户端能够经过APPlicationMaster来获知任务信息。app

任务完成后,APPlicationMaster向ResourceManager注销并关闭本身。框架

四、yarn的几个重要命令?机器学习

yarn application --list   列出任务

yarn application -kill 任务id  杀死任务

yarn application -status 任务id  查看任务状态

 

五、MR1对比MR2?

MR1 :计算+资源调度  两个进程 JobTracker  TaskTracker(Map Task  /Reduce Task)

MR2 :计算  写代码打成jar包提交到yarn上运行

 

六、Reduce任务开始运行时Map任务必定运行完了?

否 有些任务的Map任务和Reduce任务会共同运行的

 

七、一个MR任务完成,任务输出目录下输出文件有多少个?

一个_SUCCESS文件,代表任务执行成功

一个Reduce任务对应一个输出文件(假设输出文件都小于128MB),Reudce任务数量能够调整

故输出目录下文件个数为Reduce任务的数量加一

 

八、Hive中控制Map数?

一个input split分片对应一个Map,默认状况下,input split分片大小和hdfs上的blocksize同样大,分片存储的是否是数据自己,而是记录数据的位置的数组和分片长度

小文件太多将小文件合并后下降Map数提升效率

文件大小合适但可能只有一两个字段,每一个字段对应千万条记录,将该文件拆分,增长Map数提升效率。

 

九、Hive中控制Reduce数?

Reduce多少个输出文件就有多少个

set hive.exec.reducers.bytes.per.reducer=100000000; 设置每一个Reduce处理的数据量为100兆(默认为1G),这意味着120兆的Map输出文件会被拆分红两个Reduce

set mapred.reduce.tasks = 15; 设置任务的Reduce数量

 

十、什么状况下只有一个Reduce?

Reduce输入数据量小于每一个Reduce处理的数据量、设置的Reduce数为一、没有groupby汇总、用了Order by 、有笛卡尔积

 

十一、shuffle过程?

shuffle在MapReduce中有,在spark中也有,其实他们两个是不一样的。
MapReduce中的shuffle是Map以后Reduce以前的一个操做。Map结束后数据会首先写入一个环形缓冲区中,这个环形缓冲区默认100M,每次当环形缓冲区达到80%满的时候,会先将数据进行一个二次快速排序(先按分区排,再按key排),而后将数据都会溢写到磁盘上生成一个新文件,每个map对应的新文件可能有多个,在reduce开始前,会先将全部溢写生成的小文件进行一个merge操做,将它们合并成一个大文件,在这个大文件内包括数据索引和数据自己。若是在Reducer以前有Combiner操做的话,数据送入到Reducer以前还会进行Combiner操做。
Spark与Hadoop之间的Shuffle过程大体相似,Spark的Shuffle的先后也各有一次聚合操做。可是也有很明显的差异:Hadoop的shuffle过程是明显的几个阶段:map,spill,merge,shuffle,sort,reduce等,是按照流程顺次执行的,而Spark不同,由于Spark的Shuffle没有这么明确的功能阶段,全部的这些功能都依靠算子完成。Spark与Hadoop的Shuffle之间第二个明显的差异是:Hadoop的Shuffle是sort-based类型的,而Spark的Shuffle是hash-based类型的,这意味着数据进入Reduce端时不会进行预排序。

十二、hdfs文件读流程?
a、客户端打开dfs文件系统,dfs文件系统创建与NN的RPC通讯机制,NN查询所需读取文件的元信息并将其返回给客户端。

    b、客户端打开一个输入流,输入流经过文件元信息在DN上查找对应数据块,查找完毕调用关闭输入流并将数据块拼成文件返回给客户端。

 

1三、hdfs文件写流程?
 a、客户端打开dfs文件系统,dfs文件系统创建与NN的RPC通讯机制,向NN请求写入文件,NN此时会建立一个空白文件条目。
      b、客户端打开一个输出流,输出流对文件进行切块,再按照特定算法将数据块循环上传到DN上(DN经过水平地址是数据块到达冗余度要求),上传完毕关闭输出流并刷新缓存。
      c、上传完毕后客户端经过DFS文件系统RPC通讯机制告知NN文件上传完毕。

 

1四、谈一谈你对hadoop的了解。
对hadoop能够分为广义上的和狭义上的两种。
狭义上的hadoop只是个hadoop这个开源软件自己,它包括支持其余hadoop模块的通用应用程序hadoop common、分布式文件系统hdfs、做业调度和集群资源管理框架yarn以及基于yarn的分布式计算系统mapreduce。

广义上的hadoop则知道的hadoop的生态圈,不只包括狭义上的hadoop,还包括可扩展的、支持大表的结构化数据存储分布式数据库HBase,分布式协调服务框架ZooKeeper、基于内存的数据处理框架Spark、数据仓库软件Hive、可扩展的机器学习和数据挖掘框架Mahout等。

 

1五、hadoop1.x和hadoop2.x的区别。
只要有两个大的区别:
1、hadoop1.x中没有提供单点故障的解决方案,一旦集群的最高层管理JobTracker挂掉,那么整个集群就瘫痪了。而在hadoop2.x中,咱们能够经过Zookeeper来实现hadoop的HA,这样就完美地解决了单点故障问题。

2、hadoop1.x中做业调度与集群的资源管理由MapReduce来完成,这样就限制了hadoop的发展。在Hadoop2.x版本中,做业调度与集群的资源管理功能从MapReduce中剥离出来造成了yarn,这就使得hadoop能被完美地兼容Spark和Storm。

 

1六、yarn的架构设计?

 

RM: 

        Resource Scheduler:为应用程序分配资源,资源以Container为单位,有多种Container,如FIFO Scheduler(先进先出,默认)、Capacity Scheduler(容器调度)、Fair Scheduler(公平调度,每一个任务有相同的优先级)

        APPlications Manager:管理yarn集群的全部应用程序,有多个

NM: 

     Container:一个NM能够运行多个Container,一个Container只能够运行一个Container,能够是APPcalication Master|map task | reduce task三者之一,Container中封装有内存和CPU,分配资源以Container为单位。

APPcalication Master:

       一个应用程序只有一个APPcalication Master,运行在Container之中,负责为任务申请资源,监控任务的运行,任务失败时重启任务

 

1七、虚拟内存与物理内存

 

A.高度计算 容许挂 不容许慢时,将vm.swappiness 的值设置较大,使yarn使用虚拟内存的积极性下降

B.通常计算 容许慢 不容许挂时,将vm.swappiness 的值可设置较小,使yarn使用虚拟内存的积极性增长

 

1八、yarn的调优

 

 

1九、cdh版本的hadoop和apache版本的hadoop有什么区别。
apache的hadoop是原生的hadoop,而cdh则是cloudera公司的hadoop发行版。CDH对Hadoop版本的
划分很是清晰,Apache版本则混乱得多。CDH比Apache在兼容性,安全性,稳定性上有加强。CDH支持Kerberos安全认证,Apache则使用简陋的用户

名匹配认证.CDH支持多种方式安装,Apache 只支持Tar包安装。

 

 

20、hdfs的启动顺序。
进程方面:NN->DN->SNN->RM->NM

 

启动过程:加载文件元信息->加载操做日志->保存检查点->进入安全模式->退出安全模式,启动完成

 

2一、safemode?