zoukankan      html  css  js  c++  java
  • Hadoop 序列化

    一、优点

    1、紧凑:节省内存

    2、快速:读取速度快

    3、可扩展:随着协议升级

    4、互操作:支持多语言交互

    二、Bean对象实现序列化

    1、步骤

    a、必须实现Writable接口
    b、必须有空参构造,反序列化时,反射调用
    c、重写序列化方法
    d、重写反序列化方法
    e、序列化方法和反序列化方法参数顺序要一致
    f、重写 toString 用'	'连接
    h、如果需要将自定义的bean放在key中传输,则还需要实现Comparable接口,因为MapReduce框中的Shuffle过程要求对key必须能排序

     三、示例

    1、前提条件

    创建Maven项目,导入依赖,配置log日志

    2、思路

    a、实现接口Writable
    b、自定义属性
    c、无参构造函数
    d、get和set
    e、tostring 连接使用 	
    f、序列化
    g、反序列化
    注意:序列化和反序列化的顺序相同,相当于队列

    3、代码

    package com.flow;
    
    import org.apache.hadoop.io.Writable;
    
    import java.io.DataInput;
    import java.io.DataOutput;
    import java.io.IOException;
    
    public class FlowBean implements Writable {
    
        private long upFlow;    // 上传流量
        private long downFlow;  // 下载流量
        private long sumFlow;   // 总流量
    
        public FlowBean() {
        }
    
        public long getUpFlow() {
            return upFlow;
        }
    
        public void setUpFlow(long upFlow) {
            this.upFlow = upFlow;
        }
    
        public long getDownFlow() {
            return downFlow;
        }
    
        public void setDownFlow(long downFlow) {
            this.downFlow = downFlow;
        }
    
        public long getSumFlow() {
            return sumFlow;
        }
    
        public void setSumFlow(long sumFlow) {
            this.sumFlow = sumFlow;
        }
    
        @Override
        public String toString() {
            return upFlow + "	" + downFlow + "	" + sumFlow;
        }
    
        // 序列化
        public void write(DataOutput out) throws IOException {
            out.writeLong(upFlow);
            out.writeLong(downFlow);
            out.writeLong(sumFlow);
        }
    
        // 反序列化
        public void readFields(DataInput in) throws IOException {
            this.upFlow = in.readLong();
            this.downFlow = in.readLong();
            this.sumFlow = in.readLong();
        }
    
        public void set(long upFlow, long downFlow){
            this.upFlow = upFlow;
            this.downFlow = downFlow;
            this.sumFlow = upFlow + downFlow;
        }
    }
  • 相关阅读:
    05-删除提示
    04-setTimeout
    03-页面加载事件
    02-对话框
    01-window
    18-选择水果
    17-元素操作的方法
    13-动态创建表格
    【数据库】SQL必知必会复习
    【数据库】JDBC课设(2)addbatch批处理SQL语句
  • 原文地址:https://www.cnblogs.com/wt7018/p/13605515.html
Copyright © 2011-2022 走看看