【版权声明】版权所有,请勿转载!
【相关文章推荐】《大数据软件安装和基础编程实践指南》,详细指导VMWare、Ubuntu、Hadoop、HDFS、HBase、Hive、MapReduce、Spark、Flink的安装和基础编程
作者:厦门大学计算机系林子雨副教授
E-mail:
本博客内容与林子雨编著《大数据技术原理与应用(第4版)》(访问教材官网)教材配套。
Apache Spark 是一个新兴的大数据处理通用引擎,提供了分布式的内存抽象。Spark 最大的特点就是快,可比 Hadoop MapReduce 的处理速度快 100 倍。本指南将介绍 Spark 的安装与基本使用。
首先需要下载Spark安装文件。访问Spark官方下载地址,
下载spark-3.4.0-bin-without-hadoop.tgz文件。也可以直接点击这里从百度云盘下载软件(提取码:ziyu)。进入百度网盘后,进入“软件”目录,找到spark-3.4.0-bin-without-hadoop.tgz文件,下载到本地。
本教程的具体运行环境如下:
- Hadoop 3.3.5
- Java JDK 1.8
- Spark 3.4.0
需要注意的是,本教程内容中Spark采用Local模式进行安装,也就是在单机上运行Spark,因此,在安装Hadoop时,需要按照伪分布式模式进行安装。在单台机器上按照“Hadoop(伪分布式)+Spark(Local模式)”这种方式进行Hadoop和Spark组合环境的搭建,可以较好满足入门级Spark学习的需求
安装Hadoop3.3.5的过程就已经要求安装JAVA JDK1.8了。如果没有,请参考Hadoop3.3.5安装教程_单机/伪分布式配置_Hadoop3.3.5/Ubuntu22.04(20.04/18.04/16.04)进行安装配置。
安装后,还需要修改Spark的配置文件spark-env.sh
编辑spark-env.sh文件(vim https://dblab.xmu.edu.cn/blog/4322/conf/spark-env.sh),在第一行添加以下配置信息:
执行时会输出非常多的运行信息,输出结果不容易找到,可以通过 grep 命令进行过滤(命令中的 2>&1 可以将所有的信息都输出到 stdout 中,否则由于输出日志的性质,还是会输出到屏幕中):
这里涉及到Linux Shell中管道的知识,详情可以参考Linux Shell中的管道命令
过滤后的运行结果如下图示,可以得到π 的 5 位小数近似值:
启动spark-shell后,会自动创建名为sc的SparkContext对象和名为spark的SparkSession对象,如图:
spark创建sc,可以加载本地文件和HDFS文件创建RDD。这里用Spark自带的本地文件README.md文件测试。
加载HDFS文件和本地文件都是使用textFile,区别是添加前缀(hdfs://和file:///)进行标识。
可以通过组合RDD操作进行组合,可以实现简易MapReduce操作
更多RDD的操作,请访问Spark官方文档RDD操作
输入exit,即可退出spark shell
接着我们通过一个简单的应用程序 SimpleApp 来演示如何通过 Spark API 编写一个独立应用程序。使用 Scala 编写的程序需要使用 sbt (或者Maven)进行编译打包,相应地,Java 程序使用 Maven 编译打包,而 Python 程序通过 spark-submit 直接提交。
1. 安装sbt
使用Scala语言编写的Spark程序,需要使用sbt进行编译打包。Spark中没有自带sbt,需要单独安装。可以到“http://www.scala-sbt.org”下载sbt安装文件sbt-1.9.0.tgz。
接着在安装目录中使用下面命令创建一个Shell脚本文件,用于启动sbt:
该脚本文件中的代码如下:
保存后,还需要为该Shell脚本文件增加可执行权限:
然后,可以使用如下命令查看sbt版本信息:
如果能够返回上述信息,就说明安装成功了。但是,这个过程会很漫长,甚至很坎坷,会花很长时间。
但是,只要安装成功,第2次开始运行“https://dblab.xmu.edu.cn/blog/4322/sbt sbtVersion”和编译打包命令,速度就比较快了。
之所以第一次运行sbt编译打包命令速度很慢,是因为这个过程需要到国外网站下载很多的依赖包,而国外网站下载速度很慢,所以,需要耗费很长时间。为了加快速度,可以尝试更改为国内的仓库地址,具体方法可以参考博客:安装最新版sbt工具方法和体会。
2. Scala应用程序代码
在终端中执行如下命令创建一个文件夹 sparkapp 作为应用程序根目录:
在 https://dblab.xmu.edu.cn/blog/4322/sparkapp/src/main/scala 下建立一个名为 SimpleApp.scala 的文件(),添加代码如下:
该程序计算 /usr/local/spark/README 文件中包含 "a" 的行数 和包含 "b" 的行数。代码第8行的 /usr/local/spark 为 Spark 的安装目录,如果不是该目录请自行修改。不同于 Spark shell,独立应用程序需要通过 初始化 SparkContext,SparkContext 的参数 SparkConf 包含了应用程序的信息。
该程序依赖 Spark API,因此我们需要通过 sbt 进行编译打包。 在~/sparkapp这个目录中新建文件simple.sbt,命令如下:
在simple.sbt中添加如下内容,声明该独立应用程序的信息以及与 Spark 的依赖关系:
文件 simple.sbt 需要指明 Spark 和 Scala 的版本。在上面的配置信息中,scalaVersion用来指定scala的版本,sparkcore用来指定spark的版本,这两个版本信息都可以在之前的启动 Spark shell 的过程中,从屏幕的显示信息中找到。下面就是笔者在启动过程当中,看到的相关版本信息(备注:屏幕显示信息会很长,需要往回滚动屏幕仔细寻找信息)。
3. 使用 sbt 打包 Scala 程序
为保证 sbt 能正常运行,先执行如下命令检查整个应用程序的文件结构:
文件结构应如下图所示:
接着,我们就可以通过如下代码将整个应用程序打包成 JAR(首次运行同样需要下载依赖包 ):
打包成功的话,会输出如下图内容:
生成的 jar 包的位置为 ~/sparkapp/target/scala-2.12/simple-project_2.12-1.0.jar。
4. 通过 spark-submit 运行程序
最后,我们就可以将生成的 jar 包通过 spark-submit 提交到 Spark 中运行了,命令如下:
最终得到的结果如下:
自此,就完成了你的第一个 Spark 应用程序了。
1. 安装Maven
2. Java应用程序代码
在终端执行如下命令创建一个文件夹sparkapp2作为应用程序根目录
在 https://dblab.xmu.edu.cn/blog/4322/sparkapp2/src/main/java 下建立一个名为 SimpleApp.java 的文件(vim https://dblab.xmu.edu.cn/blog/4322/sparkapp2/src/main/java/SimpleApp.java),添加代码如下:
该程序依赖Spark Java API,因此我们需要通过Maven进行编译打包。在https://dblab.xmu.edu.cn/blog/4322/sparkapp2目录中新建文件pom.xml,命令如下:
在pom.xml文件中添加内容如下,声明该独立应用程序的信息以及与Spark的依赖关系:
3. 使用Maven打Java程序
为了保证maven能够正常运行,先执行如下命令检查整个应用程序的文件结构:
文件结构如下图:
接着,我们可以通过如下代码将这整个应用程序打包成Jar(注意:电脑需要保持连接网络的状态,而且首次运行同样下载依赖包,同样消耗几分钟的时间):
如出现下信息,说明生成Jar包成功:
如果运行Maven编译打包过程很慢,是因为需要到国外网站下载很多的依赖包,国外网站速度很慢,因此,要花费很长时间。为了加快速度,可以更改为国内的仓库地址,具体可以参考博客:将Maven源改为国内阿里云仓库。
4. 通过spark-submit 运行程序
最后,可以通过将生成的jar包通过spark-submit提交到Spark中运行,如下命令:
最后得到的结果如下:
1. 安装Maven
(备注:如果已经安装Maven,就不用重复安装了)
Ubuntu中没有自带安装maven,需要手动安装maven。可以访问maven官方下载自己下载。这里直接给出apache-maven-3.9.2-bin.zip的下载地址,直接点击下载即可。或者也可以点击这里从百度网盘下载文件(提取码是ziyu,进入百度网盘后,在“软件”目录下找到Maven安装文件)。
这里选择安装在/usr/local/maven目录中:
2. Scala应用程序代码
在终端中执行如下命令创建一个文件夹 sparkapp3作为应用程序根目录:
在 https://dblab.xmu.edu.cn/blog/4322/sparkapp3/src/main/scala 下建立一个名为 SimpleApp.scala 的文件(),添加代码如下:
该程序计算 /usr/local/spark/README 文件中包含 "a" 的行数 和包含 "b" 的行数。代码第8行的 /usr/local/spark 为 Spark 的安装目录,如果不是该目录请自行修改。不同于 Spark shell,独立应用程序需要通过 初始化 SparkContext,SparkContext 的参数 SparkConf 包含了应用程序的信息。
3.使用Maven进行编译打包
该程序依赖Spark Java API,因此我们需要通过Maven进行编译打包。在https://dblab.xmu.edu.cn/blog/4322/sparkapp3目录中新建文件pom.xml,命令如下:
然后,在pom.xml文件中添加如下内容,用来声明该独立应用程序的信息以及与Spark的依赖关系:
为了保证Maven能够正常运行,先执行如下命令检查整个应用程序的文件结构:
文件结构应该是类似如下的内容:
接下来,我们可以通过如下代码将整个应用程序打包成JAR包(注意:计算机需要保持连接网络的状态,而且首次运行打包命令时,Maven会自动下载依赖包,需要消耗几分钟的时间):
如果屏幕返回如下信息,则说明生成JAR包成功:
4.通过 spark-submit 运行程序
最后,我们就可以将生成的 jar 包通过 spark-submit 提交到 Spark 中运行了,命令如下:
最终得到的结果如下:
到此,就顺利完成 Spark 应用程序的Maven编译打包运行了。
到此这篇spark面试题以及答案(spark shuffle面试)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/rfx/74022.html