- 浏览: 1184211 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (350)
- Ajax研究 (2)
- javascript (22)
- struts (15)
- hibernate (12)
- spring (8)
- 我的生活 (28)
- jsp (2)
- 我的随笔 (84)
- 脑筋急转弯 (1)
- struts2 (2)
- ibatis (1)
- groovy (1)
- json (4)
- flex (20)
- Html Css (5)
- lucene (11)
- solr研究 (2)
- nutch (25)
- ExtJs (3)
- linux (6)
- 正则表达式 (2)
- xml (1)
- jetty (0)
- 多线程 (1)
- hadoop (40)
- mapreduce (5)
- webservice (2)
- 云计算 (8)
- 创业计划 (1)
- android (8)
- jvm内存研究 (1)
- 新闻 (2)
- JPA (1)
- 搜索技术研究 (2)
- perl (1)
- awk (1)
- hive (7)
- jvm (1)
最新评论
-
pandaball:
支持一下,心如大海
做有气质的男人 -
recall992:
山东分公司的风格[color=brown]岁的法国电视[/co ...
solr是如何存储索引的 -
zhangsasa:
-services "services-config ...
flex中endpoint的作用是什么? -
来利强:
非常感谢
java使用json所需要的几个包 -
zhanglian520:
有参考价值。
hadoop部署错误之一:java.lang.IllegalArgumentException: Wrong FS
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要求对象在序列化之后的字节也能够支持排序,以提高计算速度,还不必产生很多无谓的数据。
发表评论
-
Java并发编程总结---Hadoop核心源码实例解读
2012-04-01 15:46 2193程序设计需要同步(synchronization),原因:1) ... -
使用hadoop的lzo问题!
2011-08-24 17:12 2638使用lzo压缩替换hadoop原始的Gzip压缩。相比之下有如 ... -
secondarynamenode配置使用总结
2011-07-07 08:37 7550一、环境 Hadoop 0.20.2、JDK 1.6、Lin ... -
Map/Reduce中的Combiner的使用
2011-07-07 08:36 4764一、作用 1、combiner最基本是实现本地key的聚合, ... -
Map/Reduce中的Partiotioner使用
2011-07-07 08:35 1870一、环境 1、hadoop 0.20.2 2、操作系统Li ... -
hadoop如何添加节点
2011-07-06 12:43 14901.部署hadoop 和普通的datanode一样。安装 ... -
hadoop如何恢复namenode
2011-07-06 12:36 8536Namenode恢复 1.修改conf/core-site.x ... -
Hadoop删除节点(Decommissioning Nodes)
2011-07-06 11:52 25721.集群配置 修改conf/hdfs-site.xml ... -
hadoop知识点整理
2011-07-06 11:51 26771. Hadoop 是什么? Hadoop 是一种使用 Ja ... -
喜欢hadoop的同学们值得一看
2011-07-03 15:50 2016海量数据正在不断生成,对于急需改变自己传统IT架构的企业而 ... -
hadoop优化
2011-07-03 15:43 1337一. conf/hadoop-site.xml配置, 略过. ... -
hadoop分配任务的问题
2011-05-16 23:09 5请教大家一个关于hadoop分配任务的问题: 1、根据机器 ... -
hadoop-FAQ
2011-05-15 11:38 725hadoop基础,挺详细的。希望对大家有用! -
Apache Hadoop 0.21版本新功能ChangeNode
2011-04-21 22:04 2000Apache Hadoop 0.21.0 在2010年8月23 ... -
Hadoop关于处理大量小文件的问题和解决方法
2011-04-21 11:07 2517小文件指的是那些size比 ... -
hadoop常见错误及解决办法!
2011-04-07 12:18 96470转: 1:Shuffle Error: Exceede ... -
Hadoop节点热拔插
2011-04-07 12:16 1635转 : 一、 Hadoop节点热 ... -
hadoop动态添加节点
2011-04-07 12:14 2013转: 有的时候, datanode或者tasktrac ... -
欢迎大家讨论hadoop性能优化
2011-04-06 15:42 1301大家知道hadoop这家伙是非常吃内存的。除了加内存哦! 如 ... -
hadoop错误之二:could only be replicated to 0 nodes, instead of 1
2011-02-22 08:23 2360WARN hdfs.DFSClient: NotReplic ...
相关推荐
标题中的“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的序列化机制,以及如何自定义Bean对象实现序列化接口。 **2.1 序列化概述** 序列化是将内存中的对象转化为可存储或可传输的数据格式的过程,而反序列化则是相反的操作,将这些数据恢复为...
Hadoop的序列化方式不同于Java的标准序列化,它使用了一种称为`Writable`的自定义格式。`Writable`接口设计得更加紧凑且高效,旨在满足大数据处理场景的需求,它的主要特点是: 1. **紧凑**:`Writable`序列化格式...
深入浅析Java Object Serialization与 Hadoop 序列化 序列化是指将结构化对象转化为字节流以便在网络上传输或者写到磁盘永久存储的过程。Java 中的序列化是通过实现 Serializable 接口来实现的,而 Hadoop 序列化则...
Hadoop的序列化机制还允许不同语言之间进行交互,这意味着即使部分组件是用其他语言(如Python或C++)编写,它们也可以与Java组件一起工作,前提是它们都支持相同的序列化协议。 此外,Hadoop的序列化机制还允许...
Hadoop是什么,为什么要学习Hadoop? Hadoop是一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。Hadoop实现了一个分布式...
Hadoop是一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。Hadoop实现了一个分布式文件系统(Hadoop Distributed File ...
本节课程主要介绍 HDFS 的概念、HDFS 存储架构和数据读写流程、HDFS 的 Shell 命令、Java 程序操作 HDFS、Hadoop 序列化、Hadoop 小文件处理、通信机制 RPC 等知识点。 HDFS 概念 HDFS(Hadoop Distributed File ...
【尚硅谷大数据技术之Hadoop(MapReduce)1】深入解析MapReduce MapReduce是Google提出的一种用于处理和生成大规模数据集的编程模型,被广泛应用于大数据处理领域。Hadoop将其作为核心组件,实现了分布式计算的功能...
Hadoop 序列化的方法包括 Java 序列化和 Hadoop 序列化。Hadoop 序列化具有更高的效率和更好的可扩展性。 MapReduce 是 Hadoop 家族中的核心组件之一,具有非常高的分布式计算能力和可扩展性。MapReduce 的核心思想...
6. Hadoop序列化和反序列化是数据交换的关键,它将对象转换为可传输的字节流。Hadoop自定义的Writable接口提供了轻量级序列化机制,比Java的Serializable更高效。自定义bean对象实现序列化需要实现Writable接口,...
#### 四、Hadoop序列化机制 - **序列化需求**:为了支持MapReduce和HDFS组件间的通信,Hadoop设计了一套定制化的序列化机制,而不是使用Java内置的序列化机制。 - **Writable接口**:`org.apache.hadoop.io`包下的...
通过这篇文章,我们可以了解到MapReduce的定义、优缺点、核心思想、进程、编程规范等内容,也了解到Hadoop序列化的重要性和基本概念。从中我们可以看到MapReduce是Hadoop核心模块之一,广泛应用于大数据处理和分析...
#### 五、Hadoop序列化机制 Hadoop采用了自定义的序列化机制,而不是Java内置的序列化机制。这是因为内置的序列化机制效率较低,且不支持跨语言交互。因此,Hadoop在`org.apache.hadoop.io`包中定义了大量的可序列...
Writable接口和Writable类是Hadoop序列化框架的核心,书中也介绍了如何实现自定义的Writable类。同时,本书还探讨了基于文件的数据结构,比如Avro、SequenceFile和MapFile。 书中还涉及了Hadoop生态系统中的其他...
7. **Hadoop序列化** - 序列化允许将对象转换为字节序列,便于存储和网络传输。 - 反序列化则是将字节序列恢复为对象。 - Java的序列化虽然方便,但因为重量级,不适合大数据场景,Hadoop提供了更轻量级且高效的...
【Hadoop平台技术 序列化操作案例】 在Hadoop平台上进行大数据处理时,序列化是必不可少的一个环节,它允许我们将复杂的数据结构转化为字节流,以便在网络间传输或存储到磁盘。在这个案例中,我们将探讨如何在...
7. **序列化与分布式系统**:在分布式环境中,例如RMI(远程方法调用)和Hadoop等大数据处理框架,序列化是必需的,因为它允许在网络间传输对象。 通过`SerializableDemo`,我们可以学习如何在实际项目中应用这些...