• Hadoop序列化和数据输入输出类


    常用数据序列化类型

    Java类型 Hadoop Writable类型
    boolean BooleanWritable
    byte ByteWritable
    int IntWritable
    String Text
    map MapWritable
    array ArrayWritable

    Hadoop序列化

    序列化就是把内存中的对象转换成字节序列,以便存储到磁盘和网络传输。

    反序列化就是把字节序列转换成内存中的对象。

    Java序列化是一个重量级序列化框架,一个对象被序列化后,会附带很多额外的信息,不便于网络传输,所以Hadoop自己开发了一套序列化机制(Writable)。

    自定义bean对象实现序列化接口

    不是所有基本类型都能满足需求,实现bean对象序列化有6步

    1. 实现Writable接口
    2. 反序列化时,需要反射调用空参构造函数
    3. 重写序列化方法
    4. 重写反序列化方法
    5. 重写toString()
    6. 实现Comparable接口

    MapReduce框架原理

    InputFormat数据输入

    MapTask的并行度决定Map阶段的任务处理并发度,进而影响到整个Job的处理速度。

    数据块:Block是在HDFS上物理的把数据切成一块一块。数据切片:split是逻辑上对输入切片。

    一个Job的Map阶段并行度,即Map个数是由客户端提交Job的切片数决定的。每一个split切片分配一个MapTask并行处理。默认情况下切片大小等于块大小。

    如果有很多小文件,就会产生大量的Maptask,处理效率低,这时候就可以用CombineTextInputFormat,可以将多个小文件从逻辑上规划到一个切片中,多个小文件交给一个MapTask处理。

    FileInputFormat实现类

    FileInputFormat常见的接口实现类包括:TextInputFormat,KeyValueTextInputFormat,NLineInputFormat,CombineTextInputFormat。

    • TextInputFormat类是默认的FileInputFormat实现类,按行读取每条记录,键是存储该行在整个文件中的起始字节偏移量,LongWritable类型,值是这行的内容。
    • KeyValueTextInputFormat,每一行为一条记录,(line1,line1的内容)
    OutputFormat数据输出
    1. 文本输出TextOutputFormat,把每条记录写成文本行,转换为字符串
    2. SequenceFileOutputFormat
    3. 自定义OutputFormat

    MapReduce排序

    • 部分排序,根据输入记录的键对排序,保证输出的每个文件内部有序
    • 全排序,输出只有一个文件,但是效率低
    • 辅助排序,GroupComparator,在Reduce端排序
    • 二次排序,在自定义排序中,判断条件为两个

    全排序,实现compareTo()类,分区为1即可实现。部分排序,实现partitioner类,分区后自动排序。

    Combiner合并

    Combiner在MapTask节点运行,Reduce在ReduceTask节点运行。

    Combiner局部汇总,减小网络传输量。前提是不能影响业务逻辑。

    GroupComparator(辅助排序)

    在Reduce阶段对数据分组。

    1. 自定义类继承WritableComparator
    2. 重写compare()方法
    3. 创建一个构造将比较对象传给父类
  • 相关阅读:
    Node.js安装及环境配置之Windows篇
    C++ STL中Map的按Key排序和按Value排序
    设计模式之观察者模式(c++)
    C/C++回调函数
    c++ string详解 assign
    C++ unsigned long 转化为 unsigned char*
    unsigned char 与unsigned long互换
    微信小程序的登陆流程详解
    谷歌帮:中国最牛的创业帮派
    创业公司打造顶级团队的七个方法
  • 原文地址:https://www.cnblogs.com/chenshaowei/p/12485391.html
Copyright © 2020-2023  润新知