zoukankan      html  css  js  c++  java
  • 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. 创建一个构造将比较对象传给父类
  • 相关阅读:
    随笔2
    随笔
    关于updateElement接口
    随笔1
    本地访问正常,服务器访问乱码 记录
    Redis (error) NOAUTH Authentication required.解决方法
    tomcat启动很慢 停留在 At least one JAR was scanned for TLDs yet contained no TLDs.
    微信公众号消息回复
    微信公众号 报token验证失败
    idea中web.xml报错 Servlet should have a mapping
  • 原文地址:https://www.cnblogs.com/chenshaowei/p/12485391.html
Copyright © 2011-2022 走看看