当前位置:网站首页 > R语言数据分析 > 正文

spark面试题以及答案(spark shuffle面试)



【版权声明】版权所有,请勿转载!
【相关文章推荐】《大数据软件安装和基础编程实践指南》,详细指导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 能正常运行,先执行如下命令检查整个应用程序的文件结构:

 
  

文件结构应如下图所示:
SimpleApp的文件结构

接着,我们就可以通过如下代码将整个应用程序打包成 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面试)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • ldrsw指令(lds什么指令)2025-09-07 23:36:05
  • vbf(vbfor循环语句详解)2025-09-07 23:36:05
  • tldraw下载(trid下载)2025-09-07 23:36:05
  • xavier是什么牌子鞋子(xvov是什么品牌鞋子)2025-09-07 23:36:05
  • 三星C7000和7010屏幕一样吗(三星c7000和c7pro一样吗)2025-09-07 23:36:05
  • libtorch 编译(libtorch编译)2025-09-07 23:36:05
  • redhat考证(redhat认证含金量)2025-09-07 23:36:05
  • score可数还是不可数(scores of加可数名词还是不可数)2025-09-07 23:36:05
  • aurocean什么档次(aurora什么档次)2025-09-07 23:36:05
  • ifstream读取文件(ifstream读取文件路径)2025-09-07 23:36:05
  • 全屏图片