《Hadoop 实战》第七章--Hadoop I/O操作
1.I/O操作中的数据检查
Apache的Hadoop官网上有一一个名为Sort900的具体的Hadoop配置实例,所谓Sort900就是在900台主机上对9TB的数据进行排序。一般而言,在Hadoop集群的实际应用中,主机的数目是很大的,Sort900 使用了900 台主机,而淘宝目前则使用了1100 台主机来存储他们的数据(据说计划扩充到1500台)。在这么多的主机同时运行时,你会发现主机损坏是非常常见的,这就会涉及很多程序上的预处理了。对于本章而言,就体现在Hadoop中进行数据完整性检查的重要性上。
校验和方式是检查数据完整性的重要方式。--般会通过对比新旧校验和来确定数据情况, 如果两者不同则说明数据已经损坏。比如,在传输数据前生成了一个校验和,将数据传输到目的主机时再次计算校验和,如果两次的校验和不同,则说明数据已经损坏。或者在系统启动时计算校验和,如果其值和硬盘上已经存在的校验和不同,那么也说明数据已经损坏。校验和不能恢复数据,只能检测错误。
Hadoop采用CRC-32 (Cyclic Redundancy Check---循环冗余校验,32指生成的校验和是32位的)的方式检查数据完整性。这是一种非常 常见的校验 和验证方式,检错能力强,开销小,易于实现。
校验和方式是检查数据完整性的重要方式。--般会通过对比新旧校验和来确定数据情况, 如果两者不同则说明数据已经损坏。比如,在传输数据前生成了一个校验和,将数据传输到目的主机时再次计算校验和,如果两次的校验和不同,则说明数据已经损坏。或者在系统启动时计算校验和,如果其值和硬盘上已经存在的校验和不同,那么也说明数据已经损坏。校验和不能恢复数据,只能检测错误。
Hadoop采用CRC-32 (Cyclic Redundancy Check---循环冗余校验,32指生成的校验和是32位的)的方式检查数据完整性。这是一种非常 常见的校验 和验证方式,检错能力强,开销小,易于实现。
2.数据的I/O中序列化操作
序列化是将对象转化为字节流的方法,或者说用字节流描述对象的方法。与序列化相对的是反序列化,反序列化是将字节流转化为对象的方法。序列化有两个目的:
1)进程间通信;
2)数据持久性存储。
Hadoop采用RPC来实现进程间通信。一般而言, RPC的序列化机制有以 下特点:1)紧凑:紧凑的格式可以充分利用带宽,加快传输速度;
2)快速:能减少序列化和反序列化的开销, 这会有效地减少进程间通信的时间;
3)可扩展:可以逐步改变,是客户端与服务器端直接相关的,例如,可以随时加人一个新的参数方法调用;
4)互操作性:支持不同语言编写的客户端与服务器交换数据。
Hadoop也希望数据持久性存储同样具有以上这些优点,因此它的数据序列化机制就是依照以上这些目的而设计的(或者说是希望设计成这样)。
在Hadoop中,序列化处于核心地位。因为无论是存储文件还是在计算中传输数据,都需要执行序列化的过程。序列化与反序列化的速度,序列化后的数据大小等都会影响数据传输的速度, 以致影响计算的效率。正是因为这些原因,Hadoop并没有采用Java提供的序列化机制(Java Object Serialization),而是自己重新写了一个序列化机制Writeables。
1)进程间通信;
2)数据持久性存储。
Hadoop采用RPC来实现进程间通信。一般而言, RPC的序列化机制有以 下特点:1)紧凑:紧凑的格式可以充分利用带宽,加快传输速度;
2)快速:能减少序列化和反序列化的开销, 这会有效地减少进程间通信的时间;
3)可扩展:可以逐步改变,是客户端与服务器端直接相关的,例如,可以随时加人一个新的参数方法调用;
4)互操作性:支持不同语言编写的客户端与服务器交换数据。
Hadoop也希望数据持久性存储同样具有以上这些优点,因此它的数据序列化机制就是依照以上这些目的而设计的(或者说是希望设计成这样)。
在Hadoop中,序列化处于核心地位。因为无论是存储文件还是在计算中传输数据,都需要执行序列化的过程。序列化与反序列化的速度,序列化后的数据大小等都会影响数据传输的速度, 以致影响计算的效率。正是因为这些原因,Hadoop并没有采用Java提供的序列化机制(Java Object Serialization),而是自己重新写了一个序列化机制Writeables。