大数据相关

作者: Entry_1 | 来源:发表于2018-03-09 18:16 被阅读0次
    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边处理的

    相关文章

      网友评论

        本文标题:大数据相关

        本文链接:https://www.haomeiwen.com/subject/grodfftx.html