• 尚学堂 hadoop


    mr spark storm 都是分布式计算框架,他们之间不是谁替换谁的问题,是谁适合做什么的问题。

    mr特点,移动计算,而不移动数据。 把我们的计算程序下发到不同的机器上面运行,但是不移动数据。    

    每一个split 是由一个map线程,还是map进程进行处理?  肯定的是,他们之间是并发的。

    mr的shuffle阶段,是比较难于理解的,不太便于我们去控制他,我们只能通过程序,控制其中的一部分。shuffle阶段,大多数都是有MR框架自动完成的。

    溢写到磁盘中:map执行完成,结果肯定是放在内存中的。 所以达到一定数量之后,就需要溢写到磁盘中。在这之前,需要进行分区(partition)和把当前这个map的输出数据进行排序(sotred)
    所以说,写到磁盘中的数据已经分好区了,并且已经排好序了。这都是在map任务所在节点的本地执行的。 其中partition暂时没有体现出作用。而是在fetch的过程中提现出来的。是按照什么
    进行分区的呢?是看partition是怎么写的。partition可以由程序员自己写。按照程序员自己的规则实现。也可以不写,有默认的分区规则。默认分区规则是hash模运算(1,获取hash值
    ,是一个int。2,把这个int值对reduce的个数取模),默认的partition是有可能产生数据倾斜的。比如有两个reduce,没所有map产生的所有结果取模的时候,打个比方,
    共有10个map结果,有9个都会1,只有1个为0,这就产生了数据倾斜。
    mr如何解决数据倾斜问题和负载均衡。就是通过partition来实现的。如果发现数据倾斜问题,修改我们的partition算法就可以了。

    排序,排序的关键是如何比较两个对象,mr自己也有自带的排序规则。默认的是按照对象所对应的ascii码值来排序的,或者说就是按照字典排序
    分区不是立刻把数据都分开,而是打一个标号,标注,你是 1区的,你是2区的。在数据传输的 时候才会真正的分开,就是fetch阶段

    merge ondisk每次溢写,都会产生一个文件,注意,不是追加,所以溢写次数越多,产生的文件数越多,怎么办呢,需要和并,和并成为一个大一点的文件,和并也有规则,默认按照
    hash值和并。你的键的hash进行合并,键相同,就进行合并。合并规则也可以自定义。是combiner,就是每次合并,都会执行combiner的代码。  目的是加快拷贝速度,因为文件数量越少,拷贝越快。

    溢写的时候,map任务可能还没有执行完,故可能一次map任务会有多次的溢写。所以会产生多个文件

    把map结果的机器上把分给我这个reduce数据拷贝过来,拷贝是根据partition的结果来拷贝的。由于是从多个map的节点上拷贝数据,所以会有多个小文件,此时又会进行一次合并,这次
    合并不能人为控制。这次合并,只要是key相同的都会进行合并,这个相同的key,可能来自于不同的map task。合并完成之后,相同key的数据都会在一起。分别传给reduce执行,这个
    不是并发的,但是两个reduce是并发的。

    比较会调用多次。
    先partition,后入 memory buffer
    partition是对map的每个结果的分区规则的运算




    大数据的两个方向:
    1.大数据变成和运维方向
    2.数据建模方向,必须是统计学和数据学出来的人。

  • 相关阅读:
    .net Dapper 学习系列(1) ---Dapper入门
    ASP.NET WebApi 学习与实践系列(2)---WebApi 路由请求的理解
    ASP.NET WebApi 学习与实践系列(1)---如何创建 WebApi
    Sqlserver 总结(2) 存储过程
    Image.Save出错 GDI 一般错误
    python导入模块的两种方式
    从1KW条数据中筛选出1W条最大的数
    C# EF更新当前实体报错 ObjectManager无法管理具有相同键值的多个对象
    微信小程序 异步请求拿数据+使用外部js库
    微信小程序入门 第一个页面搭建
  • 原文地址:https://www.cnblogs.com/mrxiaohe/p/6762889.html
Copyright © 2020-2023  润新知