大数据相关

  1. hadoop原理
  2. spark原理
  3. kafka原理
  4. 数据仓库部分

Hadoop原理

  1. MapReduce的原理
    默认根据hdfs上文件的block来启动相应数量的mapTask,每个mapTask处理该分片文件时,以用户定义的inputFormat来读取,形成KV输入流,K为偏移量,V是数据,然后通过map函数处理逻辑,输出KV,以K来分区排序后不断溢写到磁盘文件。Map任务大概完成80%的时候,会启动ReduceTask去拉取数据,在本地做归并排序。

2.hdfs上传文件的原理
Client发起文件上传请求,Namenode将可存储的节点告知Client,Client与该DataNode联系,并向该节点写文件,DataNode同时会以流水线的方式写入到其他DataNode节点(副本数和配置有关)

3.hdfs副本存放策略
系统默认为每一个数据块存放3个副本,按照布署在NameNode上的默认机架感知策略存放数据块副本。其中:
第一个block副本放在client结点所在机架的datanode里(如果client不在集群范围内,则这第一个node是随机选取的,当然系统会尝试不选择哪些太满或者太忙的node)。
第二个block副本放置在与第一个datanode节点相同的机架中的另一个datanode中(随机选择)。
第三个block副本放置于另一个随机远端机架的一个随机datanode中。

《大数据相关》 image.png

4.MapReduce的shuffle是什么
将MapTask输出的结果数据分发给reduceTask,并且在分发的过程,对数据按照Key进行了分区和排序

5.MapReduce的shuffle调优
(1)可以设置Combiner
(2)压缩,减少磁盘IO和网络IO (适合IO瓶颈大的)
(3)给shuffle尽可能大的内存

spark原理

6.spark宽依赖和窄依赖
宽依赖也是ShuffleDependency,多个子RDD的分区会依赖于同一个父RDD分区
窄依赖也就是NarrowDependency,每一个父RDD的分区最多只被子RDD的一个分区所使用

7.stage的划分
遇到ShuffleDependency就形成stage,stage内部的计算是pipeline形式的,数据流是一条直接运行到底的(一个task)。

8.spark的shuffle和mapreduce的shuffle有什么区别?
(1)从high-level来看,没有很大的差别,都是将mapper(spark里是shuffleMapTask)的输出进行Partition,不同的Partition送到不同的reducer(spark里可能是下一个stage的shuffleMapTask,也可能是ResultTask)。Reducer以内存作为缓冲区,边shuffle边aggregate数据,等数据aggregate好以后进行reduce()
(2)Low-level上看,差别不小,MapReduce内部在归并之前必须做sort,而spark不会提前排序,它是基于hashMap来shuffle
(3)从实现角度上看,差别不小,MapReduce将处理流程分为明显的几个阶段,map/spill/merge/shuffle/sort/reduce等,各阶段各司其职,而spark没有这种,只有transformation,这些操作可能是藏在里面的。

9.shuffleRead fetch的问题
(1)在shuffleMapTask全部结束以后开始fetch
(2)是边fetch边处理的

    原文作者:Entry_1
    原文地址: https://www.jianshu.com/p/df1cedd53894
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞