Spark是一个开源计算框架,作为计算引擎,他把程序分发到集群中的许多机器,同时提供了一个优雅的编程模型。Spark源于加州大学伯克利分校的AMPLab,现在已经捐献给了Apache软件基金会。可以这么说,对于数据科学家而言,真正让分布式编程进入寻常百姓家的开源软件,Spark是第一个。
了解Spark的最好办法莫过于了解相比于它的前辈,即Apache Hadoop的 MapReduce,Spark有哪些进步。MapRrduce革新了海量数据的计算方式,为运行在成百上千台机器上的并行程序提供了简单的编程模型。MapReduce引擎几乎可以做到线性扩展;随着数据量的增加,可以通过增加更多的计算机来保持作业时间不变。而且MapReduce 是健壮。故障虽然在单台机器上很少出现,但是在数千个节点的集群上总是出现的。对于这种情况MapReduce也能很好的处理。它将工作拆分成多个小任务,能优雅的处理失败的任务,并且不影响任务所属作业的正常执行。
Spark继承了MapReduce的线性扩展性和容错性,同时对他做了一些重量级扩展。首先Spark摒弃了MapReduce中的线map在reduce这样严格的方式,spark 可以执行更通用的有向无环图算子,这就意味着,在MapReduce 中需要将中间结果写入分布式文件系统时,Spark能将中间结果直接传入流水作业线的下一步。在这个方面,它类似于Dryad。Dryad也是从mapreduce中演变出来的。用户可以更自然地表达计算逻辑。Dryad更加面向开发人员,其流式API可以做到用几行代码表示复杂地流水作业。
再次,Spark扩展了前辈们的内存计算能力。他的dataset和DataFrom 抽象使开发人员将流水处理线上个的任何点物化在跨越集群点上的内存中。这样后续步骤如果需要相同的数据集就不必重新计算或者从磁盘中加载。这个特性使Spark可以应用在于以前分布式处理引擎无法胜任的任何场景。Spark非常适用于涉及大量迭代的算法中。这些算法需要多次遍历相同的数据集。Spark也使用于反应式应用,这些应用需要扫描大量内存数据并快速响应用户的查询。
或许最重要的是,Spark契合了前面提到的数据科学领域的硬道理。他认识到构建数据应用的最大瓶颈不是cpu、磁盘或者网络,而是分析人员的生产率。通过将预处理到模型评价的整个流水线整合在一个编程环境中,Spark大大加速了开发过程。这一点尤为值得称赞。Spark编程模型富有表达力,在REPL下包装了一组分析库,省去了多次往返IDE的开学。而这些开销对诸如MapReduce等框架来说是无可避免的.Spark还避免了采样和从Hadoop分布式文件系统来回倒腾数据所带来的问题,这些问题是R之类的框架经常遇到的。分析人员在数据上做实验的速度越快,他们的数据中挖掘出价值的可能性就越大。
在数据处理和ETL方面,Spark的目标是成为大数据届的Python而不是大数据届的MATLAB。作为一个通用的计算引擎,它的核心API为数据转换提供了强大的基础,它独立于统计学、机器学习活矩阵代数的任何功能,它的SCALA和python API 让我们可以用表达力极强的通用编程语言编写程序,还可以访问已有的库。
Spark 的内存缓慢使它适用于微观和宏观两个层面的迭代计算。机器学习算法需要多次遍历训练集,可以将训练届缓存在内存里。在对数据集进行探索和初步了解时,数据科学家可以在运行查询的时候将数剧集放在内存中,也很容易将转变后的版本缓存起来,这样就节省了访问磁盘的开销。
最后,Spark在探索型分析系统和操作型分析系统之间搭起一座桥梁。我们经常说:数据科学家比统计学家更懂软件工程,比软件工程更懂统计学。基本上讲,Spark比探索型系统更像操作性系统,比操作型系统中常见的技术更善于技术探索。Spark从根本上是为了性能和可靠性而生。由于构建在JVM 上,它可以利用Java 技术栈里的许多操作和调试工具。
Spark还紧密集成Hadoop 生态系统里的许多工具。它能读写MapReduce 支持的所以数据格式,可以与Hadoop 上常用的数据格式,如Apache 和Apache Parquet ,进行交互。它能读写NOSql 数据库,比如 Apache HBase 和Apache Cassandra. 它的流式处理组件Spark Streaming 能连续 从Apache Flume 和 Apacke Kafka 之类的系统读取数据。它的Sql 库和SparkSql 能和Apache Hive Mttastore 交互,而且通过Hive on Spark, Spark 还能替代MapReduce 作为Hive 的底层执行引擎。它可以运行在Hadoop 集群调度和资源管理器YARM上,这样Spark 可以和MapReduce 及 Apache IMPAIA 等其他处理引擎动态共享集群资源和管理策略。
_ _ _____ _ _ _____ _____ _____ ___ _____ _ _
| | | | | ____| | | | | / _ \ / ___/ | _ \ / | | _ \ | | / /
| |_| | | |__ | | | | | | | | | |___ | |_| | / /| | | |_| | | |/ /
| _ | | __| | | | | | | | | \___ \ | ___/ / / | | | _ / | |\ \
| | | | | |___ | |___ | |___ | |_| | ___| | | | / / | | | | \ \ | | \ \
|_| |_| |_____| |_____| |_____| \_____/ /_____/ |_| /_/ |_| |_| \_\ |_| \_\