zoukankan      html  css  js  c++  java
  • 五 数据组织模式 2) 分区模式


        分区模式是将记录进行分类(即分片、分区或分箱),他不关心记录的顺序

        目的:
                将数据集中相似的数据记录成不同的、更小的数据。
        适用范围:
                必须提前知道有多少个分区。  比如按天、按月、年等等。
        结构:
                数据是通过分区器进行分区的。  所以需要自定义分区器(partitioner)函数来确定每条记录应该被分在那个分区。
                
        结果:
                每个分区将对应一个输出的 part 文件。
                由于每个类别都将被写入到一个大文件中,因此采用基于块压缩的 SequenceFile 存储数据是一种很好的方式,同事该方法也被证明是 Hadoop 中最有效、最易于使用的数据格式。
        
        已知应用:
                按连续值剪裁分区
                        例如:日期或者数值区间
                按类别剪裁分区
                        例如:国家区域、电话区号、语言形式等等。
        分片:
                如果整个系统中有某个子系统的数据是已经划分好的。 如不同的磁盘,那么就需要将记录划分到已存在的分片中。

        性能分析:
                热点问题, 热点将是一个大问题,需要单独考虑。  如:  4T 文件需要重新分区 分四组 (4个reduce)方便统计。那么其中一组占3T  这将引发 单点 reduce 的热点问题和数据倾斜。  可以考虑二次分区。或是其中一组进行打散 变为 (3组 1T + N组 3T 的随机分区。 ) 而这样做并不影响对分区以后的处理, 唯一的影响是将来分析时,需要将分区的文件全部引入即可
        
        分区示例:
            作业需要配置成使用自定义分区器,同时分区器也要重写。 
            Mapper.mapper() :
                    获取每条输入记录后的 分区属性。 并将分区属性作为Key。 然后整条记录作为 V 。 在 Reduce 阶段此 K 将被忽略。 (因为木有用了嘛)
            Partitioner.getPartitioner():
                    分区检 mapper 输出的每个 K/V ,并确定将 键值对写入那个分区。 这样每个已经编号的分区数据将被相应的reduce 复制。 此外 分区器实现了 Configurable 接口。 在任务初始化阶段配置分区器时将调用 setConf 方法。 在作业配置阶段,驱动程序负责调用 LastAccessDatePartitioner.setMinLastAccessDate()方法获取该值。
           Reduce.reduce()  只输出即可。 输出循环的 V。







    God has given me a gift. Only one. I am the most complete fighter in the world. My whole life, I have trained. I must prove I am worthy of someting. rocky_24
  • 相关阅读:
    1065 a+b and c(64)
    1049 counting ones
    1040 the longest symmetric
    1039 course list for student
    1038 recover the smallest number
    1035 head of a gang
    1033 to fill or not to fill
    node环境下通过redis共享session记录
    vue+koa+sequlize 搭建使程序员专注业务代码开发框架---对于nunjucks引入webpack后,产生的文件缓存相关的思考(四)
    charless抓包https---记录一下菜鸡的日常
  • 原文地址:https://www.cnblogs.com/rocky24/p/92bda05b11ebf812b20da13872ffe00c.html
Copyright © 2011-2022 走看看