当大数据浪潮席卷全球时,Spark开始流行。 在海外,Yahoo!、Intel等公司已率先应用和推广Spark技术。 国内的阿里巴巴、百度、淘宝、腾讯、网易、星链等企业敢为人先,乐于分享。 在后续的发展中,IBM、微软、等公司都将Spark集成到现有的解决方案中,加入了Spark阵营。 Spark在IT行业的应用可谓是星星之火,燎原之势。
。 它不是一个单独的产品,而是一个生态系统,spark 也是如此。 让我们一一解释一下。 目前的生态系统主要包括:
HDFS——分布式文件系统。 它是一个分布式、面向块、不可更新、高度可扩展的文件系统,可以运行在集群中的普通硬盘上。 另外,HDFS是一个独立的工具,可以独立于生态系统中的其他组件运行(但如果我们想让HDFS高可用,我们还需要依赖项和日志管理器,但那是另一回事了)。
框架 - 这是一个基本的分布式计算框架,在集群中的一组标准硬件上执行。 我们不必在 HDFS 中使用它——因为文件系统是可插拔的; 同样,我们不必在yarn中使用它,因为资源管理器是可插拔的:例如,我们可以将其替换为Mesos it。
YARN——集群中的默认资源管理器。 但是我们不能在集群中使用yarn,而是在Mesos上运行我们的mr(译注:map/)任务; 或者只在集群中运行 hbase 而不依赖于yarn。
Hive — Hive 是一种构建在框架之上的类似 SQL 的查询引擎,可将语句转换为在集群上运行的一系列任务。 另外,HDFS并不是唯一的存储系统,也不一定非要使用框架。 比如我们这里可以将其替换为Tez。
Hbase——基于HDFS的键值存储系统,提供在线事务处理(OLTP)能力。 Hbase 仅依赖于 HDFS; 但Hbase只能依赖HDFS吗? 不是的,Hbase除了运行在HDFS上,还可以运行在(内存文件系统)、IBM GPFS等框架上。
下面说说spark,主要包括以下几个方面:
Spark Core – 用于通用分布式数据处理的引擎。 它不依赖于任何其他组件,可以运行在任何商业服务器集群上。
Spark Sql – Spark上运行的SQL查询语句,支持一系列SQL函数和。 但还不是很成熟,所以不要在生产系统中使用; 相反,它集成了所需的 Hive 元数据和 Hive 相关的 jar 包。
Spark – 基于spark的微批处理引擎,支持各种数据源的导入。 唯一的依赖是 Spark Core 引擎。
MLib – 一个基于 Spark 构建的机器学习库,支持一系列数据挖掘算法。
另外,这里要讲的是关于spark的一个重要误区——“spark是一种基于内存的技术”。 它不是一种基于内存的技术; Spark是一个管道执行引擎,过程中数据会被写入磁盘(比如我们要对某个字段进行聚合操作),如果内存不够也会出现同样的情况。 内存溢出(但内存可以调整)。 因此,spark之所以更快,主要是因为它是一种流水线处理方式,而不是一些人所说的“基于内存的优化”。 当然,spark在内存中缓存是为了提高性能,但这并不是spark真正运行速度快的原因。
现在,我们来做一个完整的比较:
可以用Spark Core替代吗? 是的,随着时间的推移,它会被替换,并且替换是合理的。 不过spark还不是特别成熟,可以完全取代它。 此外,没有人会完全放弃,除非他们所依赖的所有工具都有替代品。 例如,如果你想让一个在pig上运行的脚本也能在spark上运行,那么还有一些工作要做。
Hive 可以被 Spark SQL 取代吗? 是的,又是这样。 但我们需要明白的是,Spark SQL 对于 Spark 本身来说还比较年轻,大约年轻 1.5 倍。 与更加成熟的Hive相比,它只能算是一个玩具。 我会在一年半到两年后回顾 Spark SQL。 如果我们还记得的话,我们在两三年前就声称要终结 Hive,但到目前为止,这两种技术仍然共存,并没有终结 Hive。 Spark SQL 也是如此。
Spark可以替代Storm吗? 是的,可以更换。 但公平地说,Storm 并不是生态系统的成员,因为它是一个完全独立的工具。 他们的计算模型不是很相似,所以我不认为storm会消失,但仍然会是一个商业产品。
可以用MLib代替吗? 公平地说,它已经失去了地位,并且在过去几年中正在迅速失去地位。 对于这个工具,我们可以说,这才是Spark真正可以替代生态系统的地方。
所以,综上所述,本文的结论是:
不要被大数据供应商的包装所愚弄。 他们在很大程度上宣扬的是市场而非终极真理。 它最初被设计为一个可扩展的框架,并且它的很多部分都是可替换的:HDFS可以替换,YARN可以替换为Mesos,Tez可以替换,Hive可以运行在Tez之上。 这会是技术堆栈的替代品还是完全替代品? 如果我们放弃 MR() 并使用 Tez,它还会一样吗?
Spark无法为我们提供完整的技术栈。 它允许我们将其功能集成到我们的集群中并从中受益,而无需完全脱离我们旧的集群解决方案。
Spark还不够成熟。 我认为三四年后我们将不再称其为“堆栈”,而是称其为“大数据堆栈”或类似的名称。 因为在大数据堆栈中,我们有多种选择可以从不同的开源产品中进行选择,将其组合在一起形成单一的技术堆栈。