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
  • 相关阅读:
    linux之awk命令
    HDU 2097 Sky数 进制转换
    HDU 2077 汉诺塔IV
    HDU 2094 产生冠军 dfs加map容器
    HDU 2073 叠框
    HDU 2083 简易版之最短距离
    HDU 2063 过山车 二分匹配
    天梯 1014 装箱问题
    天梯 1214 线段覆盖
    天梯 1098 均分纸牌
  • 原文地址:https://www.cnblogs.com/rocky24/p/92bda05b11ebf812b20da13872ffe00c.html
Copyright © 2011-2022 走看看