`

Hadoop 中数据的序列化与反序列化

 
阅读更多

1 作用:

序列化和反序列化就是结构化对象和字节流之间的转换,主要用在内部进程的通讯和持久化存储方面

2 个人理解:因为hadoop 网络传输和本地文件保存比较多,序列化的数据更加方便的进行数据通信和对象的持久化

3 实现接口WritableableComparable 并且实现序列化与反序列化的方法 ,注意写入参数和读出的参数顺序一直就可以了 (write和readField方法)

4 重写toString方法,为了流输出的时候使用

 

1 )序列化的对象

public class Student implements WritableComparable {


	private Text name = new Text();
	private IntWritable age = new IntWritable();
	private Text sex = new Text();

	public Student() {
	}

	public Student(String name, int age, String sex) {
		super();
		this.name = new Text(name);
		this.age = new IntWritable(age);
		this.sex = new Text(sex);
	}
	//set 和get方法省略 
	public void readFields(DataInput in) throws IOException {
		name.readFields(in);
		age.readFields(in);
		sex.readFields(in);
	}
	public void write(DataOutput out) throws IOException {
		name.write(out);
		age.write(out);
		sex.write(out);
	}
	public int compareTo(Object o) {
		Student s = (Student) o;
		int result = 0;
		if ((result = name.compareTo(s.getName())) != 0)
			return result;
		if ((result = age.compareTo(s.getAge())) != 0)
			return result;
		if ((result = sex.compareTo(s.getSex())) != 0)
			return result;
		return 0;
	}
}

 

2 序列化对象的使用(对象写到文件中和从文件中直接读取对象)

public class Client {
	public static void main(String[] args) throws IOException {
		
		Student s = new Student("123", 20, "网站");// 从此开始序列化
		FileOutputStream fout = new FileOutputStream(new File(
				"F:\\testWritable.txt"));
		DataOutputStream out = new DataOutputStream(fout);
		s.write(out);
		
		fout.close();
		out.close();
		Student s1 = new Student(); // 从此开始是反序列化
		FileInputStream fin = new FileInputStream(new File(
				"F:\\testWritable.txt"));
		DataInputStream in = new DataInputStream(fin);
		s1.readFields(in);
		System.out.println("name = " + s1.getName() + ",age = " + s1.getAge()
				+ ",sex =" + s1.getSex());
	}
}

 

 

 

 

分享到:
评论

相关推荐

    Hadoop序列化机制

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

    Avro数据序列化系统(1)

    总的来说,Avro是Hadoop生态中的重要工具,通过其高效的数据序列化和反序列化能力,简化了大数据处理的复杂性,提高了数据交换的效率。在分布式计算环境中,无论是存储、传输还是处理大量数据,Avro都是一个值得信赖...

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

    序列化是将内存中的对象转化为可存储或可传输的数据格式的过程,而反序列化则是相反的操作,将这些数据恢复为原来的对象。在Hadoop中,序列化主要用于持久化数据和在网络中高效地传输数据。Java自带的序列化框架虽然...

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

    HDFS放宽了(relax)POSIX的要求(requirements)这样可以流的形式访问(streaming access)文件系统中的数据。 Hadoop 是一个能够对大量数据进行分布式处理的软件框架。但是 Hadoop 是以一种可靠、高效、可伸缩的...

    java-Hadoop序列化

    总之,Hadoop的`Writable`序列化机制是其在大数据处理中高效、灵活地管理数据的关键技术。通过实现`Writable`接口,开发者可以自定义数据结构的序列化逻辑,确保数据能在Hadoop集群内顺畅地流动。

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

    `Writable`接口是Hadoop中用于数据序列化和反序列化的基础接口,它规定了对象如何被转换成字节流和从字节流恢复的方法。 `FlowBean`类包含了三个私有变量:`upFlow`表示上行流量,`downFlow`表示下行流量,`...

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

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

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

    HDFS放宽了(relax)POSIX的要求(requirements)这样可以流的形式访问(streaming access)文件系统中的数据。 Hadoop 是一个能够对大量数据进行分布式处理的软件框架。但是 Hadoop 是以一种可靠、高效、可伸缩的...

    【Hadoop篇09】Hadoop序列化1

    在Hadoop MapReduce作业中,`FlowBean`作为键值对的键或值,会被序列化和反序列化多次。序列化机制的紧凑性、快速性和可扩展性确保了高效的数据处理。Hadoop的序列化机制还允许不同语言之间进行交互,这意味着即使...

    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 ...

    avro序列化

    接下来,我们来看一下Avro数据序列化与反序列化的流程: 1. **定义数据模式**:使用JSON编写Avro模式文件,描述数据的结构,包括字段名、数据类型等。 2. **生成数据对象**:根据模式文件,可以生成特定语言的类,...

    Hadoop数据迁移--从Oracle向Hadoop

    在执行Hadoop数据迁移时,Hadoop集群中的MapReduce作业会利用JDBC驱动与Oracle数据库建立连接,通过执行SQL查询来检索数据,并使用Hadoop的序列化机制将数据写入到HDFS。这样,Oracle中的数据就成功地迁移到了Hadoop...

    Java实现序列化例子

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

    几种序列化的实现方法 java自带, Writable, Avro

    Writable是Hadoop框架中的序列化接口,主要用于分布式计算环境的数据交换。与Java序列化相比,它更加轻量级且性能更好。每个可序列化的类型(如IntWritable, Text等)都实现了`write()`和`readFields()`方法,用于...

    Hadoop之外卖订单数据分析系统

    如果需要实时监控订单数据,可以引入Spark Streaming或Flink等实时处理框架,它们能实时处理数据流,并与Hadoop生态系统无缝集成。 最后,系统的稳定性、扩展性和安全性也是设计时必须考虑的因素。通过YARN(Yet ...

    Hadoop源代码分析(三)

    在深入分析Hadoop源代码的过程中,我们关注到其在数据通信和序列化方面的重要机制。Hadoop并没有简单地采用Java自带的序列化方法,而是设计了一套自有的系统,这主要是为了提高性能、可扩展性和跨平台兼容性。在...

    Hadoop分析气象数据完整版代码

    在这个项目中,我们重点关注的是一套完整的Hadoop分析气象数据的代码,这涉及到分布式计算、数据处理以及数据可视化等多个关键知识点。 首先,我们要理解Hadoop的核心组件:HDFS(Hadoop Distributed File System)...

    Avro 1.8.2 序列化规范

    Avro 1.8.2版本为Hadoop新型序列化框架规范定义了相关细节,提供了标准化的序列化和反序列化机制,可以用于远程过程调用(RPC)和持久化数据的存储。 ### 标题和描述知识点 标题“Avro 1.8.2 序列化规范”直接指出了...

    自定义序列化:Hadoop与Spark中的数据处理艺术

    - **数据处理速度**:Spark通常比Hadoop快,特别是在迭代算法和实时数据处理方面。 - **易用性**:Spark提供了更简洁和更现代的API。 - **内存使用**:Spark优化了内存使用,而Hadoop MapReduce则更多依赖于磁盘存储...

Global site tag (gtag.js) - Google Analytics