2021最全⼤数据⾯试题汇总---hadoop篇,附答案!
⼤数据⾯试题来了! 本篇⽂章搜集了常见的⼤数据⾯试题以及答案,包含了
Hadoop,Flume,Hbase,Hive,kafka,spark,zookeeper等⽅⾯的内容,助同学们收到⼼仪的Offer!
1.hadoop⾯试题合集
1、集的最主要瓶颈
磁盘IO
2、Hadoop运⾏模式
单机版、伪分布式模式、完全分布式模式
3、Hadoop⽣态圈的组件并做简要描述
1)Zookeeper:是⼀个开源的分布式应⽤程序协调服务,基于zookeeper可以实现同步服务,配置维护,命名服务。
2)Flume:⼀个⾼可⽤的,⾼可靠的,分布式的海量⽇志采集、聚合和传输的系统。
3)Hbase:是⼀个分布式的、⾯向列的开源数据库, 利⽤Hadoop HDFS作为其存储系统。
4)Hive:基于Hadoop的⼀个数据仓库⼯具,可以将结构化的数据档映射为⼀张数据库表,并提供简单的sql 查询功能,可以将sql语句转换为MapReduce任务进⾏运⾏。
5)Sqoop:将⼀个关系型数据库中的数据导进到Hadoop的 HDFS中,也可以将HDFS的数据导进到关系型数据库中。
4、解释“hadoop”和“hadoop ⽣态系统”两个概念
Hadoop是指Hadoop框架本⾝;hadoop⽣态系统,不仅包含hadoop,还包括保证hadoop框架正常⾼效运⾏其他框架,⽐如zookeeper、Flume、Hbase、Hive、Sqoop等辅助框架。
5、请列出正常⼯作的Hadoop集中Hadoop都分别需要启动哪些进程,它们的作⽤分别是什么?
1)NameNode:它是hadoop中的主服务器,管理⽂件系统名称空间和对集中存储的⽂件的访问,保存有metadate。
2)SecondaryNameNode:它不是namenode的冗余守护进程,⽽是提供周期检查点和清理任务。帮助NN合并editslog,减少NN启动时间。
3)DataNode:它负责管理连接到节点的存储(⼀个集中可以有多个节点)。每个存储数据的节点运⾏⼀个datanode守护进程。
4)ResourceManager(JobTracker):JobTracker负责调度DataNode上的⼯作。每个DataNode有⼀个TaskTracker,它们执⾏实际⼯作。
5)NodeManager:(TaskTracker)执⾏任务。
6)DFSZKFailoverController:⾼可⽤时它负责监控NN的状态,并及时的把状态信息写⼊ZK。它通过⼀个独⽴线程周期性的调⽤NN上的⼀个特定接⼝来获取NN的健康状态。FC也有选择谁作为Active NN的权利,因为最多只有两个节点,⽬前选择策略还⽐较简单(先到先得,轮换)。
7)JournalNode:⾼可⽤情况下存放namenode的editlog⽂件。
6、 HDFS 中的 block 默认保存⼏份?
默认保存3份
7、HDFS 默认 BlockSize 是多⼤?
默认64MB
8、负责HDFS数据存储的是哪⼀部分?
DataNode负责数据存储
9、SecondaryNameNode的⽬的是什么?
他的⽬的使帮助NameNode合并编辑⽇志,减少NameNode 启动时间
10、hadoop的块⼤⼩,从哪个版本开始是128M
Hadoop1.x都是64M,hadoop2.x开始都是128M。
11、HDFS的存储机制
HDFS存储机制,包括HDFS的写⼊数据过程和读取数据过程两部分 HDFS写数据过程
  1)客户端通过Distributed FileSystem模块向NameNode请求上传⽂件,NameNode检查⽬标⽂件是否已存在,⽗⽬录是否存在。
  2)NameNode返回是否可以上传。
  3)客户端请求第⼀个 block上传到哪⼏个datanode服务器上。
  4)NameNode返回3个datanode节点,分别为dn1、dn2、dn3。
  5)客户端通过FSDataOutputStream模块请求dn1上传数据,dn1收到请求会继续调⽤dn2,然后dn2调⽤dn3,将这个通信管道建⽴完成。
  6)dn1、dn2、dn3逐级应答客户端。
  7)客户端开始往dn1上传第⼀个block(先从磁盘读取数据放到⼀个本地内存缓存),以packet为单位,dn1收到⼀个packet就会传给dn2,dn2传给dn3;
dn1每传⼀个packet会放⼊⼀个应答队列等待应答。
  8)当⼀个block传输完成之后,客户端再次请求NameNode上传第⼆个block的服务器。(重复执⾏3-7步)。
  HDFS读数据过程
  1)客户端通过Distributed FileSystem向NameNode请求下载⽂件,NameNode通过查询元数据,到⽂件块所在的DataNode地址。
  2)挑选⼀台DataNode(就近原则,然后随机)服务器,请求读取数据。
  3)DataNode开始传输数据给客户端(从磁盘⾥⾯读取数据输⼊流,以packet为单位来做校验)。
  4)客户端以packet为单位接收,先在本地缓存,然后写⼊⽬标⽂件。
12、econdary namenode⼯作机制
1)第⼀阶段:NameNode启动
  (1)第⼀次启动NameNode格式化后,创建fsimage和edits⽂件。如果不是第⼀次启动,直接加载编辑⽇志和镜像⽂件到内存。
  (2)客户端对元数据进⾏增删改的请求。
  (3)NameNode记录操作⽇志,更新滚动⽇志。
  (4)NameNode在内存中对数据进⾏增删改查。
2)第⼆阶段:Secondary NameNode⼯作
  (1)Secondary NameNode询问NameNode是否需要checkpoint。直接带回NameNode是否检查结果。
  (2)Secondary NameNode请求执⾏checkpoint。
  (3)NameNode滚动正在写的edits⽇志。
  (4)将滚动前的编辑⽇志和镜像⽂件拷贝到Secondary NameNode。
  (5)Secondary NameNode加载编辑⽇志和镜像⽂件到内存,并合并。
  (6)⽣成新的镜像⽂件fsimage.chkpoint。
  (7)拷贝fsimage.chkpoint到NameNode。
  (8)NameNode将fsimage.chkpoint重新命名成fsimage。
NameNode与SecondaryNameNode 的区别与联系?
1)区别
  (1)NameNode负责管理整个⽂件系统的元数据,以及每⼀个路径(⽂件)所对应的数据块信息。
  (2)SecondaryNameNode主要⽤于定期合并命名空间镜像和命名空间镜像的编辑⽇志。
2)联系:
  (1)SecondaryNameNode中保存了⼀份和namenode⼀致的镜像⽂件(fsimage)和编辑⽇志(edits)。
  (2)在主namenode发⽣故障时(假设没有及时备份数据),可以从SecondaryNameNode恢复数据。
13、HDFS组成架构
架构主要由四个部分组成,分别为HDFS Client、NameNode、DataNode和Secondary NameNode。下⾯我们分别介绍这四个组成部分。
1)Client:就是客户端。
  (1)⽂件切分。⽂件上传HDFS的时候,Client将⽂件切分成⼀个⼀个的Block,然后进⾏存储;
  (2)与NameNode交互,获取⽂件的位置信息;
  (3)与DataNode交互,读取或者写⼊数据;
  (4)Client提供⼀些命令来管理HDFS,⽐如启动或者关闭HDFS;
  (5)Client可以通过⼀些命令来访问HDFS;
2)NameNode:就是Master,它是⼀个主管、管理者。
  (1)管理HDFS的名称空间;
  (2)管理数据块(Block)映射信息;
  (3)配置副本策略;
  (4)处理客户端读写请求。
3)DataNode:就是Slave。NameNode下达命令,DataNode执⾏实际的操作。
  (1)存储实际的数据块;
  (2)执⾏数据块的读/写操作。
4)Secondary NameNode:并⾮NameNode的热备。当NameNode挂掉的时候,它并不能马上替换NameNode并提供服务。
  (1)辅助NameNode,分担其⼯作量;
  (2)定期合并Fsimage和Edits,并推送给NameNode;
  (3)在紧急情况下,可辅助恢复NameNode。
14、HAnamenode 是如何⼯作的?
ZKFailoverController主要职责
  1)健康监测:周期性的向它监控的NN发送健康探测命令,从⽽来确定某个NameNode是否处于健康状态,如果机器宕机,⼼跳失败,那么zkfc就会标记它处于⼀个不健康的状态。
  2)会话管理:如果NN是健康的,zkfc就会在zookeeper中保持⼀个打开的会话,如果NameNode同时还是Active状态的,那么zkfc还会在Zookeeper中占有⼀个类型为短暂类型的znode,当这个NN挂掉
时,这个znode将会被删除,然后备⽤的NN,将会得到这把锁,升级为主NN,同时标记状态为Active。
  3)当宕机的NN新启动时,它会再次注册zookeper,发现已经有znode锁了,便会⾃动变为Standby状态,如此往复循环,保证⾼可靠,需要注意,⽬前仅仅⽀持最多配置2个NN。
  4)master选举:如上所述,通过在zookeeper中维持⼀个短暂类型的znode,来实现抢占式的锁机制,从⽽判断那个NameNode为Active状态
15、谈谈Hadoop序列化和反序列化及⾃定义bean对象实现序列化?
1)序列化和反序列化
  (1)序列化就是把内存中的对象,转换成字节序列(或其他数据传输协议)以便于存储(持久化)和⽹络传输。
  (2)反序列化就是将收到字节序列(或其他数据传输协议)或者是硬盘的持久化数据,转换成内存中的对象。
  (3)Java的序列化是⼀个重量级序列化框架(Serializable),⼀个对象被序列化后,会附带很多额外的信息(各种校验信
息,header,继承体系等),不便于在⽹络中⾼效传输。所以,hadoop⾃⼰开发了⼀套序列化机制(Writable),精简、⾼效。
2)⾃定义bean对象要想序列化传输步骤及注意事项:
  (1)必须实现Writable接⼝
  (2)反序列化时,需要反射调⽤空参构造函数,所以必须有空参构造
  (3)重写序列化⽅法
  (4)重写反序列化⽅法
  (5)注意反序列化的顺序和序列化的顺序完全⼀致
  (6)要想把结果显⽰在⽂件中,需要重写toString(),且⽤"\t"分开,⽅便后续⽤
  (7)如果需要将⾃定义的bean放在key中传输,则还需要实现comparable接⼝,因为mapreduce框中的shuffle过程⼀定会对key进⾏排序
16、FileInputFormat切⽚机制
job提交流程源码详解
  waitForCompletion()
  submit();
  // 1、建⽴连接
  connect();
    // 1)创建提交job的代理
    new Cluster(getConfiguration());
    // (1)判断是本地yarn还是远程
    initialize(jobTrackAddr, conf);
  // 2、提交job
  submitter.submitJobInternal(Job.this, cluster)
  // 1)创建给集提交数据的Stag路径
  Path jobStagingArea = StagingDir(cluster, conf);
  // 2)获取jobid ,并创建job路径
  JobID jobId = NewJobID();
  // 3)拷贝jar包到集
  copyAndConfigureFiles(job, submitJobDir);
  rUploader.uploadFiles(job, jobSubmitDir);
  // 4)计算切⽚,⽣成切⽚规划⽂件
  writeSplits(job, submitJobDir);
  maps = writeNewSplits(job, jobSubmitDir);
  Splits(job);
  // 5)向Stag路径写xml配置⽂件
  writeConf(conf, submitJobFile);
  conf.writeXml(out);
  // 6)提交job,返回提交状态
  status = submitClient.submitJob(jobId, String(), Credentials());
17、在⼀个运⾏的Hadoop 任务中,什么是InputSplit?
FileInputFormat源码解析(Splits(job))
(1)到你数据存储的⽬录。
(2)开始遍历处理(规划切⽚)⽬录下的每⼀个⽂件。
(3)遍历第⼀个⽂件ss.txt。
  a)获取⽂件⼤⼩fs.);。
  b)计算切⽚⼤⼩computeSliteSize(Math.max(minSize,Math.min(maxSize,blocksize)))=blocksize=128M。
  c)默认情况下,切⽚⼤⼩=blocksize。
  d)开始切,形成第1个切⽚:ss.txt—0:128M 第2个切⽚ss.txt—128:256M 第3个切⽚ss.txt—256M:300M(每次切⽚时,都要判断切完剩下的部分是否⼤于块的1.1倍,不⼤于1.1倍就划分⼀块切⽚)。
  e)将切⽚信息写到⼀个切⽚规划⽂件中。
  f)整个切⽚的核⼼过程在getSplit()⽅法中完成。
  g)数据切⽚只是在逻辑上对输⼊数据进⾏分⽚,并不会再磁盘上将其切分成分⽚进⾏存储。InputSplit只记录了分⽚的元数据信息,⽐如起始位置、长度以及所在的节点列表等。
  h)注意:block是HDFS上物理上存储的存储的数据,切⽚是对数据逻辑上的划分。
(4)提交切⽚规划⽂件到yarn上,yarn上的MrAppMaster就可以根据切⽚规划⽂件计算开启maptask个数。
18、如何判定⼀个job的map和reduce的数量?
1)map数量
  splitSize=max{minSize,min{maxSize,blockSize}}
  map数量由处理的数据分成的block数量决定default_num = total_size / split_size;
2)reduce数量
  reduce的数量job.setNumReduceTasks(x);x 为reduce的数量。不设置的话默认为 1。
19、 Maptask的个数由什么决定?
  ⼀个job的map阶段MapTask并⾏度(个数),由客户端提交job时的切⽚个数决定。
20、MapTask和ReduceTask⼯作机制
MapTask⼯作机制
(1)Read阶段:Map Task通过⽤户编写的RecordReader,从输⼊InputSplit中解析出⼀个个key/value。
多表查询sql语句面试题
(2)Map阶段:该节点主要是将解析出的key/value交给⽤户编写map()函数处理,并产⽣⼀系列新的key/value。
(3)Collect收集阶段:在⽤户编写map()函数中,当数据处理完成后,⼀般会调⽤llect()输出结果。在该函数内部,它会将⽣成的key/value分区(调⽤Partitioner),并写⼊⼀个环形内存缓冲区中。
(4)Spill阶段:即“溢写”,当环形缓冲区满后,MapReduce会将数据写到本地磁盘上,⽣成⼀个临时⽂件。需要注意的是,将数据写⼊本地磁盘之前,先要对数据进⾏⼀次本地排序,并在必要时对数据进⾏合并、压缩等操作。
(5)Combine阶段:当所有数据处理完成后,MapTask对所有临时⽂件进⾏⼀次合并,以确保最终只会⽣成⼀个数据⽂件。ReduceTask⼯作机制
(1)Copy阶段:ReduceTask从各个MapTask上远程拷贝⼀⽚数据,并针对某⼀⽚数据,如果其⼤⼩超过⼀定阈值,则写到磁盘上,否则直接放到内存中。
(2)Merge阶段:在远程拷贝数据的同时,ReduceTask启动了两个后台线程对内存和磁盘上的⽂件进⾏合并,以防⽌内存使⽤过多或磁盘上⽂件过多。
(3)Sort阶段:按照MapReduce语义,⽤户编写reduce()函数输⼊数据是按key进⾏聚集的⼀组数据。为了将key相同的数据聚在⼀起,Hadoop采⽤了基于排序的策略。 由于各个MapTask已经实现对⾃⼰的处理结果进⾏了局部排序,因此,ReduceTask只需对所有数据进⾏⼀次归并排序即可。
(4)Reduce阶段:reduce()函数将计算结果写到HDFS上。
21、描述mapReduce有⼏种排序及排序发⽣的阶段
1)排序的分类:
  (1)部分排序:
  MapReduce根据输⼊记录的键对数据集排序。保证输出的每个⽂件内部排序。
  (2)全排序:
  如何⽤Hadoop产⽣⼀个全局排序的⽂件?最简单的⽅法是使⽤⼀个分区。但该⽅法在处理⼤型⽂件时效率极低,因为⼀台机器必须处理所有输出⽂件,从⽽完全丧失了MapReduce所提供的并⾏架构。
  替代⽅案:⾸先创建⼀系列排好序的⽂件;其次,串联这些⽂件;最后,⽣成⼀个全局排序的⽂件。
主要思路是使⽤⼀个分区来描述输出的全局排序。例如:可以为待分析⽂件创建3个分区,在第⼀分区中,记录的单词⾸字母a-g,第⼆分区记录单词⾸字母h-n, 第三分区记录单词⾸字母o-z。
  (3)辅助排序:(GroupingComparator分组)
  Mapreduce框架在记录到达reducer之前按键对记录排序,但键所对应的值并没有被排序。甚⾄在不同的执⾏轮次中,这些值的排序也不固定,因为它们来⾃不同的map任务且这些map任务在不同轮次中完成时间各不相同。⼀般来说,⼤多数MapReduce程序会避免让reduce函数依赖于值的排序。但是,有时也需要通过特定的⽅法对键进⾏排序和分组等以实现对值的排序。
  (4)⼆次排序:
  在⾃定义排序过程中,如果compareTo中的判断条件为两个即为⼆次排序。
2)⾃定义排序WritableComparable
  bean对象实现WritableComparable接⼝重写compareTo⽅法,就可以实现排序
  @Override
  public int compareTo(FlowBean o) {
    // 倒序排列,从⼤到⼩
    return this.sumFlow > o.getSumFlow() ? -1 : 1;
  }
3)排序发⽣的阶段:
  (1)⼀个是在map side发⽣在spill后partition前。
  (2)⼀个是在reduce side发⽣在copy后 reduce前。
22、描述mapReduce中shuffle阶段的⼯作流程,如何优化shuffle阶段
分区,排序,溢写,拷贝到对应reduce机器上,增加combiner,压缩溢写的⽂件。
23、描述mapReduce中combiner的作⽤是什么,⼀般使⽤情景,哪些情况不需要,及和reduce的区别?

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。