[翻译][Spark In Action][Spark 实战 ]1.1.3 Spark 带来了什么

1.1.3 Spark 带来了什么


Spark的核心概念是一个内存中执行模型,它能够在内存中缓存作业数据,而不是像MapReduce一样每次从磁盘读取数据。这可以将作业的执行速度提高到100倍,与Map-Reduce中的相同作业相比,它对迭代算法(如机器学习,图形算法和需要重新使用数据的其他类型的工作负载)有最大的影响。
假设您有城市地图数据存储为图形。该图的顶点表示地图上的感兴趣点,并且边缘表示它们之间的可能路线,以及相关联的距离。现在假设你需要找到一个新的救护车站的位置,它将尽可能靠近地图上的所有点。该点将是图形的中心。可以通过首先计算所有顶点之间的最短路径,然后找到每个顶点的最远点距离(到任何其他顶点的最大距离),并且最终找到具有最小最远点距离的顶点来找到。完成算法的第一阶段,找到所有顶点之间的最短路径,以并行方式是最具挑战性(和复杂)的部分,但它不是不可能的。
在MapReduce的情况下,您需要将这三个阶段的每个阶段的结果存储在磁盘(HDFS)上。每个后续阶段将从磁盘读取前一个结果。但是使用Spark,你可以找到所有顶点之间的最短路径,并缓存内存中的数据。下一个阶段可以使用内存中的数据,为每个顶点找到最远点距离,并缓存其结果。最后一个阶段可以通过这个最终的缓存数据,找到具有最小点距离的顶点。您可以想象每次读取和写入磁盘时的性能提升。
火花性能是如此的好,在2014年10月,它赢得了Daytona灰色排序
竞争和设定一个世界纪录(与TritonSort,公平)通过分类100 TB
在1,406秒(见http://sortbenchmark.org)。


Spark 的易用

Spark API比传统的MapReduce API更容易使用。 要将附录A中的经典字数示例实现为MapReduce作业,您需要三个类:设置作业的主类,一个Mapper和一个Reducer,每个10行长,给出或取几个。

相比之下,以下是对Scala编写的同一个Spark程序所需要的:

如图1.1,显示此图形。
Spark支持Scala,Java,Python和R编程语言,因此可供更广泛的受众访问。 尽管支持Java,Spark可以利用Scala的多功能性,灵活性和函数式编程概念,这些概念更适合于数据分析。 Python和R在数据科学家和科学界中广泛传播,这使得那些用户与Java和Scala开发人员相提并论。
此外,Spark shell(read-eval-print loop [REPL])提供了一个交互式控制台,可用于实验和想法测试。 没有必要编译和部署只是为了发现一些东西不工作(再次)。 REPL甚至可用于在完整的数据集上启动作业。

字数计数程序(word-count)演示了Spark的简洁性和简单性。 该程序显示在左侧的Hadoop的MapReduce框架中,右侧是一个Spark Scala程序。

图1.1 字数计数程序(word-count)演示了Spark的简洁性和简单性。 该程序显示在左侧的Hadoop的MapReduce框架中,右侧是一个Spark Scala程序。


本文http://www.paymoon.com:8001/index.php/2016/12/27/what-spark-brings-to-the-table/

如果转载请联系 龙遥Yol  i@paymoon.com


最后,Spark可以在几种类型的集群上运行:Spark独立集群,Hadoop的YARN(另一个资源协商者)和Mesos。 这给予它额外的灵活性,并使其可供更大的用户群体访问。


Spark是一个统一的平台

Spark的一个重要方面是将Hadoop生态系统中许多工具的功能组合成一个统一的平台。 执行模型是足够通用的,单个框架可以用于流数据处理,机器学习,类SQL操作,图形和批处理。 许多角色可以在同一平台上协同工作,这有助于弥合程序员,数据工程师和数据科学家之间的差距。 Spark提供的函数列表继续增长。


Spark的反模式化

Spark不适合用于异步更新共享数据(例如在线事务处理),因为它已经考虑批处理分析。 (Spark流只是在时间窗口中对数据应用批处理分析。)仍然需要专门为这些用例使用的工具。
此外,如果您没有大量数据,则可能不需要Spark,因为它需要花一些时间设置作业,任务等。 有时,一个简单的关系数据库或一个聪明的脚本可以用来比分布式系统(如Spark)更快地处理数据。 但是数据有增长的趋势,它可能会相当快地超过关系数据库管理系统(RDBMS)或您的聪明脚本。

发表评论

电子邮件地址不会被公开。