Spark,大规模数据的快速处理平台框架

Spark是Apache软件基金会下的开源项目,使用Scala语言编写,用于对大规模数据的快速处理,它与Hadoop相比最大的优点就是【快】😁。为了使程序运行更快,Spark提供了内存计算(计算数据、中间结果直接放到内存中,而非硬盘等存储介质),减少了迭代计算时的I/O开销。

Spark具有更高效和快速的计算能力,其有4大特点:

1、 速度快:采用先进的有向无环图(Directed Acyclic Graph,简称DAG。如果一个有向图无法从某个顶点出发经过若干条边回到该点,则这个图是一个有向无环图)执行引擎,以支持循环数据流与内存计算,基于内存的执行速度比Hadoop MapReduces快上百倍,基于磁盘的执行速度也较之快10倍;

2、 通用性:提供体系化的技术栈,包括SQL查询、流式计算、机器学习和图算法等组件,这些组件可无缝整合在同一应用中;

3、 易用性:支持Scala、JAVA、Python、R等编程语言,API设计简洁,用户上手快,支持交互式编程;

4、 运行模式多样:Spark可运行在独立的集群模式中,或运行在Hadoop中,也可运行在Amazon EC2等云环境中,可以访问HDFS、Cassandra、HBase、Hive等多种数据源。

实际应用中大数据处理主要是三种:①复杂的批量数据处理 ②基于历史数据的交互式查询 ③基于实时数据流的数据处理。Hadoop MapReduce主要用于批处理计算,Hive和Impala用于交互式查询,Storm主要用于流式数据查询。以上都只能针对某一种应用,但如果同时存在三种应用需求,Spark就比较合适,因为Spark的设计理念就是“一个软件栈满足不同应用场景”,它有一套完整的生态系统,技能提供内存计算架构,也可以支持多种类型计算(能同时支持批处理、流式计算和交互式查询),此外还能很好的与Hadoop生态系统兼容,Hadoop应用程序可以非常容易的迁移到Spark平台上。

除了数据存储需要借助Hadoop的HDFS或Amazon S3外,其主要功能组件包括Spark Core(基本通用功能,可进行复杂的批处理计算)、Spark SQL(支持基于历史数据的交互式查询计算)、Spark Streaming(支持实时流式计算)、MLib(提供常用机器学习算法,支持基于历史数据的数据挖掘)和GraphX(支持图计算)等。

尽管Spark有很多有点,但它不能完全代替Hadoop,二是主要代替MapReduce计算模型。在实际应用中,Spark常与Hadoop结合使用,它可以借用YARN来实现资源调度管理,借助HDFS实现分布式存储。比起Hadoop可以用大量廉价计算集群进行分布式存储计算,Spark对硬件要求较高,成本也就相对高一些。