Hadoop 序列化
来源:互联网 发布:做淘宝分销商怎么样 编辑:程序博客网 时间:2024/05/22 22:11
运用hadoop的序列化
在hadoop的框架中要使一个类可序列化,要实现Writable接口的两个方法:
比java的实现Serializable复杂很多。但是通过比较可以发现,hadoop的序列化机制产生的数据量远小于java的序列化所产生的数据量。
在这两个方法中自己控制对fileds的输入和输出。如果类中包含有其他对象的引用,那么那个对象也是要实现Writable接口的(当然也可以不实现Writable借口,只要自己处理好对对象的fileds的存贮就可以了)。
下面是一个简单的例子:
类Attribute
类TestA:
可以看到,hadoop的序列化机制就是利用java的DataInput和DataOutput来完成对基本类型的序列化,然后让用户自己来处理对自己编写的类的序列化。
在hadoop的框架中要使一个类可序列化,要实现Writable接口的两个方法:
- public interface Writable {
- void write(DataOutput out) throws IOException;
- void readFields(DataInput in) throws IOException;
- }
比java的实现Serializable复杂很多。但是通过比较可以发现,hadoop的序列化机制产生的数据量远小于java的序列化所产生的数据量。
在这两个方法中自己控制对fileds的输入和输出。如果类中包含有其他对象的引用,那么那个对象也是要实现Writable接口的(当然也可以不实现Writable借口,只要自己处理好对对象的fileds的存贮就可以了)。
下面是一个简单的例子:
类Attribute
- package siat.miner.etl.instance
- 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 IntWritable getType() {
- return type;
- }
- public void setType(int type) {
- this.type = new IntWritable(type);
- }
- public Text getName() {
- return name;
- }
- public void setName(String name) {
- this.name = new Text(name);
- }
- public Attribute() {
- super();
- this.type = new IntWritable(0);
- this.name = new Text("");
- }
- public Attribute(int type, String name) {
- super();
- this.type = new IntWritable(type);
- this.name = new Text(name);
- }
- @Override
- public void readFields(DataInput in) throws IOException {
- // TODO Auto-generated method stub
- type.readFields(in);
- name.readFields(in);
- }
- @Override
- public void write(DataOutput out) throws IOException {
- // TODO Auto-generated method stub
- type.write(out);
- name.write(out);
- }
- }
类TestA:
- package siat.miner.etl.test;
- 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;
- import siat.miner.etl.instance.Attribute;
- public class TestA implements Writable{
- private Attribute a;
- private IntWritable b;
- /**
- * @param args
- * @throws IOException
- */
- public static void main(String[] args) throws IOException {
- // TODO Auto-generated method stub
- Attribute a = new Attribute(Attribute.ATTRIBUTE_TYPE_NOMINAL, "name");
- TestA ta = new TestA(a, new IntWritable(1));
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
- DataOutputStream oos = new DataOutputStream(bos);
- ta.write(oos);
- TestA tb = new TestA();
- tb.readFields(new DataInputStream(new ByteArrayInputStream(bos.toByteArray())));
- }
- public TestA(Attribute a, IntWritable b) {
- super();
- this.a = a;
- this.b = b;
- }
- public TestA() {
- // TODO Auto-generated constructor stub
- }
- @Override
- public void readFields(DataInput in) throws IOException {
- // TODO Auto-generated method stub
- a = new Attribute();
- a.readFields(in);
- b = new IntWritable();
- b.readFields(in);
- }
- @Override
- public void write(DataOutput out) throws IOException {
- // TODO Auto-generated method stub
- a.write(out);
- b.write(out);
- }
- }
可以看到,hadoop的序列化机制就是利用java的DataInput和DataOutput来完成对基本类型的序列化,然后让用户自己来处理对自己编写的类的序列化。
1 0
- Hadoop--序列化
- hadoop序列化
- Hadoop的序列化
- Hadoop序列化
- Hadoop序列化
- Hadoop序列化案例
- hadoop序列化
- [Hadoop]序列化机制
- hadoop序列化框架
- hadoop自定义序列化
- Hadoop 序列化
- hadoop中的序列化
- HADOOP序列化机制
- Hadoop 序列化
- Hadoop序列化
- Hadoop:MapReduce序列化
- hadoop序列化机制
- Hadoop(09) 序列化
- linux系统编译C++程序时头文件和库文件搜索路径
- android4.4+实现MD状态栏并全屏显示内容
- Java程序中作业调度-Quartz
- rem让手机站自适应如此简单
- 事件响应者链传递流程
- Hadoop 序列化
- Android笔记(10)---ViewPager的使用
- JAVA 1.6源码解析-Object类
- zipOpen2_64 unzOpen2_64 return NULL
- Python spynner 解决中文不显示
- oracle sql语句的优化
- 7个现象告诉你手游圈为什么会有寒冬
- 本地上传图片的n种方法
- Carthage的安装使用