您的位置:首页 > 其它

Spark之IO机制

2015-10-24 14:33 190 查看
传统IO和SparkIO区别
传统的数据存在单个计算机中,数据量少。Spark的数据存储在集群中,数据量巨大。
Spark需要考虑本地主机的IO开销,还需要顾虑到不同主机之间的传输开销。

IO序列化
目的:

进程间通信:不同节点之间进行数据传输。
数据持久化存储到磁盘:本地节点将对象写入磁盘。

作用:
无论是内存或者磁盘中的RDD含有的对象存储,还是节点间的传输数据,都需要执行序列化的过程。序列化与反序列化的速度、序列化后的数据大小等都影响数据传输的速度,以致影响集群的计算效率。

方法:

Java序列化库
Kyro序列化库:Kyro具有紧凑、快速、轻量的优点,允许自定义序列化方法,且扩展性很好。

IO压缩
场景:
当大片连续区域进行数据存储并且存储区域中数据重复性高的状况下,数据适合进行压缩。
数组或者对象序列化后的数据块可以考虑压缩。所以序列化后的数据可以压缩,使数据紧缩,减少空间开销。

算法:
Snappy和LZF两种压缩算法。

在分布式计算中,序列化和压缩是两个重要的手段。
Spark通过序列化将链式分布的数据转化为连续分布的数据,这样就能够进行分布式的进程间数据通信,或者在内存进行数据压缩等操作,提升Spark的应用性能。通过压缩,能够减少数据的内存占用,以及IO和网络数据传输开销。

Spark的Block管理
RDD在逻辑上是按照Partition分块的,可以将RDD看成是一个分区作为数据项的分布式数组。而物理上存储RDD是以Block为单位的,一个Partition对应一个Block。

整体的IO管理分为:

通信层:I/O模块也是采用Master-Slave结构来实现通信层的架构,Master和Slave之间传输控制信息、状态信息。
存储层:Spark的块数据需要存储到内存或者磁盘,有可能还需传输到远端机器,这些是由存储层完成的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: