建站教程

建站教程

Products

当前位置:首页 > 建站教程 >

ApacheSpark简单入门教程

GG网络技术分享 2025-03-18 16:09 0


Apache Spark-简介

行业正在广泛使用Hadoop分析其数据集。原因是Hadoop框架基于简单的编程模型(MapReduce),它使计算解决方案具有可扩展性,灵活性,容错性和成本效益。在这里,主要的关注点是在查询之间的等待时间和运行程序的等待时间方面,保持处理大型数据集的速度。

Apache软件基金会(Apache Software Foundation)引入Spark是为了加快Hadoop计算计算软件流程。

与通常的看法相反,Spark不是Hadoop的修改版,并且实际上不依赖Hadoop,因为它具有自己的集群管理。Hadoop只是实施Spark的方法之一。

Spark通过两种方式使用Hadoop:一种是存储,另一种是处理。由于Spark具有自己的集群管理计算,因此仅将Hadoop用于存储目的。

Apache Spark

Apache Spark是一种快如闪电的集群计算技术,专为快速计算而设计。它基于Hadoop MapReduce,并且扩展了MapReduce模型以有效地将其用于更多类型的计算,包括交互式查询和流处理。Spark的主要功能是其内存中的群集计算,可提高应用程序的处理速度。

Spark旨在涵盖各种工作负载,例如批处理应用程序,迭代算法,交互式查询和流。除了在各自的系统中支持所有这些工作负载之外,它还减轻了维护单独工具的管理负担。

Apache Spark的演变

Spark是Hadoop的子项目之一,该子项目由Matei Zaharia在2009年在UC Berkeley的AMPLab中开发。它在BSD许可下于2010年开源。它在2013年捐赠给Apache软件基金会,现在Apache Spark从2014年2月开始成为Apache的顶级项目。

Apache Spark的功能

Apache Spark具有以下功能。

速度-Spark有助于在Hadoop集群中运行应用程序,内存速度最高可提高100倍,而在磁盘上运行时则可提高10倍。这可以通过减少对磁盘的读/写操作次数来实现。它将中间处理数据存储在内存中。

支持多种语言-Spark提供Java,Scala或Python内置的API。因此,您可以使用不同的语言编写应用程序。Spark提供了80个高级操作员用于交互式查询。

高级分析-Spark不仅支持"地图"和"减少"。它还支持SQL查询,流数据,机器学习(ML)和图算法。

基于Hadoop构建的Spark

下图显示了如何使用Hadoop组件构建Spark的三种方式。

Spark部署有以下三种方式。

独立-Spark独立部署意味着Spark占据了HDFS(Hadoop分布式文件系统)之上的位置,并且为HDFS明确分配了空间。在这里,Spark和MapReduce将并排运行以覆盖集群上的所有Spark作业。

Hadoop Yarn-Hadoop Yarn部署意味着,Spark可以在Yarn上运行,而无需任何预安装或root访问。它有助于将Spark集成到Hadoop生态系统或Hadoop堆栈中。它允许其他组件在堆栈顶部运行。

MapReduce中的Spark(SIMR)-除了独立部署外,MapReduce中的Spark还用于启动Spark作业。使用SIMR,用户可以启动Spark并使用其shell,而无需任何管理访问权限。

Spark的组成

下图描述了Spark的不同组件。

Apache Spark核心

Spark Core是所有其他功能都基于的Spark平台的基础通用执行引擎。它提供了外部存储系统中的内存中计算和引用数据集。

Spark SQL

Spark SQL是Spark Core之上的组件,它引入了一个称为SchemaRDD的新数据抽象,它为结构化和半结构化数据提供支持。

火花流

Spark Streaming利用Spark Core的快速调度功能来执行流分析。它以小批量提取数据,并对那些小批量数据执行RDD(弹性分布式数据集)转换。

MLlib(机器学习库)

MLlib是基于Spark的分布式机器学习框架,因为它基于分布式内存的Spark体系结构。根据基准,它是MLlib开发人员针对交替最小二乘(ALS)实现而完成的。Spark MLlib的速度是Apache Mahout的基于Hadoop磁盘的版本的9倍(在Mahout获得Spark接口之前)。

GraphX

GraphX是基于Spark的分布式图形处理框架。它提供了一个用于表达图形计算的API,该API可以使用Pregel抽象API对用户定义的图形进行建模。它还为此抽象提供了优化的运行时。

Apache Spark-RDD

弹性分布式数据集

弹性分布式数据集(RDD)是Spark的基本数据结构。它是对象的不可变分布式集合。RDD中的每个数据集都分为逻辑分区,可以在群集的不同节点上进行计算。RDD可以包含任何类型的Python,Java或Scala对象,包括用户定义的类。

正式而言,RDD是记录的只读分区集合。可以通过对稳定存储上的数据或其他RDD进行确定性操作来创建RDD。RDD是可以并行操作的元素的容错集合。

有两种创建RDD的方法-并行化驱动程序中的现有集合,或引用外部存储系统中的数据集,例如共享文件系统,HDFS,HBase或提供Hadoop输入格式的任何数据源。

Spark利用RDD的概念来实现更快,更有效的MapReduce操作。让我们首先讨论MapReduce操作是如何发生的以及为什么它们效率不高。

MapReduce中的数据共享速度很慢

MapReduce被广泛采用,用于在集群上使用并行分布式算法处理和生成大型数据集。它允许用户使用一组高级运算符编写并行计算,而不必担心工作分配和容错性。

不幸的是,在大多数当前框架中,在计算之间(两个MapReduce作业之间的Ex-)重用数据的唯一方法是将其写入外部稳定的存储系统(Ex-HDFS)。尽管此框架提供了许多用于访问群集的计算资源的抽象,但用户仍然需要更多。

这两个迭代互动应用需要更快速地并行作业的数据共享。由于复制,序列化磁盘IO,MapReduce中的数据共享速度很慢。对于存储系统,大多数Hadoop应用程序花费90%以上的时间进行HDFS读写操作。

MapReduce上的迭代操作

在多阶段应用程序中跨多个计算重用中间结果。下图说明了在MapReduce上进行迭代操作时当前框架的工作方式。由于数据复制,磁盘I / O和序列化,这会导致大量开销,从而使系统变慢。

MapReduce上的交互式操作

用户对同一数据子集运行临时查询。每个查询都将在稳定存储上执行磁盘I / O,这可能会影响应用程序的执行时间。

下图说明了在MapReduce上进行交互式查询时当前框架的工作方式。

使用Spark RDD进行数据共享

由于复制,序列化磁盘IO,MapReduce中的数据共享速度很慢。在大多数Hadoop应用程序中,它们花费90%以上的时间进行HDFS读写操作。

认识到此问题后,研究人员开发了一种称为Apache Spark的专门框架。火花的关键思想是- [Resilientdistributeddatasets(RDD); 它支持内存中的处理计算。这意味着,它将内存状态存储为跨作业的对象,并且该对象可在这些作业之间共享。内存中的数据共享比网络和磁盘快10到100倍。

现在让我们尝试找出在Spark RDD中如何进行迭代和交互操作。

Spark RDD上的迭代操作

下图显示了Spark RDD上的迭代操作。它将中间结果存储在分布式内存中,而不是稳定存储(磁盘)中,并使系统运行更快。

–如果分布式内存(RAM)足以存储中间结果(JOB的状态),则它将这些结果存储在磁盘上。

Spark RDD上的交互式操作

此图显示了在Spark RDD上的交互操作。如果对同一组数据重复执行不同的查询,则可以将这些特定数据保留在内存中以缩短执行时间。

默认情况下,每次在其上执行操作时,都可能会重新计算每个转换后的RDD。但是,您也可以将RDD保留在内存中,在这种情况下,Spark将在下次查询时将元素保留在群集中,以加快访问速度。还支持将RDD持久存储在磁盘上,或在多个节点之间复制。

Apache Spark-安装

Spark是Hadoop的子项目。因此,最好将Spark安装到基于Linux的系统中。以下步骤显示了如何安装Apache Spark。

步骤1:验证Java安装

Java安装是安装Spark的必要步骤之一。尝试使用以下命令来验证JAVA版本。

$java -version

如果您的系统上已经安装了Java,则会看到以下响应-

java version "1.7.0_71"

Java(TM) SE Runtime Environment (build 1.7.0_71-b13)

Java HotSpot(TM) Client VM (build 25.0-b02, mixed mode)

如果您的系统上未安装Java,请在继续下一步之前先安装Java。

步骤2:验证Scala安装

您应该使用Scala语言来实现Spark。因此,让我们使用以下命令来验证Scala的安装。

$scala -version

如果您的系统上已经安装了Scala,则会看到以下响应-

Scala code runner version 2.11.6 -- Copyright 2002-2013, LAMP/EPFL

如果您的系统上未安装Scala,请继续执行下一步以进行Scala安装。

第三步:下载Scala

通过访问以下链接下载最新版本的。对于本教程,我们使用的是scala-2.11.6版本。下载后,您将在下载文件夹中找到Scala tar文件。

步骤4:安装Scala

请按照以下给定的步骤安装Scala。

提取Scala tar文件

键入以下命令以提取Scala tar文件。

$ tar xvf scala-2.11.6.tgz

移动Scala软件文件

使用以下命令将Scala软件文件移动到相应目录(/ usr / local / scala)

$ su –

Password:

cd /home/Hadoop/Downloads/

mv scala-2.11.6 /usr/local/scala

exit

设置Scala的PATH

使用以下命令为Scala设置PATH。

$ export PATH = $PATH:/usr/local/scala/bin

验证Scala安装

安装后,最好进行验证。使用以下命令来验证Scala安装。

$scala -version

如果您的系统上已经安装了Scala,则会看到以下响应-

Scala code runner version 2.11.6 -- Copyright 2002-2013, LAMP/EPFL

步骤5:下载Apache Spark

通过访问以下链接下载最新版本的。在本教程中,我们使用spark-1.3.1-bin-hadoop2.6版本。下载后,您将在下载文件夹中找到Spark tar文件。

步骤6:安装Spark

请按照以下给出的步骤安装Spark。

提取火花焦

以下命令用于提取spark tar文件。

$ tar xvf spark-1.3.1-bin-hadoop2.6.tgz

移动Spark软件文件

以下命令用于将Spark软件文件移动到相应目录(/ usr / local / spark)

$ su –

Password:

cd /home/Hadoop/Downloads/

mv spark-1.3.1-bin-hadoop2.6 /usr/local/spark

exit

设置Spark环境

将以下行添加到〜/.bashrc文件。这意味着将火花软件文件所在的位置添加到PATH变量中。

export PATH=$PATH:/usr/local/spark/bin

使用以下命令来获取〜/ .bashrc文件。

$ source ~/.bashrc

步骤7:验证Spark安装

编写以下命令以打开Spark Shell。

$spark-shell

如果spark安装成功,那么您将找到以下输出。

Spark assembly has been built with Hive, including Datanucleus jars on classpath

Using Sparks default log4j profile: org/apache/spark/log4j-defaults.properties

15/06/04 15:25:22 INFO SecurityManager: Changing view acls to: hadoop

15/06/04 15:25:22 INFO SecurityManager: Changing modify acls to: hadoop

15/06/04 15:25:22 INFO SecurityManager: SecurityManager: authentication disabled;

ui acls disabled; users with view permissions: Set(hadoop); users with modify permissions: Set(hadoop)

15/06/04 15:25:22 INFO HttpServer: Starting HTTP Server

15/06/04 15:25:23 INFO Utils: Successfully started service HTTP class server on port 43292.

Welcome to

____ __

/ __/__ ___ _____/ /__

_\ \/ _ \/ _ `/ __/ _/

/___/ .__/\_,_/_/ /_/\_\ version 1.4.0

/_/

Using Scala version 2.10.4 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_71)

Type in expressions to have them evaluated.

Spark context available as sc

scala

标签:

提交需求或反馈

Demand feedback