hadoop自定义序列化

当处理复杂数据时,Hadoop内置的序列化方式不足,需要自定义序列化类。本文对比了Hadoop序列化与Java序列化的优劣,强调了自定义序列化时需实现Writable接口,保证writer和readFields方法中的读写顺序一致,以及重写toString方法。并介绍了自定义序列化在Mapper、Reducer和Driver中的应用。
摘要由CSDN通过智能技术生成

hadoop自定义序列化

在实现复杂数据进行处理的时候,hadoop自带的序列化参数不够,此时需要自己来定义序列化类信息

Hadoop序列化对比Java

hadoop序列化相比Java序列化占用空间更小更加紧凑
对象可以重用 通过 writer 和 readFields 方法
可扩展信,实现多语言平台通用

序列化注意条件

  1. 序列化对象类需要实现 Writable 接口
  2. 实现的 writer 和 readFields 方法,并且在方法中读写顺序必须保持相同
  3. 重写toString方法,方便查看输出对象信息

自定义序列化类

package com.xdc.mapreduce;

import lombok.Data;
import org.apache.hadoop.io.Writable;

import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;

/**
 * @author xdc
 * created by 2019/11/5
 */
@Data
public class FlowBean implements Writable {
   

    private String number;

    private long upFlow;

    private long downFlow;

    private long sumFlow;

    public void write(DataOutput dataOutput) throws IOException {
   
        dataOutput.writeUTF(number);
        dataOutput.writeLong(upFlow);
        dataOutput.writeLong(downFlow);
        dataOutput.writeLong(sumFlow);
    }

    public void readFields(DataInput dataInput) throws IOException {
   
        number = dataInput.readUTF();
        upFlow = dataInput.readLong();
        downFlow = dataInput.readLong();
        sumFlow = dataInput.readLong();
    }

    public FlowBean() {
   
        super();
    }

    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值