`

hadoop 序列化

阅读更多

Hadoop的序列化

hadoop的框架中要使一个类可序列化,要实现Writable接口的两个方法:

public interface Writable {

  /**

   * Serialize the fields of this object to <code>out</code>.

   *

   * @param out <code>DataOuput</code> to serialize this object into.

   * @throws IOException

   */

  void write(DataOutput out) throws IOException;

 

  /**

   * Deserialize the fields of this object from <code>in</code>. 

   *

   * <p>For efficiency, implementations should attempt to re-use storage in the

   * existing object where possible.</p>

   *

   * @param in <code>DataInput</code> to deseriablize this object from.

   * @throws IOException

   */

  void readFields(DataInput in) throws IOException;

}

Writable

在这两个方法中自己控制对fileds的输入和输出。如果类中包含有其他对象的引用,那么那个对象也是要实现Writable接口的(当然也可以不实现Writable借口,只要自己处理好对对象的fileds的存贮就可以了)。

import java.io.DataInput;

import java.io.DataOutput;

import java.io.IOException;

import org.apache.hadoop.io.IntWritable;

import org.apache.hadoop.io.Text;

import org.apache.hadoop.io.Writable;

public class Attribute implements Writable{

   public static int ATTRIBUTE_TYPE_STRING = 1;//string type  

    public static int ATTRIBUTE_TYPE_NOMINAL = 2;//nominal type  

    public static int ATTRIBUTE_TYPE_REAL = 3;//real type  

      

    private IntWritable type;  

    private Text name; 

    public Attribute() {

      this.type = new IntWritable(0);

      this.name = new Text("");

    }

   

    public Attribute(int type, String name) {

      this.type = new IntWritable(type);

      this.name = new Text(name);

    }

   @Override

   public void readFields(DataInput in) throws IOException {

      type.readFields(in);

      name.readFields(in);

   }

 

   @Override

   public void write(DataOutput out) throws IOException {

      type.write(out);

      name.write(out);

   }

}

 

 

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.io.DataInput;

import java.io.DataInputStream;

import java.io.DataOutput;

import java.io.DataOutputStream;

import java.io.IOException;

import org.apache.hadoop.io.IntWritable;

import org.apache.hadoop.io.Writable;

public class Test implements Writable{

   private Attribute a;  

    private IntWritable b;

   

    public static void main(String[]args)throws Exception {

      Attribute ab = new Attribute(Attribute.ATTRIBUTE_TYPE_NOMINAL, "name");

      Test test = new Test(ab, new IntWritable(1));

      ByteArrayOutputStream bos = new ByteArrayOutputStream();

      DataOutputStream dos = new DataOutputStream(bos);

      test.write(dos);

     

      Test test2 = new Test();

      test2.readFields(new DataInputStream(new ByteArrayInputStream(bos.toByteArray())));

    }

   

    public Test() {

    }

   

    public Test(Attribute ab,IntWritable iw) {

      this.a = ab;

      this.b = iw;

    }

   

   @Override

   public void readFields(DataInput in) throws IOException {

      a = new Attribute();

      a.readFields(in);

      b = new IntWritable(1);

      b.readFields(in);

   }

 

   @Override

   public void write(DataOutput out) throws IOException {

      a.write(out);

      b.write(out);

   }

}

实现hadoop的序列化机制就是利用java的DataInput和DataOutput来完成对基本类型的序列化,然后让用户自己来处理对自己编写的类的序列化。Hadoop 分布式计算,序列化是Hadoop通过RPC调用,使得每个节点之间有效沟通的方法。于是序列化就成为了分布式计算的一个重要课题。序列化之后,对于分布式计算还需要排序。因此排序也相当重要:

Hadoop要求对象在序列化之后的字节也能够支持排序,以提高计算速度,还不必产生很多无谓的数据。

 

分享到:
评论

相关推荐

    Hadoop序列化机制

    标题中的“Hadoop序列化机制”是指Hadoop生态系统中用于数据传输和存储的数据表示方式,它是Hadoop MapReduce和Hadoop Distributed File System (HDFS)等组件之间交换数据的关键技术。序列化是将对象转化为可存储或...

    Hadoop 3.x(MapReduce)----【Hadoop 序列化】---- 代码

    Hadoop 3.x(MapReduce)----【Hadoop 序列化】---- 代码 Hadoop 3.x(MapReduce)----【Hadoop 序列化】---- 代码 Hadoop 3.x(MapReduce)----【Hadoop 序列化】---- 代码 Hadoop 3.x(MapReduce)----【Hadoop ...

    16_尚硅谷大数据之MapReduce_Hadoop序列化1

    本篇文章将深入探讨Hadoop的序列化机制,以及如何自定义Bean对象实现序列化接口。 **2.1 序列化概述** 序列化是将内存中的对象转化为可存储或可传输的数据格式的过程,而反序列化则是相反的操作,将这些数据恢复为...

    java-Hadoop序列化

    Hadoop的序列化方式不同于Java的标准序列化,它使用了一种称为`Writable`的自定义格式。`Writable`接口设计得更加紧凑且高效,旨在满足大数据处理场景的需求,它的主要特点是: 1. **紧凑**:`Writable`序列化格式...

    深入浅析Java Object Serialization与 Hadoop 序列化

    深入浅析Java Object Serialization与 Hadoop 序列化 序列化是指将结构化对象转化为字节流以便在网络上传输或者写到磁盘永久存储的过程。Java 中的序列化是通过实现 Serializable 接口来实现的,而 Hadoop 序列化则...

    【Hadoop篇09】Hadoop序列化1

    Hadoop的序列化机制还允许不同语言之间进行交互,这意味着即使部分组件是用其他语言(如Python或C++)编写,它们也可以与Java组件一起工作,前提是它们都支持相同的序列化协议。 此外,Hadoop的序列化机制还允许...

    Hadoop大数据零基础实战培训教程- Avro数据序列化系统(1)

    Hadoop是什么,为什么要学习Hadoop? Hadoop是一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。Hadoop实现了一个分布式...

    Hadoop大数据零基础实战培训教程_Avro数据序列化系统.rar

    Hadoop是一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。Hadoop实现了一个分布式文件系统(Hadoop Distributed File ...

    《Hadoop大数据开发实战》教学教案—03HDFS分布式文件系统.pdf

    本节课程主要介绍 HDFS 的概念、HDFS 存储架构和数据读写流程、HDFS 的 Shell 命令、Java 程序操作 HDFS、Hadoop 序列化、Hadoop 小文件处理、通信机制 RPC 等知识点。 HDFS 概念 HDFS(Hadoop Distributed File ...

    尚硅谷大数据技术之Hadoop(MapReduce)1

    【尚硅谷大数据技术之Hadoop(MapReduce)1】深入解析MapReduce MapReduce是Google提出的一种用于处理和生成大规模数据集的编程模型,被广泛应用于大数据处理领域。Hadoop将其作为核心组件,实现了分布式计算的功能...

    详细介绍Hadoop家族中的MapReduce原理

    Hadoop 序列化的方法包括 Java 序列化和 Hadoop 序列化。Hadoop 序列化具有更高的效率和更好的可扩展性。 MapReduce 是 Hadoop 家族中的核心组件之一,具有非常高的分布式计算能力和可扩展性。MapReduce 的核心思想...

    hadoop 面试题大全

    6. Hadoop序列化和反序列化是数据交换的关键,它将对象转换为可传输的字节流。Hadoop自定义的Writable接口提供了轻量级序列化机制,比Java的Serializable更高效。自定义bean对象实现序列化需要实现Writable接口,...

    hadoop代码分析

    #### 四、Hadoop序列化机制 - **序列化需求**:为了支持MapReduce和HDFS组件间的通信,Hadoop设计了一套定制化的序列化机制,而不是使用Java内置的序列化机制。 - **Writable接口**:`org.apache.hadoop.io`包下的...

    大数据Hadoop核心之MapReduce详解

    通过这篇文章,我们可以了解到MapReduce的定义、优缺点、核心思想、进程、编程规范等内容,也了解到Hadoop序列化的重要性和基本概念。从中我们可以看到MapReduce是Hadoop核心模块之一,广泛应用于大数据处理和分析...

    Hadoop源代码分析完整版

    #### 五、Hadoop序列化机制 Hadoop采用了自定义的序列化机制,而不是Java内置的序列化机制。这是因为内置的序列化机制效率较低,且不支持跨语言交互。因此,Hadoop在`org.apache.hadoop.io`包中定义了大量的可序列...

    Hadoop: The Definitive Guide 3rd_edition

    Writable接口和Writable类是Hadoop序列化框架的核心,书中也介绍了如何实现自定义的Writable类。同时,本书还探讨了基于文件的数据结构,比如Avro、SequenceFile和MapFile。 书中还涉及了Hadoop生态系统中的其他...

    大数据技术之Hadoop(MapReduce)

    7. **Hadoop序列化** - 序列化允许将对象转换为字节序列,便于存储和网络传输。 - 反序列化则是将字节序列恢复为对象。 - Java的序列化虽然方便,但因为重量级,不适合大数据场景,Hadoop提供了更轻量级且高效的...

    Hadoop平台技术 序列化操作案例.docx

    【Hadoop平台技术 序列化操作案例】 在Hadoop平台上进行大数据处理时,序列化是必不可少的一个环节,它允许我们将复杂的数据结构转化为字节流,以便在网络间传输或存储到磁盘。在这个案例中,我们将探讨如何在...

    Java实现序列化例子

    7. **序列化与分布式系统**:在分布式环境中,例如RMI(远程方法调用)和Hadoop等大数据处理框架,序列化是必需的,因为它允许在网络间传输对象。 通过`SerializableDemo`,我们可以学习如何在实际项目中应用这些...

Global site tag (gtag.js) - Google Analytics