经典大数据面试题及解析
Posted Data+Science+Insight
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了经典大数据面试题及解析相关的知识,希望对你有一定的参考价值。
经典大数据面试题及解析
1、下列哪个属性是hdfs-site.xml中的配置?
A、dfs.replication
B、fs.defaultFS
C、mapreduce.framework.name
D、yarn.resourcemanager.address
解答:dfs.replication是HDFS集群的副本个数,一般放置在hdfs-site.xml
2、Hadoop-2.6.5集群中的HDFS的默认的数据块的大小是?
A、32M
B、64M
C、128M
D、256M
解答:Hadoop2.x版本以前的默认数据块的大小是64M,到了Hadoop2.x版本以后。 默认的数据块大小就变成了128M,但是是可以更改的。并且是由客户端在上传文件到HDFS的时候指定的。HDFS集群会一直为这个文件保存指定的副本数
3、Hadoop-2.6.5集群中的HDFS的默认的副本块的个数是?
A、1
B、2
C、3
D、4
解答:HDFS集群采取分散存储 + 冗余存储的策略,用户上到HDFS集群的文件,HDFS集群会为它存储多份。默认是3份
4、如果我们现有一个安装2.6.5版本的hadoop集群,在不修改默认配置的情况下存储200个每个200M的文本文件,请问最终会在集群中产生多少个数据块(包括副本)?
A、200
B、40000
C、400
D、1200
解答:在默认情况下,HDFS集群默认存储文件3份,并且大文件会按照128M的数据块大小进行切割分散存储。所以题目中的总数据块有(200 * 2)= 400个。再加上会存储三份,所以 400 * 3 = 1200
5、以下哪个不是HDFS的守护进程?
A、secondarynamenode
B、datanode
C、mrappmaster/yarnchild
D、namenode
解答:namenode是HDFS集群的主节点,datanode是HDFS集群的从节点,secondarynamenode是HDFS集群启动的用来给namenode节点分担压力的角色。这个三个服务进程会一直启动着。MRAppMaster/YARNChild进行是只有在YARN集群运行了MapReduce程序之后才会启动的程序
6、请问以下哪个命令组成是错误的?
A、sbin/stop-dfs.sh
B、sbin/hdfs dfsadmin -report
C、bin/hadoop namenode -format
D、bin/hadoop fs -cat /hadoopdata/my.txt
解答:此题考查的是命令的目录结构。hadoop安装包提供了两个可执行脚本文件目录, 一个是bin,一个是sbin,sbin中放置了很多跟整个集群操作相关的命令,比如启动或者关闭集群的命令,bin目录中,主要放置客户端去使用Hadoop集群的相关命令,所以start, stop相关的命令都在sbin中, hadoop, hdfs, mapred, yarn 这些集群使用操作命令都在bin目录中
7、以下哪种不是Hive支持的数据类型?
A、Struct
B、Int
C、Map
D、Long
解答:Hive支持原生数据类型(TinyInt, SmallInt, Int, BigInt, Boolean, Float, Double, String),也支持复杂数据类型(Map,Array,Struct,Union),所以不支持Long,支持的是BigInt
8、现在在hadoop集群当中的配置文件中有这么两个配置,请问假如集群当中有一个节点宕机,主节点namenode需要多长时间才能感知到?
<property>
<name>dfs.heartbeat.interval</name>
<value>3</value>
</property>
<property>
<name>heartbeat.recheck.interval</name>
<value>2000</value>
</property>
A、26秒
B、34秒
C、30秒
D、20秒
解答:HDFS集群的datnaode掉线超时时长的计算公式为: timeout = 10 * dfs.heartbeat.interval + 2 * heartbeat.recheck.interval,不过heartbeat.recheck.interval的单位是ms,dfs.heartbeat.interval的单位是s
9、下面关于使用hive的描述中不正确的是?
A、hive中的join查询只支持等值链接,不支持非等值连接
B、hive的表一共有两种类型,内部表和外部表
C、hive默认仓库路径为/user/hive/warehouse/
D、hive支持数据删除和修改
解答:Hive不支持随机修改和删除。只支持绝大部分查询和批量追加数据。
10、HDFS集群中的namenode职责不包括?
A、维护HDFS集群的目录树结构
B、维护HDFS集群的所有数据块的分布、副本数和负载均衡
C、负责保存客户端上传的数据
D、响应客户端的所有读写数据请求
解答:NameNode是HDFS的管理节点,DataNode是HDFS集群的工作节点,所以用户上传的数据是由datanode进行保存的。NameNode是负责保存用户上传到的这些数据的元数据和维护HDFS的抽象目录树结构。也会响应客户端的所有读写请求
11、关于HDFS集群中的DataNode的描述不正确的是?
A、DataNode之间都是独立的,相互之间不会有通信
B、存储客户端上传的数据的数据块
C、一个DataNode上存储的所有数据块可以有相同的
D、响应客户端的所有读写数据请求,为客户端的存储和读取数据提供支撑
解答:DataNode是真正为HDFS集群存储数据的。HDFS集群的数据存储策略是分散+冗余的策略,由此可以看出,一个节点上,如果存储了两个一样的数据块,这样的冗余是没有任何意义的,所以一个节点上是不会存储一个数据块的多个副本的;DataNode之间是要进行通信的,因为数据上传的时候就是第一个副本节点和第二个副本节点建立连接传输数据,而不是客户端和第二个副本建立连接传送,所以答案是AC
12、HDFS集群中的DataNode的主要职责是?
A、维护HDFS集群的目录树结构
B、维护HDFS集群的所有数据块的分布、副本数和负载均衡
C、负责保存客户端上传的数据
D、响应客户端的所有读写数据请求
解答:NameNode是HDFS的管理节点,DataNode是HDFS集群的工作节点,所以用户上传的数据是由DataNode进行保存的。NameNode是负责保存用户上传到的这些数据的元数据和维护HDFS的抽象目录树结构。也会响应客户端的所有读写请求
13、MapReduce的Shuffle过程中哪个操作是最后做的?
A、 溢写
B、分区
C、排序
D、合并
解答:MapReduce编程模型分为Mapper和Reducer阶段,在mapper和reducer的中间还有一个shuffle阶段。但是Shuffle也分为MapperShuffle和ReducerShuffler两个阶段。这个Shuffle非常的重要,而且也是导致MapReduce执行效率低的一个重要原因。shuflle中的执行顺序是先分区,然后在溢写之前进行排序,最后溢出的多个磁盘文件会进行合并成一个大文件。
14、下面关于MapReduce的描述中正确的是?
A、MapReduce程序必须包含Mapper和Reducer
B、MapReduce程序的MapTask可以任意指定
C、MapReduce程序的ReduceTask可以任意指定
D、MapReduce程序的默认数据读取组件是TextInputFormat
解答:MapReducer编程模型中,可以没有Reducer,MapTask是由逻辑切片规则决定,虽然可以通过参数进行调整,但是不能随意设置,reduceTask数量可以随意设置,但是通常都是和业务挂钩,所以也基本做不到随心所欲的设置,除非是HashPartitioner的分区器。MapReduce编程模型中的默认数据读取组件是TextInputFormat和LineRecordReader
15、MapReduce编程模型中以下组件哪个是最后执行的?
A、Mapper
B、Partitioner
C、Reducer
D、RecordReader
解答:以上这四个MapReduce编程模型中的执行顺序是:recordReader --> mapper --> partitioner --> reducer
16、在MapReduce中,哪个组件是用户不指定也不会有默认的?
A、Combiner
B、OutputFormat
C、Partitioner
D、InputFormat
解答:在MapReduce编程模型中,Combiner是可有可无的组件,它的作用就是用来给mapTask的结果数据做局部合并以减少reduceTask接收的数据量,以减少网络数据传输。OutputFormat的默认组件是TextOutputFormat,InputFormat的默认组件是TextInputFormat,Partitioner的默认实现是HashPartitioner
17、下列哪种类型的文件不是HDFS集群的元数据存储格式?
A、fsimage
B、edits
C、edits_inprogress
D、blk_000003425
解答:D是存储在datanode节点上的数据块的命名格式。
18、YARN的调度算法不包括以下哪种?
A、FIFO Scheduler
B、Fair Scheduler
C、Capacity Scheduler
D、Stack Scheduler
解答:D不是
19、关于SecondaryNameNode哪项是正确的?
A、它是NameNode的热备
B、它对内存没有要求
C、它对目的是帮助NameNode合并编辑日志,减少NameNode的负担和冷启动时的加载时间
D、SecondaryNameNode应与NameNode部署到一个节点
解答:SecondaryNameNode是为了给namenode减轻压力的角色,工作职责就是定期合并磁盘元数据文件为序列化的镜像文件,以减少namenode冷启动时需要加载元数据的时间。在合并的时候也需要把之前的元数据都加载到内存,所以对内存也有一定的依赖,所以肯定不能和namenode启动在同一个节点。否则就起不到任何减轻压力的作用了。
20、下列关于使用MapReduce编程模型实现SQL中的join操作错误的是?
A、ReduceJoin可以实现内链接,也能实现各种外连接
B、ReduceJoin的join操作是在MapReduce程序中的reducer阶段完成的
C、MapJoin也适合各种join场景,也能实现内连接和各种外链接
D、MapJoin不会产生数据倾斜
解答:MapJoin和ReduceJoin,顾名思义,就是mapper阶段完成join操作叫MapJoin,在reducer阶段完成join操作叫ReduceJoin,reduceJoin能够实现一到多个条件的各种等值链接,但是不能实现非等值连接,因为太困难。并且容易出现数据倾斜的情况,所以,出现MapJoin,因为能省掉reducer阶段,所以能完美避免数据倾斜,但是由于该机制的特性,只适合用来做大表和小表数据之间的链接。
21、下列哪种业务场景中,不能直接使用Reducer充当Combiner使用?
A、sum求和
B、max求最大值
C、count求计数
D、avg求平均
解答:在不更改reducer业务逻辑的情况,以上四种,只有avg求平均是不能直接使用reducer充当combiner的。最终会造成业务结果不正确
22、下列关于配置机架感知的相关描述哪项不正确?
A、如果一个机架出问题,不会影响数据读写和正确性
B、写入数据的时候多个副本会写到不同机架的 DataNode 中
C、MapReduce 会根据机架的拓扑获取离自己比较近的数据块
D、数据块的第一个副本会优先考虑存储在客户端所在节点
解答:HDFS的副本存放策略中,数据块的第一个副本和第二个副本会存放在不同的机架中,但是第三个副本会优先考虑存放在跟第二个副本相同机架的不同节点中,也有可能存放在跟第一个副本相同机架的不同节点中。
23、Client端上传文件的时候下列哪项正确?
A、数据经过 NameNode 传递给 DataNode
B、Client端将文件切分为 Block,依次上传
C、Client只上传数据到一台DataNode,然后由NameNode负责Block复制
D、Client如果上传的时候没有上传成功指定的副本数,则整次上传不成功
解答:HDFS集群在上传数据的时候,请求由namenode响应是没错,但是传输数据到datanode节点的时候是直接client直接和datanode进行通信,而不用先把数据传输到namenode再传送到datanode。这样实现会极大的增加namenode节点的负担。
24、下列关于HDFS的描述正确的是?
A、如果 NameNode 宕机,SecondaryNameNode 会接替它使集群继续工作
B、HDFS集群支持数据的随机读写
C、NameNode磁盘元数据不保存Block的位置信息
D、DataNode通过长连接与NameNode保持通信
解答:SecondaryNameNode并不是namenode节点的备份。所以A错。存储在HDFS集群上的数据是不支持随机修改和删除的,只支持追加。HDFS集群的主节点namenode会保存元数据,在内存中有一份完整的,在磁盘中也有一份完整的。但是磁盘中的元数据并不包括,每个数据块的多个副本到底存储在那些节点上的信息。当HDFS集群启动完毕以后,datanode会向namenode进行汇报数据块的信息,所以namenode才能通过这些汇报信息统计得出所有数据块的副本存放信息。在内存当中会有,但是磁盘中是没有的。namenode和datanode之间的通信是基于一种心跳机制。该机制不是长连接。是短连接形式。每次发送一个数据包(自身状态信息 + 数据块信息)即可。
25、一个MapReduce程序中的MapTask的个数由什么决定?
A、输入的总文件数
B、客户端程序设置的mapTask的个数
C、FileInputFormat.getSplits(JobContext job)计算出的逻辑切片的数量
D、输入的总文件大小/数据块大小
解答:MapReduce编程模型中的mapTask的并行度决定机制是由:FileInputFormat.getSplits(JobContext job)决定的。该方法的返回值是List<InputSplit> splits,这个结果集合中的每个InputSplit就是一个逻辑输入切片,每个逻辑输入切片在默认情况下是会要启动一个mapTask任务进行计算的。
26、以下描述错误的是?
A、SequenceFile可以用来作为小文件的合并存储容器
B、TextInputFormat的key是LongWritable类型的
C、CombineFileInputFormat是抽象类
D、TextInputFormat的key是指该记录在文件中的行号
解答:当MapReduce程序遇到需要计算大量小文件时,可选的解决方案有SequenceFile, 有CombineFileInputFormat(抽象类),有归档策略。默认的TextInputFormat中规定的key-value的类型分别是LongWritable和Text,其中,value表示逐行读取的一行文本数据,key表示这一行在该文件中的起始偏移量, 不是行号
27、以下关于新旧 MapReduce API 的描述错误的是?
A、新API放在org.apache.hadoop.mapreduce包中,而旧API则是放在org.apache.hadoop.mapred中
B、新API倾向于使用接口方式,而旧API倾向于使用抽象类
C、新API使用Configuration,而旧API使用JobConf来传递配置信息
D、新API可以使用Job对象来提交作业
解答:在新API中,原来的大量接口都被改成了抽象类。所以使用新API编写MR程序时,都是由实现接口变成集成抽象类。
28、以下描述错误的是?
A、输入分片InputSplit其实是对数据的引用
B、MultipleInputs可以设置多个数据源以及它们对应的输入格式
C、可以通过重载isSplitable()方法来避免文件分片
D、ReduceTask需要等到所有的map输出都复制完才进行Merge
解答:ReduceTask在mapper阶段的所有mapTask还没有执行完毕的时候,就会预先启动,然后去已经执行完毕的mapTask节点拉取该reduceTask要执行的数据,执行预先合并。而不是等到所有的mapTask都执行完毕之后才开启reduceTask拉取文件进行merge操作
29、以下哪个组件可以指定对key进行Reduce分发的策略?
A、RecordReader
B、Combiner
C、Partitioner
D、FileInputFormat
解答:Partitioner组件就是负责给mapTask节点输出的数据进行分发的。 默认的实现是HashParitioner
30、执行一个job,如果这个job的输出路径已经存在,那么程序会?
A、覆盖这个输出路径
B、抛出警告,但是能够继续执行
C、抛出一个异常,然后退出
D、创建一个新的输出路径
解答:MapReduce编程模型中的输出目录必须是不存在的目录。否则程序抛出异常,并且退出运行。
31、HDFS的是基于流数据模式访问和处理超大文件的需求而开发的,默认的最基本的存储单位是64M,具有高容错、高可靠性、高可扩展性、高吞吐率等特征,适合的读写任务是?
A、一次写入,少次读写
B、多次写入,少次读写
C、一次写入,多次读写
D、多次写入,多次读写
解答:HDFS的设计初衷就是为将来的海量数据的分布式计算做铺垫的,所以HDFS是一次写入,多次读出的场景
32、Namenode在启动时自动进入安全模式,在安全模式阶段,说法错误的是?
A、安全模式目的是在系统启动时检查各个DataNode上数据块的有效性
B、根据策略对数据块进行必要的复制或删除
C、当数据块最小百分比数满足的最小副本数条件时,会自动退出安全模式
D、文件系统允许有修改
解答:HDFS文件系统上的数据是不可以进行更改的。
33、MapReduce框架提供了一种序列化机制,支持这种序列化的类能够在Map和Reduce过程中充当键或值,以下说法错误的是?
A、实现Writable接口的类是值
B、实现WritableComparable<T>接口的类可以是值或键
C、Hadoop的基本类型Text并不实现WritableComparable<T>接口
D、键和值的数据类型可以超出Hadoop自身支持的基本类型
解答:Hadoop中的基本类型和包装类型都有可能作为MapReduce编程中的key和value,所以都必须要进行序列化,都要事先Writable,如果作为key,那就必须实现WritableComparable接口。Text类也是实现了WritableComparable这个接口的
34、下列关于HDFS为存储MapReduce并行切分和处理的数据做的设计,错误的是?
A、FSDataInputStream扩展了DataInputStream以支持随机读
B、为实现细粒度并行,输入分片(InputSplit)应该越小越好
C、一台机器可能被指派从输入文件的任意位置开始处理一个分片
D、输入分片是一种记录的逻辑划分,而数据块是对输入数据的物理分割
解答:逻辑输入切片并不是越小越好,因为太小会增加启动的MapTask的个数,会导致每个MapTask所处理的数量会降低,从而降低了服务器的处理数据的性能。
35、有关MapReduce的输入输出,说法错误的是?
A、链接多个MapReduce作业时,序列文件是首选格式
B、FileInputFormat中实现的getSplits()可以把输入数据划分为分片,分片数目和大小任意定义
C、想完全禁止输出,可以使用NullOutputFormat
D、每个reduce需将它的输出写入自己的文件中,输出无需分片
解答:FileInputFormat的分片大小是可以任意设置,可以调整的,输入分片数目不可以随意设置,是根据分片大小和文件计算出来的。
36、关于HDFS的文件写入,正确的是?
A、支持多用户对同一文件的写操作
B、用户可以在文件任意位置进行修改
C、默认将文件块复制成三份分别存放
D、复制的文件块默认都存在同一机架的多个不同节点上
解答:HDFS集群的文件默认存储3份
参考答案:
1-5:ACCDC
6-10:BDBDC
11-15:CCDDC
16-20:ADDCC
21-25:DBBCC
26-30:DBDCC
31-35:CDCBB
36-36:C
以上是关于经典大数据面试题及解析的主要内容,如果未能解决你的问题,请参考以下文章