Apache Spark的设计思路
栏目:服务器时间:2015-08-03 09:13:45
大家都知道,现在Apache Spark可以说是最火的开源大数据项目,就连EMC旗下专门做大数据Pivotal也开始抛弃其自研10几年GreenPlum技术,转而投入到Spark技术开发当中,并且从全部业界而言,Spark火的程度也只有IaaS界的OpenStack能等量齐观。那末本文作为1篇技术文章,我们接着就直接切入它的核心机制吧。
甚么是内存计算技术?
关于内存计算,就像云计算和大数据1样,其实不管在百度百科还是Wikipedia都没有非常精确的描写,但是有几个共通的关键点,我在这里给大家总结1下:其1是数据放在内存中,最少和当前查询工作触及到的数据放在都要放在内存中;其2是多线程和多机并行,也就是尽量地利用现代x86 Xeon CPU线程数多的优势来加速全部查询;其3是支持多种类型的工作负载,除常见和基本的SQL查询以后,还通常支持数据发掘,更有甚者支持Full
Stack(全栈),也就是常见编程模型都要支持,比如说SQL查询,流计算和数据发掘等。
Apache Spark的设计思路
大家都知道,现在Apache Spark可以说是最火的开源大数据项目,就连EMC旗下专门做大数据Pivotal也开始抛弃其自研10几年GreenPlum技术,转而投入到Spark技术开发当中,并且从全部业界而言,Spark火的程度也只有IaaS界的OpenStack能等量齐观。那末本文作为1篇技术文章,我们接着就直接切入它的核心机制吧。
图1. Spark的核心机制图
在Spark的核心机制方面,主要有两个层面:首先是RDD(Resilient Distributed Datasets),RDD是Spark的最基本抽象,是对散布式内存的抽象使用,实现了以操作本地集合的方式来操作散布式数据集的抽象实现,它表示已被分区,不可变的并能够被并行操作的数据集合,并且通常缓存到内存中,并且每次对RDD数据集的操作以后的结果,都可以寄存到内存中,下1个操作可以直接从内存中输入,省去了Map
Reduce框架中由于Shuffle操作所引发的大量磁盘IO。这对迭代运算比较常见的机器学习算法, 交互式数据发掘来讲,效力提升比较大。
其次,就是在RDD上面履行的算子(Operator),在Spark的支持算子方面,主要有转换(Transformation)和操作(Action)这两大类。在转换方面支持算子有 map, filter,groupBy和join等,而在操作方面支持算子有count,collect和save等。
Spark常见存储数据的格式是Key-Value,也就是Hadoop标准的Sequence File,但同时也听说支持类似Parquet这样的列存格式。Key-Value格式的优点在于灵活,上至数据发掘算法,明细数据查询,下至复杂SQL处理都能承载,缺点也很明显就是存储空间比较浪费,和类似Parquet列存格式相比更是如此,key-Value格式数据1般是原始数据大小的2倍左右,而列存1般是原始数据的1/3到1/4。
在效力层面,由于・使用Scala这样基于JVM的高级语言来构建,不言而喻会有1定程度的损失,标准Java程序履行时候的速度基本接近C/C++ O0模式的程度,会比C/C++ O2模式的速度慢60%左右。
在技术创新方面,个人觉得Spark还谈不上创新,由于它其实属于比较典型In-Memory Data Grid内存数据网格,不管从7⑻年前的IBM WebSphere eXtreme Scale到最近几年新出,并用于12306的Pivotal Gemfire都采取较类似的架构,都主要通过量台机器拼成1个较大内存网格,里面存储的数据都接近Key-Value模式,并且这个内存网格会根据很多机制来确保数据会持久稳定地保存在内存中,并能保持数据的更新和恢复,而在网格上面使用1些常见的算子,来履行灵活的查询,并且用户可以写的程序来直接调用这些算子。
------分隔线----------------------------
------分隔线----------------------------