【Hadoop】面试

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

文章目录


1.MR流程

数据输入——Mapper——Shuffle——Reducer——数据输出

  • 数据输入——>Mapper 中间有个FileInputFormat抽象类
    - 这个过程需要将文件进行逻辑上的切片处理遍历文件目录i获取文件大小再计算切片大小(默认是等于blocksize大小 128M) 每次切片完成都要判断剩下的部分是否大于块的1.1倍不大于1.1倍就划分一个切片将切片信息写入一个切片规划文件inputSplit接口提供了获取切片的位置和大小两个方法。
    - 提交切片规划文件到yarn上yarn上的mrappmaster就可以根据切片大小计算maptask个数

Hadoop提供了TextInputFormat、KeyValueTextInputFormat、NLineInputFormat、CombineTextInputFormat和自定义InputFormat等实现类默认是使用TextInputFormat。

  • 继承Mapper类重写setup、map、cleanup方法将收集到的kv对放入内存缓冲区中当缓冲区中数据达到一定阈值就会进行一次快速排序。

  • 进入shuffle过程从内存缓冲区不断一些出本地磁盘文件多个文件被合并成更大的文件这个过程中都要调用Partitioner进行分区和针对Key进行归并排序。

  • 接下来进入ReduceTask任务拷贝一份map处理后的数据读入内存中如果内存不够就溢写入磁盘磁盘上文件数目达到一定阈值使用归并排序生成一个更大的文件内存中数据超过一定阈值就会一次合并写入磁盘。最后统一对内存和磁盘的数据进行一次归并排序。

  • 最后就是outputformat数据输出了默认实现类是TextOutputFormat如果将数据输入到Mysql、Es、Hbase中需要自定义OutputFormat实现类。

2. Namenode、Datanode、SecondaryNamenode作用

Namenode用于管理hdfs的名称空间、配置副本策略、管理数据块的映射信息、处理客户端请求

Datanode用于实际存储数据、执行数据块的读写操作

Secondary Namenode辅助Namenode分担其工作量定期合并Fsimage和Edits文件并且推送给Namenode可以辅助恢复NameNode。

3. Hdfs的介绍与应用场景

hdfs是一个分布式文件管理系统适合一次写入、多次写出的业务场景。优点在于高容错性、适合处理大数据数据规模在PB级别百万级别文件数量可以构建在廉价机器上。缺点不适合低延时数据访问无法大量存储小文件不支持并发写入文件随机修改。

4. SecondaryNamenode如何恢复数据检查点机制)

Secondary Namenode询问namenode是否需要checkpoint如果需要就请求执行checkpoint。Namenode滚动写Edits日志。将滚动前的edits文件和fsimage拷贝到第二名称节点第二名称节点加载fsimage和edits到内存并合并生成新的镜像文件fsimage.chkpoint拷贝fsimage.chkpoint到namenodenamenode重命名为fsimage。

5. 小文件问题

由于数据输入默认是使用TextInputFormat实现类不管文件多小都会产生一个独立的切片都会交给一个MapTask任务去执行如果小文件过多就会产生大量的MapTask处理效率非常低下。

可以使用CombineTextInputFormat实现类实现数据的输入。实现原理是将多个小文件从逻辑上规划到一个切片中这样多个小文件就可以交给一个MapTask处理。可以设置虚拟存储切片最大值来调整切片数量。

6. Hadoop和Spark的区别

  • Hadoop不适用于循环迭代的数据流处理比如机器学习、交互式的数据挖掘适用场景。
  • Hadoop在多个作业计算过程中map阶段和reduce阶段会频繁进行磁盘的读写操作来进行数据通讯这样会大大降低计算效率而Spark的数据通信是基于内存执行计算效率更高。
  • Spark Task的启动时间快采用fork线程的方式而hadoop采用的是创建新的线程。
  • Spark 的缓存机制比 HDFS 的缓存机制高效。
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Hadoop