最新Hadoop面试题汇总资料.docx
《最新Hadoop面试题汇总资料.docx》由会员分享,可在线阅读,更多相关《最新Hadoop面试题汇总资料.docx(25页珍藏版)》请在冰点文库上搜索。
最新Hadoop面试题汇总资料
单选题
1.下面哪个程序负责HDFS数据存储。
a)NameNodeb)Jobtrackerc)Datanoded)secondaryNameNodee)tasktracker答案Cdatanode
2.HDfS中的block默认保存几份?
a)3份b)2份c)1份d)不确定
答案A默认3分
3.下列哪个程序通常与NameNode在一个节点启动?
a)SecondaryNameNodeb)DataNodec)TaskTrackerd)Jobtracker答案D
4.Hadoop作者
a)MartinFowlerb)KentBeckc)Dougcutting
答案CDougcutting
5.HDFS默认BlockSize
a)32MBb)64MBc)128MB
答案:
1.X版本是64M
2.X版本是128M
6.下列哪项通常是集群的最主要瓶颈
a)CPUb)网络c)磁盘IOd)内存
答案:
C磁盘
7.DougCutting所创立的项目的名称都受到其家人的启发,以下项目不是由他创立的项目是
A.Hadoop
B.Nutch
C.Lucene
D.Solr
答案:
D
8.配置Hadoop时,JAVA_HOME包含在哪一个配置文件中
A.
B.
C.
D.答案:
hadoop-default.xml
hadoop-env.shhadoop-site.xmlconfiguration.xsl
B
9.Hadoop配置文件中,hadoop-site.xml显示覆盖hadoop-default.xml里的内容。
在版本0.20中,hadoop-site.xml
被分离成三个XML文件,不包括
A.conf-site.xml
B.mapred-site.xml
C.core-site.xml
D.hdfs-site.xml
答案:
A
10.HDFS默认的当前工作目录是/user/$USER,fs.default.name
的值需要在哪个配置文件内说明
A.mapred-site.xml
B.core-site.xml
C.
hdfs-site.xml
D.答案:
以上均不是
B
11.关于Hadoop单机模式和伪分布式模式的说法,正确是
A.
B.
C.
D.答案:
两者都起守护进程,且守护进程运行在一台机器上
单机模式不使用HDFS,但加载守护进程两者都不与守护进程交互,避免复杂性后者比前者增加了HDFS输入输出以及可检查内存使用情况
D
12.下列关于HadoopAPI的说法错误的是
A.
Hadoop的文件API不是通用的,只用于
HDFS文件系统
B.
Configuration类的默认实例化方法是以
HDFS系统的资源配置为基础的
C.
FileStatus对象存储文件和目录的元数据
D.
FSDataInputStream是java.io.DataInputStream的子类
答案:
A
13.HDFS的NameNode负责管理文件系统的命名空间,将所有的文件和文件夹的元数据保存在一个文件系统树中,这些信息也会在硬盘上保存成以下文件:
A.日志
B.命名空间镜像
C.两者都是
答案:
C
14.HDFS的namenode保存了一个文件包括哪些数据块,分布在哪些数据节点上,这些信息也存储在硬盘上。
A.正确
B.错误
答案:
B
知识点:
在系统启动的时候从数据节点收集而成的
15.Secondarynamenode就是namenode出现问题时的备用节
点
A.正确
B.错误
答案:
B
知识点:
它和元数据节点负责不同的事情。
其主要功能就是周期性将元数据节点的命名空间镜像文件和修改日志合并,以防日志文件过大。
合并过后的命名空间镜像文件也在Secondarynamenode保存了一份,以防namenode失败的时候,可以恢复。
16.HDFS的是基于流数据模式访问和处理超大文件的需求而开发的,默认的最基本的存储单位是64M,具有高容错、高
可靠性、高可扩展性、高吞吐率等特征,适合的读写任务是
A.一次写入,少次读写B.多次写入,少次读写C.一次写入,多次读写D.多次写入,多次读写答案:
C
17.HDFS无法高效存储大量小文件,想让它能处理好小文件,比较可行的改进策略不包括
A.利用SequenceFile、MapFile、Har等方式归档小文件
B.多Master设计
C.Block大小适当调小
D.调大namenode内存或将文件系统元数据存到硬盘里
答案:
D
18.关于HDFS的文件写入,正确的是
A.
B.
C.
D.答案:
支持多用户对同一文件的写操作用户可以在文件任意位置进行修改默认将文件块复制成三份存放复制的文件块默认都存在同一机架上C
19.Hadoopfs中的-get和-put命令操作对象是
A.
文件
B.
C.
两者都是
答案:
C
20.Namenode在启动时自动进入安全模式,在安全模式阶段,说法错误的是
A.B.C.
D.答案:
安全模式目的是在系统启动时检查各个DataNode上数据块的有效性根据策略对数据块进行必要的复制或删除当数据块最小百分比数满足的最小副本数条件时,会自动退出安全模式文件系统允许有修改
D
21.下列关于HDFS为存储MapReduce并行切分和处理的数
据做的设计,错误的是
A.
B.
C.
D.答案:
FSDataInputStream扩展了DataInputStream以支持随机读为实现细粒度并行,输入分片(InputSplit)应该越小越好一台机器可能被指派从输入文件的任意位置开始处理一个分片输入分片是一种记录的逻辑划分,而HDFS数据块是对输入数据的物理分割B
多选题
1.关于SecondaryNameNode哪项是正确的?
a)它是NameNode的热备
b)它对内存没有要求
c)它的目的是帮助NameNode合并编辑日志,减少NameNode启动时间
d)SecondaryNameNode应与NameNode部署到一个节点
答案CD
2.下列哪项可以作为集群的管理?
a)Puppetb)Pdshc)ClouderaManagerd)Zookeeper
答案1:
ABC
3.配置机架感知的下面哪项正确
a)如果一个机架出问题,不会影响数据读写
b)写入数据的时候会写到不同机架的DataNode中
c)MapReduce会根据机架获取离自己比较近的网络数据
答案ABC
具体可以参考
hadoop机架感知--加强集群稳固性,该如何配置hadoop机架感知
4.Client端上传文件的时候下列哪项正确
a)数据经过NameNode传递给DataNode
b)Client端将文件切分为Block,依次上传
c)Client只上传数据到一台DataNode,然后由NameNode负责Block复制工作
答案B
5.下列哪个是Hadoop运行的模式
a)单机版b)伪分布式c)分布式
答案ABC
6.Cloudera提供哪几种安装CDH的方法
a)Clouderamanagerb)Tarballc)Yumd)Rpm答案:
ABCD具体可以参考
HadoopCDH四种安装方式总结及实例指导
简答题
1.Hadoop集群可以运行的3个模式?
1)单机(本地)模式;
2)伪分布式模式;
3)全分布式模式;
2.单机(本地)模式中的注意点?
在单机模式(standalone)中不会存在守护进程,所有东西都运行在一个JVM上。
这里
同样没有DFS,使用的是本地文件系统。
单机模式适用于开发过程中运行MapReduce
程序,这也是最少使用的一个模式。
3.伪分布模式中的注意点?
伪分布式(Pseudo)适用于开发和测试环境,在这个模式中,所有守护进程都在同一台机器上运行。
4.全分布模式又有什么注意点?
N台主机组成一个Hadoop集群,
Namenode运行的主机,Datanode
全分布模式通常被用于生产环境,这里我们使用
Hadoop守护进程运行在每台主机之上。
这里会存在
运行的主机,以及tasktracker运行的主机。
在分布式环境下,主节点和从节点会分开。
5.Hadoop是否遵循UNIX模式?
是的,在UNIX用例下,Hadoop还拥有“conf”目录。
6.Hadoop的核心配置是什么?
Hadoop的核心配置通过两个xml文件来完成:
1,hadoop-default.xml;2,hadoop-site.xml。
这些文件都使用xml格式,因此每个xml中都有一些属性,包括名称和值,但是当下这些文件都已不复存在。
7.那当下又该如何配置?
Hadoop现在拥有3个配置文件:
1,core-site.xml;2,hdfs-site.xml;3,mapred-site.xml。
这些文件都保存在conf/子目录下。
8.fs.mapr.working.dir只是单一的目录?
fs.mapr.working.dir只是一个目录。
9.hdfs-site.xml的3个主要属性?
dfs.name.dir决定的是元数据存储的路径以及DFS的存储方式(磁盘或是远端)dfs.data.dir决定的是数据存储的路径
fs.checkpoint.dir用于第二Namenode
10.如何退出输入模式?
退出输入的方式有:
1,按ESC;2,键入:
q(如果你没有输入任何当下)或者键入:
wq
(如果你已经输入当下),并且按下Enter。
11.“jps”命令的用处?
这个命令可以检查Namenode、Datanode、TaskTracker、JobTracker是否正常工作。
12.如何重启Namenode?
点击stop-all.sh,再点击start-all.sh。
键入sudohdfs(Enter),su-hdfs(Enter),/etc/init.d/ha(Enter),及/etc/init.d/hadoop-0.20-namenodestart(Enter)。
13.Fsck的全名?
全名是:
FileSystemCheck。
14.mapred.job.tracker命令的作用?
可以让你知道哪个节点是JobTracker。
15./etc/init.d命令的作用是?
/etc/init.d说明了守护进程(服务)的位置或状态,其实是LINUX特性,和Hadoop关系不大。
16.如何在浏览器中查找Namenode?
如果你确实需要在浏览器中查找Namenode,你不再需要localhost:
8021,Namenode的端口号是50070。
17.hadoop-env.sh是用于做什么的?
hadoop-env.sh提供了Hadoop中.JAVA_HOME的运行环境。
18.Master文件是否提供了多个入口?
是的你可以拥有多个Master文件接口。
19.Hadoop-env.sh文件当下的位置?
hadoop-env.sh现在位于conf。
20.在Hadoop_PID_DIR中,PID代表了什么?
PID代表了“ProcessID”。
21./var/hadoop/pids用于做什么?
/var/hadoop/pids用来存储PID。
22.Hadoop需求什么样的网络?
Hadoop核心使用Shell(SSH)来驱动从节点上的服务器进程,并在主节点和从节点之间使用password-lessSSH连接。
23.全分布式环境下为什么需求password-lessSSH?
这主要因为集群中通信过于频繁,JobTracker需要尽可能快的给TaskTracker发布任务。
24.SSH工作的端口号是?
精品文档
SSH工作的端口号是NO.22,当然可以通过它来配置,22是默认的端口号。
25.为什么SSH本地主机需要密码?
在SSH中使用密码主要是增加安全性,在某些情况下也根本不会设置密码通信。
26.如果在SSH中添加key,是否还需要设置密码?
是的,即使在SSH中添加了key,还是需要设置密码。
27.假如Namenode中没有数据会怎么样?
没有数据的Namenode就不能称之为Namenode,通常情况下,Namenode肯定会有数据
28.当JobTracker宕掉时,Namenode会发生什么?
当JobTracker失败时,集群仍然可以正常工作,只要Namenode没问题。
29.是否可以在Windows上运行Hadoop?
你最好不要这么做,RedHatLinux或者是Ubuntu才是Hadoop的最佳操作系统。
在Hadoop安装中,Windows通常不会被使用,因为会出现各种各样的问题。
因此,Windows绝对不是Hadoop的推荐系统。
30.简要描述如何安装配置一个apache开源版hadoop,描述
即可,列出步骤更好
1.配置主机名
2.配置Hosts
3.配置面密码互通
4.安装JDK
5.安装hadoop
6.配置hadoop
(1)修改hadoop-env.sh
(2)修改core-site.xml
(3)修改hdfs-site.xml
(4)修改mapred-site.xml
(5)修改yarn-site.xml
(6)修改slaves
7.配置hadoop的环境变量
8.格式化namenode
32.请列出正常工作的hadoop集群中hadoop都需要启动哪些进程,他们的作用分别是什么?
NameNode--hdfs名字节点,存储hdfs元数据
SecondaryNameNode--辅助NameNode实现fsimage文件和edits文件的合并DataNode--存储数据的节点
ResourceManager--负责集群中所有资源的统一管理和分,它接收来自各个节点(NodeManager)的资源汇报信息,并把这些信息按照一定的策略分配给各个应用程序
NodeManager--是YARN中每个节点上的代理,它管理Hadoop集群中单个计算节点,包括与ResourceManger保持通信,监督Container的生命周期管理,监控每个Container的资源使用(内存、CPU等)情况,追踪节点健康状况,管理日志和不同应用程序用到的附属服务(auxiliaryservice)
33.请写出以下执行命令
1)杀死一个job?
hadoopjob–killjob_id
2)删除hdfs上的/tmp/aaa目录hadoopfs-rmdir/tmp/aaa
3加入一个新的存储节点和删除一个计算节点需要刷新集群状态命令?
hadoopbalance
5.请列出你所知道的hadoop调度器,并简要说明其工作方法?
(1)默认的调度器FIFO
(2)计算能力调度器CapacityScheduler
(3)公平调度器FairScheduler
(4)适用于异构集群的调度器LATE
(5)适用于实时作业的调度器DeadlineScheduler和Constraint-basedScheduler
6.请列出在你以前工作中所使用过的开发mapreduce的语言?
Java
7.当前日志采样格式为
34.hive有哪些方式保存元数据,各有哪些特点?
Hive原生使用derby作为元数据库,无法并发调用hive可以将Hive元数据保存在mysql数据库中远程服务器模式,在服务器端启动一个MetaStoreServer,客户端利用Thrift协议通过MetaStoreServer访问元数据库
35.请简述hadoop怎么样实现二级排序?
有两种方法进行二次排序,分别为:
bufferandinmemorysort和value-to-keyconversion。
对于bufferandinmemorysort,主要思想是:
在reduce()函数中,将某个key对应的所有value保存下来,然后进行排序。
这种方法最大的缺点是:
可能会造成outofmemory。
对于value-to-keyconversion,主要思想是:
将key和部分value拼接成一个组合key(实现WritableComparable接口或者调用setSortComparatorClass函数),这样reduce获取的结果便是先按key排序,后按value排序的结果,需要注意的是,用户需要自己实现Paritioner,以便只按照key进行数据划分
36.简述hadoop实现join的几种方法?
2.1reducesidejoin
reducesidejoin是一种最简单的join方式,其主要思想如下:
在map阶段,map函数同时读取两个文件File1和File2,为了区分两种来源的key/value数据对,对每条数据打一个标签(tag),比如:
tag=0表示来自文件File1,tag=2表示来自文件File2。
即:
map阶段的主要任务是对不同文件中的数据打标签。
在reduce阶段,reduce函数获取key相同的来自File1和File2文件的valuelist,然后对于同一个key,对File1和File2中的数据进行join(笛卡尔乘积)。
即:
reduce阶段进行实际的连接操作。
2.2mapsidejoin
之所以存在reducesidejoin,是因为在map阶段不能获取所有需要的join字段,即:
同一个key对应的字段可能位于不同map中。
Reducesidejoin是非常低效的,因为shuffle阶段要进行大量的数据传输。
Mapsidejoin是针对以下场景进行的优化:
两个待连接表中,有一个表非常大,而另一个表非常小,以至于小表可以直接存放到内存中。
这样,我们可以将小表复制多份,让每个maptask内存中存在一份(比如存放到hashtable中),然后只扫描大表:
对于大表中的每一条记录key/value,在hashtable中查找是否有相同的key的记录,如果有,则连接后输出即可。
为了支持文件的复制,Hadoop提供了一个类DistributedCache,使用该类的方法如下:
(1)用户使用静态方法DistributedCache.addCacheFile()指定要复制的文件,它的参数是文件的URI(如果是HDFS上的文件,可以这样:
hdfs:
//namenode:
9000/home/XXX/file,其中9000是自己配置的NameNode端口号)。
JobTracker在作业启动之前会获取这个URI列表,并将相应的文件拷贝到各个TaskTracker的本地磁盘上。
(2)用户使用DistributedCache.getLocalCacheFiles()方法获取文件目
录,并使用标准的文件读写API读取相应的文件。
2.3SemiJoin
SemiJoin,也叫半连接,是从分布式数据库中借鉴过来的方法。
它的产生动机是:
对于reducesidejoin,跨机器的数据传输量非常大,这成了join操作的一个瓶颈,如果能够在map端过滤掉不会参加join操作的数据,则可以大大节省网络IO。
实现方法很简单:
选取一个小表,假设是File1,将其参与join的key抽取出来,保存到文件File3中,File3文件一般很小,可以放到内存中。
在map阶段,使用DistributedCache将File3复制到各个TaskTracker上,然后将File2中不在File3中的key对应的记录过滤掉,剩下的reduce阶段的工作与reducesidejoin相同。
2.4reducesidejoin+BloomFilter
在某些情况下,SemiJoin抽取出来的小表的key集合在内存中仍然存放不下,这时候可以使用BloomFiler以节省空间。
BloomFilter最常见的作用是:
判断某个元素是否在一个集合里面。
它最重要的两个方法是:
add()和contains()。
最大的特点是不会存在falsenegative,即:
如果contains()返回false,则该元素一定不在集合中,但会存在一定的truenegative,即:
如果contains()返回true,则该元素可能在集合中。
因而可将小表中的key保存到BloomFilter中,在map阶段过滤大表,可能有一些不在小表中的记录没有过滤掉(但是在小表中的记录一定不会过滤掉),这没关系,只不过增加了少量的网络IO而已。
37.请用Java实现非递归二分查找?
publicstaticintbinarySearch(Integer[]srcArray,intdes){
//第一个位置.
intlow=0;
//最高位置.数组长度-1,因为下标是从0开始的.
inthigh=srcArray.length-1;
//当low"指针"和high不重复的时候.while(low<=high){
//中间位置计算,low+最高位置减去最低位置,右移一位,相当于除2.也可以用(high+low)/2
intmiddle=low+((high-low)>>1);
//与最中间的数字进行判断,是否相等,相等的话就返回对应的数组下标.if(des==srcArray[middle]){
returnmiddle;
//如果小于的话则移动最高层的"指针"
}elseif(d