什么是Apache Spark? 破坏Hadoop的大数据平台

Apache Spark定义

Apache Spark是一个数据处理框架,可以快速地对非常大的数据集执行处理任务,还可以自行或与其他分布式计算工具一起在多台计算机之间分布数据处理任务。 这两种素质是大数据和机器学习领域的关键,这要求将庞大的计算能力编组以处理大型数据存储。 Spark还通过易于使用的API减轻了开发人员的负担,减轻了这些任务的一些编程负担。API简化了分布式计算和大数据处理的繁重工作。

Apache Spark从2009年在UC Berkeley的AMPLab成立之初,就已经成为世界上关键的大数据分布式处理框架之一。 Spark可以通过多种方式进行部署,为Java,Scala,Python和R编程语言提供本机绑定,并支持SQL,流数据,机器学习和图形处理。 您会发现它已被银行,电信公司,游戏公司,政府以及所有主要的技术巨头(例如Apple,Facebook,IBM和Microsoft)使用。

[ InfoWorld的2020年度技术奖获奖者:年度最佳软件开发,云计算,数据分析和机器学习产品 ]

Apache Spark架构

从根本上讲,Apache Spark应用程序由两个主要组件组成:一个驱动程序执行 程序,它们将用户的代码转换为可以在工作程序节点之间分布的多个任务; 执行程序在这些节点上运行并执行分配给它们的任务。 必须使用某种形式的集群管理器在两者之​​间进行中介。

开箱即用,Spark可以在独立集群模式下运行,该集群模式只需要Apache Spark框架和集群中每台机器上的JVM。 但是,您更有可能希望利用功能更强大的资源或集群管理系统来照顾您的需求。 在企业中,这通常意味着将在Hadoop YARN上运行(这是ClouderaHortonworks发行版运行Spark作业的方式),但是Apache Spark也可以在Apache MesosKubernetesDocker Swarm上运行

如果您寻求托管解决方案,那么Apache Spark可以作为Amazon EMRGoogle Cloud DataprocMicrosoft Azure HDInsight的一部分找到 。 雇用Apache Spark创始人的公司Databricks还提供了Databricks Unified Analytics Platform ,这是一项全面的托管服务,可提供Apache Spark集群,流支持,基于Web的集成笔记本开发以及基于云的I / O性能优化。标准的Apache Spark发行版。

Apache Spark将用户的数据处理命令构建为有向无环图或DAG。 DAG是Apache Spark的调度层。 它确定在哪些节点上以什么顺序执行什么任务。

Spark与Hadoop:为什么使用Apache Spark?

值得指出的是,Apache Spark与Apache Hadoop有点用词不当。 这些天,大多数Hadoop发行版中都包含Spark。 但是由于有两个重大优势,Spark已成为处理大数据时的首选框架,从而取代了使Hadoop脱颖而出的旧MapReduce范例。

第一个优势是速度。 在某些情况下,Spark的内存中数据引擎意味着其执行任务的速度比MapReduce快一百倍,特别是与需要将状态写回磁盘之间的多阶段作业相比。 本质上,MapReduce创建了一个由数据映射和归约组成的两阶段执行图,而Apache Spark的DAG具有可以更有效地分布的多个阶段。 甚至无法将数据完全包含在内存中的Apache Spark作业也往往比其MapReduce作业快约10倍。

第二个优点是开发人员友好的Spark API。 与Spark的加速一样重要,人们可能会说Spark API的友好性更为重要。

火花芯

与MapReduce和其他Apache Hadoop组件相比,Apache Spark API对开发人员非常友好,将分布式处理引擎的大部分复杂性隐藏在简单的方法调用之后。 一个典型的例子是,如何将近50行的MapReduce代码来对文档中的单词进行计数,可以减少为仅几行Apache Spark(在Scala中显示):

val textFile = sparkSession.sparkContext.textFile(“hdfs:///tmp/words”)
val counts = textFile.flatMap(line => line.split(“ “))
                      .map(word => (word, 1))
                      .reduceByKey(_ + _)
counts.saveAsTextFile(“hdfs:///tmp/words_agg”)

通过提供对流行语言的绑定以进行数据分析(例如Python和R)以及对企业更友好的Java和Scala,Apache Spark允许从应用程序开发人员到数据科学家的每个人以可访问的方式利用其可伸缩性和速度。

[ 也在InfoWorld上:深度学习与机器学习:理解差异 ]

星火RDD

Apache Spark的核心是弹性分布式数据集RDD )的概念,它是一种编程抽象,表示可以在计算集群中拆分的对象的不可变集合。 RDD上的操作也可以在整个群集中拆分,并在并行批处理中执行,从而实现快速且可扩展的并行处理。

可以从简单的文本文件,SQL数据库,NoSQL存储(例如Cassandra和MongoDB),Amazon S3存储桶等创建RDD。 大多数Spark Core API都基于此RDD概念构建,可以实现传统的地图和简化功能,但还提供了对加入数据集,过滤,采样和聚合的内置支持。

通过将驱动程序核心流程组合在一起,Spark以分布式方式运行,该核心流程将Spark应用程序拆分为任务,并将其分配给完成工作的许多执行程序流程。 可以根据应用程序的需要按比例放大和缩小这些执行程序。

Spark SQL

最初称为Shark的Spark SQL在Apache Spark项目中变得越来越重要。 它可能是当今开发人员在创建应用程序时最常用的接口。 Spark SQL使用从R和Python(在Pandas中)借来的数据框方法专注于结构化数据的处理。 但是顾名思义,Spark SQL还提供了一个与SQL2003兼容的接口来查询数据,从而将Apache Spark的功能带给了分析人员和开发人员。

除了对标准SQL的支持外,Spark SQL还提供了一个标准接口,用于读写其他数据存储,包括JSON,HDFS,Apache Hive,JDBC,Apache ORC和Apache Parquet,所有这些都是开箱即用的。 其他受欢迎的商店(Apache Cassandra,MongoDB,Apache HBase等)可以通过从Spark Packages生态系统中引入单独的连接器来使用。

从数据框中选择一些列就像这一行一样简单:

citiesDF.select(“name”, “pop”)

使用SQL接口,我们将数据帧注册为临时表,然后可以对其进行SQL查询:

citiesDF.createOrReplaceTempView(“cities”)
spark.sql(“SELECT name, pop FROM cities”)

在后台,Apache Spark使用称为Catalyst的查询优化器检查数据和查询,以便为数据局部性和计算生成有效的查询计划,该计划将在整个集群中执行所需的计算。 在Apache Spark 2.x时代,数据帧和数据集的Spark SQL接口(本质上是一种类型化的数据帧,可以在编译时检查其正确性,并在运行时利用进一步的内存和计算优化优势)是开发的推荐方法。 RDD接口仍然可用,但只有在Spark SQL范式无法解决您的需求时才建议使用。

Spark 2.4引入了一组内置的高阶函数,用于直接操作数组和其他高阶数据类型。

火花MLlib

Apache Spark还捆绑了用于将机器学习和图形分析技术应用于大规模数据的库。 Spark MLlib包含一个用于创建机器学习管道的框架,从而允许在任何结构化数据集上轻松实现特征提取,选择和转换。 MLlib附带了集群和分类算法的分布式实现,例如k-means集群和随机森林,可以轻松地将其交换进出自定义管道。 数据科学家可以使用R或Python在Apache Spark中训练模型,使用MLlib保存模型,然后将其导入基于Java或基于Scala的管道以供生产使用。

请注意,尽管Spark MLlib涵盖了基本的机器学习,包括分类,回归,聚类和过滤,但它不包括用于建模和训练深度神经网络的工具(有关详细信息, 请参见InfoWorld的Spark MLlib评论 )。 但是, 深度学习管道正在开发中。

[ 也在InfoWorld上:2020年的人工智能预测 ]

星火GraphX

Spark GraphX附带了一些用于处理图形结构的分布式算法,包括Google的PageRank的实现 。 这些算法使用Spark Core的RDD方法对数据进行建模。 GraphFrames包使您可以对数据执行图形操作,包括利用Catalyst优化器进行图形查询。

火花流

Spark Streaming是Apache Spark的早期添加,可帮助其在需要实时或近实时处理的环境中获得发展。 以前,Apache Hadoop世界中的批处理和流处理是分开的。 您将为批处理需求编写MapReduce代码,并为实时流需求使用Apache Storm之类的东西。 尽管基于完全不同的框架,需要不同的资源以及涉及运行它们的不同操作问题,但这显然会导致不同的代码库需要在应用程序域中保持同步。

通过将流分解为一系列连续的微批处理,Spark Streaming将Apache Spark批处理的概念扩展为流处理,然后可以使用Apache Spark API对其进行操作。 这样,批处理和流操作中的代码可以共享(大部分)在同一框架上运行的同一代码,从而减少了开发人员和操作员的开销。 每个人都赢。

对Spark Streaming方法的批评是,在需要对传入数据进行低延迟响应的情况下,微批处理可能无法与其他具有流支持功能的框架(如Apache Storm, Apache FlinkApache Apex)的性能相匹配。所有这些都使用纯流方法而不是微批处理。

结构化流

结构化流 (Spark 2.x中已添加)用于Spark Streaming,将Spark SQL应用于Spark Core API:更高级别的API和用于编写应用程序的更容易抽象。 就结构流而言,高级API本质上允许开发人员创建无限的流数据帧和数据集。 它还解决了用户在较早的框架中遇到的一些非常现实的痛点,尤其是在处理事件时间聚合和消息的延迟传递方面。 对结构化流的所有查询都通过Catalyst查询优化器,甚至可以交互方式运行,从而允许用户对实时流数据执行SQL查询。

结构化流最初依赖于Spark Streaming的处理流数据的微批处理方案。 但是在Spark 2.3中,Apache Spark团队在结构化流中添加了低延迟连续处理模式 ,从而使其能够以低至1ms的延迟处理响应。 从Spark 2.4开始,连续处理仍被视为实验性的。 虽然结构化流基于Spark SQL引擎构建,但是连续流仅支持有限的查询集

结构化流是平台上流应用程序的未来,因此,如果要构建新的流应用程序,则应使用结构化流。 仍将继续支持旧的Spark Streaming API,但是该项目建议移植到结构化流传输,因为新方法使编写和维护流传输代码更加容易。

深度学习管道

Apache Spark通过“ 深度学习管道”支持深度学习。 使用MLlib的现有管道结构,您可以调用较低级的深度学习库,并仅用几行代码即可构造分类器,并将自定义TensorFlow图或Keras模型应用于传入数据。 这些图和模型甚至可以注册为自定义Spark SQL UDF(用户定义的函数),以便将深度学习模型作为SQL语句的一部分应用于数据。

Apache Spark教程

准备开始学习Apache Spark吗? 我们强烈推荐Evan Heitman撰写的《 Python上的Apache Spark的尼安德特人指南》 ,它不仅以相对简单的方式介绍了Apache Spark的工作原理,而且还指导您完成编写使用该框架的简单Python应用程序的过程。 。 本文是从数据科学家的角度撰写的,这很有道理,因为数据科学是一个大数据和机器学习日益重要的世界。

[ 通过InfoWorld的机器学习和分析报告时事通讯来掌握机器学习,人工智能和大数据分析的最新进展 ]

如果您正在寻找一些Apache Spark示例,以使您了解该平台可以做什么以及如何执行,请查看Spark By {Examples} 。 这里有许多用于组成Spark编程构建模块的基本任务的示例代码,因此您可以看到组成Apache Spark的较大任务的组件。

需要更深入吗? DZone称之为“完整的Apache Spark集合” ,其中包含许多关于许多Apache Spark主题的有用教程。 学习愉快!

翻译自: https://www.infoworld.com/article/3236869/what-is-apache-spark-the-big-data-platform-that-crushed-hadoop.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值