基本概念:
Spark作为新一代大数据计算引擎,因为内存计算的特性,具有比hadoop更快的计算速度。是一个分布式计算框架,旨在简化运行于计算机集群上的并行程序的编写。
RDD:是spark核心数据处理模型,弹性分布式数据集(Resilient Distributed Dataset)是分布式内存的一个抽象概念,提供了一个高度受限的共享内存模型。一个RDD包含多个分区(Partition)。
DAG:有向无环图(Directed Acyclic Graph)反应RDD之间的依赖关系。
Executor:运行在工作节点(WorkNode)的一个进程,负责运行Task。
Application:用户编写的Spark程序。
Task:运行在Executor上的工作单元。
Job:一个Job包含多个RDD及作用于相应RDD上的各种操作。
Stage:是Job的基本调度单位,一个Job会分为多组Task,每组Task被称为Stage,或者也被称为TaskSet,代表了一组由关联的、相互之间没有shuffle依赖关系的任务组成的任务集。
以下是Spark中各种概念之间的相互关系:
Spark组件:
Spark主要包含了Spark Core、Spark SQL、Spark Streaming、MLLib和GraphX 等组件 。
Spark Core:Spark Core包含Spark的基本功能,如内存计算、任务调度、部署模式、故障恢复、存储管理等;
Spark SQL:Spark SQL允许开发人员直接处理RDD(弹性分布式数据集),同时也可查询Hive、HBase等外部数据源。Spark SQL的一个重要特点是其能够统一处理关系表和RDD,使得开发人员可以轻松地使用SQL命令进行查询,并进行更复杂的数据分析;
Spark Streaming:Spark Streaming支持高吞吐量、可容错处理的实时流数据处理,其核心思路是将流式计算分解成一系列短小的批处理作业。
Spark Streaming支持多种数据输入源,如Kafka、Flume和TCP套接字等;
4. MLlib(机器学习):MLlib提供了常用机器学习算法的实现,包括聚类、分类、回归、协同过滤等,降低了机器学习的门槛,开发人员只要具备一定的理论知识就能进行机器学习的工作;
5. GraphX(图计算):GraphX是Spark中用于图计算的API,可认为是Pregel在Spark上的重写及优化,Graphx性能良好,拥有丰富的功能和运算符,能在海量数据上自如地运行复杂的图算法。
右侧为spark组件:
技术特征:
1.运行速度快:
使用先进的DAG(Directed Acyclic Graph,有向无环图)执行引擎,以支持循环数据流与内存计算,基于内存的执行速度可比Hadoop MapReduce快上百倍,基于磁盘的执行速度也能快十倍;
2.容易使用:
Spark支持使用Scala、Java、Python和R语言进行编程,简洁的API设计有助于用户轻松构建并行程序,并且可以通过Spark Shell进行交互式编程;
3.通用性:
Spark提供了完整而强大的技术栈,包括SQL查询、流式计算、机器学习和图算法组件,这些组件可以无缝整合在同一个应用中,足以应对复杂的计算;
4.运行模式多样:
Spark可运行于独立的集群模式中,或者运行于Hadoop中,也可运行于Amazon EC2等云环境中,并且可以访问HDFS、Cassandra、HBase、Hive等多种数据源。
运行框架:
应用场景:
1. 应用场景:
Spark是基于内存的迭代计算框架,适用于需要多次操作特定数据集的应用场合。需要反复操作的次数越多,所需读取的数据量越大,受益越大,数据量小但是计算密集度较大的场合,受益就相对较小。适用场景:复杂的批量处理(Batch Data Processing),偏重点在于处理海量数据的能力,至于处理速度可忍受,通常的时间可能是在数十分钟到数小时;基于历史数据的交互式查询(Interactive Query),通常的时间在数十秒到数十分钟之间;基于实时数据流的数据处理(Streaming Data Processing),通常在数百毫秒到数秒之间总的来说Spark的适用面比较广泛且比较通用。
例如:腾讯大数据使用了Spark平台来支持挖掘分析类计算、交互式实时查询计算以及允许误差范围的快速查询计算,腾讯大数据精准推荐借助Spark快速迭代的优势,围绕“数据+算法+系统”技术方案,实现了在“数据实时采集、算法实时训练、系统实时预测”的全流程实时并行高维算法,支持每天上百亿的请求量。
Spark与hadoop比较:
Spark是给予map reduce 算法实现的分布式计算,拥有Hadoop MapReduce所具有的有点,但不同与MaoReduce的是Job中间输出和结果可以保存在内存中,从而不用在读写HDFS,因此Spark能更好的适用于数据挖掘与机器学习等需要迭代的map reduce的算法。
1. Spark比Hadoop更快:
Spark 与Hadoop的MapReduce相比,Spark基于内存的运算要快100倍以上;而基于磁盘的运算也要快10倍以上。Spark实现了高效的DAG执行引擎,可以通过基于内存来高效地处理数据流.Spark的中间数据放到内存中,对于迭代运算效率比较高。 (Hadoop MapReduce是分步对数据进行处理的: 从集群中读取数据,进行一次处理,将结果写到集群,从集群中读取更新后的数据,进行下一次的处理,将结果写到集群。spark从集群中读取数据,完成所有必须的分析处理,将结果写回集群,完成。)
2. Spark比Hadoop更通用:
Spark提供了统一的解决方案。Spark可以用于批处理、交互式查询(通用Spark SQL)、实时流处理(通过Spark Streaming)、机器学习(通过Spark MLlib)和图计算(通过Spark GraphX)。这些不同类型的处理都可以在同一应用中无缝使用。Spark统一的解决方案非常具有吸引力,毕竟任何公司都想用统一的平台处理问题,减少开发和维护的人力成本和部署平台的物理成本。当然还有,作为统一的解决方案,Spark并没有以牺牲性能为代价。相反,在性能方面Spark具有巨大优势。
3. Spark与Hadoop的结合:
Hadoop除了提供为大家所共识的HDFS分布式数据存储功能之外,还提供了叫做MapReduce的数据处理功能。所以这里完全可以抛开Spark,使用Hadoop自身的MapReduce来完成数据的处理。相反,Spark也不是非要依附在Hadoop身上才能生存,毕竟它没有提供文件管理系统,所以,相反,Spark也不是非要依附在Hadoop身上才能生存。毕竟它没有提供文件管理系统,所以,它必须和其他的分布式文件系统进行集成才能运作。这里我们可以选择Hadoop的HDFS,也可以选择其他的基于云的数据系统平台。但Spark默认来说还是被用在Hadoop上面的,它们的结合是最好的。