每年,市场上似乎有越来越多的分布式系统来管理数据量,种类和速度。 在这些系统中,Hadoop和Spark是两个继续获得最多关注的系统。
什么是Hadoop?
Hadoop于2006年作为Yahoo项目开始,后来成为顶级Apache开放源代码项目。这是一种分布式处理的通用形式,它包含多个组件:Hadoop分布式文件系统(HDFS),以Hadoop本地格式存储文件并在集群中并行化它们; YARN,用于协调应用程序运行时的时间表;和MapReduce,该算法实际上是并行处理数据。 Hadoop是用Java构建的,可通过许多编程语言进行访问,以通过Thrift客户端编写包括Python在内的MapReduce代码。
什么是Spark?
Spark是一个较新的项目,最初于2012年在UC Berkeley的AMPLab开发。这也是Apache的顶级项目,致力于跨集群并行处理数据,但是最大的不同是它可以在内存中工作。
Hadoop可以将文件读取和写入HDFS,而Spark使用称为RDD(弹性分布式数据集)的概念来处理RAM中的数据。 Spark可以在独立模式下运行,以Hadoop集群作为数据源,也可以与Mesos一起运行。在后一种情况下,出于计划目的,Mesos主服务器将替换Spark主服务器或YARN。
Spark围绕Spark Core构建,Spark Core是驱动调度,优化和RDD抽象的引擎,并将Spark连接到正确的文件系统(HDFS,S3,RDBM或Elasticsearch)。有几个库可在Spark Core上运行,包括Spark SQL(可让您在分布式数据集上运行类似SQL的命令),MLLIb(用于机器学习),GraphX(用于图形问题)和流(可输入连续流)日志数据。
Hadoop
首先,将所有传递到HDFS的文件拆分为块。根据配置的块大小和复制因子,每个块在集群中被复制指定的次数。该信息将传递到NameNode,该NameNode跟踪整个集群中的所有内容。 NameNode将文件分配给多个数据节点,然后在这些数据节点上写入文件。 2012年实现了高可用性,允许NameNode故障转移到备份节点上,以跟踪整个群集中的所有文件。
Spark
Spark以类似于Hadoop的方式处理工作,除了计算在内存中执行并存储在内存中,直到用户主动将其持久化为止。最初,Spark从HDFS,S3或另一个文件存储上的文件中读取已建立的名为SparkContext的机制。在这种情况下,Spark创建了一种称为RDD(即弹性分布式数据集)的结构,该结构表示可以并行操作的元素的不可变集合。
在创建RDD和相关动作时,Spark还将创建一个DAG或有向非循环图,以可视化操作顺序以及DAG中操作之间的关系。每个DAG都有阶段和步骤;这样,它类似于SQL中的解释计划。
您可以对RDD执行转换,中间步骤,操作或最终步骤。给定转换的结果进入DAG,但不会持久保存到磁盘,但是操作的结果会将内存中的所有数据持久保存到磁盘。
Spark中的一个新的抽象是DataFrames,它是在Spark 2.0中开发的,作为RDD的配套接口。两者极为相似,但DataFrames将数据组织到命名列中,类似于Python的pandas或R包。这使它们比没有类似的列级标题引用集的RDD更易于使用。 SparkSQL还允许用户查询数据框架,就像关系数据存储中的SQL表一样。
蜂巢架构
Hive体系结构非常简单。它具有Hive界面,并使用HDFS跨多个服务器存储数据以进行分布式数据处理。
蜂巢
数据仓库系统配置单元
Hive是一个专门构建的数据库,用于数据仓库操作,尤其是那些处理TB或PB数据的操作。它是类似于RDBMS的数据库,但不是100%RDBMS。如前所述,它是一个水平扩展的数据库,并利用Hadoop的功能,使其成为快速执行的大规模数据库。它可以在数千个节点上运行,并且可以利用商用硬件。这使Hive成为具有成本效益的产品,可提供高性能和可扩展性。
蜂巢集成能力
由于它支持ANSI SQL标准,因此Hive可以与HBase和Cassandra等数据库集成。这些工具对SQL的支持有限,可以帮助应用程序执行分析并报告更大的数据集。 Hive还可以与数据流工具(例如Spark,Kafka和Flume)集成。
蜂巢的局限性
Hive是一个纯数据仓库数据库,它以表的形式存储数据。结果,它只能处理使用SQL查询读写的结构化数据。 Hive不是非结构化数据的选项。此外,Hive对于OLTP或OLAP类型的操作也不理想。
什么是星火?
Spark是一个分布式大数据框架,可帮助提取和处理RDD格式的大量数据以进行分析。简而言之,它不是数据库,而是一个框架,可以使用Hive,Hadoop和HBase等数据存储区中的RDD(弹性分布式数据)方法访问外部分布式数据集。 Spark可以在内存中执行复杂的分析,因此可以快速运行。
什么是火花流?
Spark流是Spark的扩展,可以从Web来源实时流实时数据以创建各种分析。尽管还有其他工具(例如Kafka和Flume)可以执行此操作,但是Spark成为执行非常复杂的数据分析的必要选择。 Spark拥有自己的SQL引擎,并且与Kafka和Flume集成时效果很好。
一点火花的历史
引入了Spark作为MapReduce的替代方案,MapReduce是一种缓慢且占用大量资源的编程模型。由于Spark对内存中的数据执行分析,因此它不必依赖于磁盘空间或使用网络带宽。
为什么要发火花?
Spark的核心优势在于其执行复杂的内存中分析和将数据大小调整为PB的能力,使其比MapReduce更加高效,更快。 Spark可以从Hadoop上运行的任何数据存储中提取数据,并在内存中并行执行复杂的分析。此功能减少了磁盘I / O和网络争用,使其速度提高了十倍甚至一百倍。此外,可以使用Java,Scala,Python,R甚至SQL建立Spark中的数据分析框架。
Spark架构
Spark体系结构可以根据要求而变化。通常,Spark体系结构包括Spark Streaming,Spark SQL,机器学习库,图形处理,Spark核心引擎以及数据存储,例如HDFS,MongoDB和Cassandra。
火花
Spark的功能
闪电般的分析
Spark从Hadoop提取数据并在内存中执行分析。数据以并行方式和分块方式拉入内存,然后将结果数据集压入其目的地。数据集也可以驻留在内存中,直到被消耗为止。
火花流
Spark Streaming是Spark的扩展,可以实时从频繁使用的Web来源流式传输大量数据。由于具有执行高级分析的能力,因此与其他数据流工具(例如Kafka和Flume)相比,Spark表现出色。
支持各种API
Spark支持Java,Python和Scala等不同的编程语言,这些语言在大数据和数据分析领域非常受欢迎。这允许以任何这些语言编写数据分析框架。
海量数据处理能力
如前所述,高级数据分析通常需要在海量数据集上执行。在Spark出现之前,这些分析是使用MapReduce方法执行的。 Spark不仅支持MapReduce,还支持基于SQL的数据提取。需要对海量数据集进行数据提取的应用程序可以使用Spark进行更快的分析。
与数据存储和工具集成
Spark可以与运行在Hadoop上的Hive和HBase等各种数据存储集成。它还可以从NoSQL数据库(如MongoDB)中提取数据。与数据库中执行此类分析的其他应用程序不同,Spark一次从数据存储中提取数据,然后对内存中提取的数据集执行分析。
Spark的扩展程序Spark Streaming可以与Kafka和Flume顺利集成,以构建高效,高性能的数据管道。