使用IntelliJ Idea开发Spark应用程序

简介: 使用IntelliJ Idea开发Spark应用程序

未经许可,禁止以任何形式转载,若要引用,请标注链接地址

全文共计3704字,阅读大概需要3分钟

一、实验目的

掌握使用IntelliJ Idea开发Spark应用程序的过程。


二、实验内容

1、使用IntelliJ Idea开发本地Spark应用程序。

 2、部署分布式Spark应用程序。


三、实验原理

首先创建Spark应用程序,在本地运行并测试;然后修改Spark应用程序,访问分布式文件系统HDFS;最后将项目打为jar包,部署到Spark集群上执行。


四、实验环境

硬件:x86_64 ubuntu 16.04服务器

 软件:JDK1.8,Spark-2.3.2,Hadoop-2.7.3,IntelliJ Idea


五、实验步骤

5.1 启动IntelliJ Idea并创建spark项目

1、启动IntelliJ Idea。在终端窗口下,执行以下命令:

1.  $ cd /opt/idea-IC-191.7479.19/bin
2.  $ ./idea.sh

2、在Idea中创建scala项目,并命名为”helloscala”,其它都默认即可。


3、依次选择”File | Project structure…”菜单项,进入项目结构界面。如下图所示:


0a65b0d04dc04cf79d0355c9559a7571.png

4、Spark程序开发和运行,需要依赖Spark相关的jar包。按图中所示依次选择,手动导入spark的jar包到项目中。如下图所示:


0b454cceefc34f46ade233a6109b3dd6.png

5、要引入的jar包位于Spark安装目录的jars目录下(本实验中位于”/opt/spark/jars/“目录下)。之后一直点击【OK】按钮即可导包成功。如下图所示:


4b269264de43401da8c97711af3ff75e.png

6、查看成功导入的部分jar包。如下图所示:


ea77f1bedccb43f2a13caa4d9e0c2c8d.png

5.2 数据准备

我们将构建一个简单的程序,它根据莎士比亚的文集执行单词计数。因此,我们需要保存此shakespeare.txt数据集的两个副本。一个在项目中用于本地系统测试,另一个在HDFS (Hadoop分布式文件系统)中用于集群测试。

 1. 将shakespeare.txt拷贝到项目的resources目录下。打开一个终端窗口,执行如下命令:

1.  $ cp /data/dataset/shakespeare.txt ~/IdeaProjects/helloscala/src/

2. 将shakespeare.txt上传到HDFS目录下。执行如下的命令执行上传:

1.  $ start-dfs.sh
2.  $ hdfs dfs -mkdir -p /data/dataset/
3.  $ hdfs dfs -put /data/dataset/shakespeare.txt  /data/dataset/

5.3 编写spark代码

1、选中spark_project1项目的src目录上,单击右键,依次选择”New | Scala Class”,创建Scala类。如下图所示:

122dbd83a1f546dd8b7d0e3dd09ca31a.png


2、在弹出的对话框中,命名”HelloScala”,并选择”Object”类型。如下图所示:

3e37ac1c3d5b4361a48856e4e0f07565.png


3、打开”HelloScala.scala”源文件,编辑代码如下:

1.  import org.apache.spark.{SparkConf, SparkContext}
2.       
3.  object HelloScala {
4.       
5.    def main(args: Array[String]) {
6.       
7.      // 创建一个SparkContext来初始化Spark
8.      val conf = new SparkConf()
9.      conf.setMaster("local")
10.     conf.setAppName("Word Count")
11.     val sc = new SparkContext(conf)
12.      
13.     // 将文本加载到Spark RDD中,它是文本中每一行的分布式表示
14.     val textFile = sc.textFile("src/shakespeare.txt")
15.      
16.     // 执行单词计数
17.     val counts = textFile.flatMap(line => line.split(" "))
18.                       .map(word => (word, 1))
19.                       .reduceByKey(_ + _)
20.      
21.     counts.foreach(println)
22.     System.out.println("全部单词: " + counts.count());
23.   }
24. 
25. }

4、运行程序。右键单击文本编辑器并选择”Run ‘HelloScala’”来运行程序。这将运行Spark作业并打印莎士比亚作品中出现的每个单词的频率,预期输出如下:

8bd097535c3d46af94e6406e332cfb91.png


注意我们设置了这一行代码:

1.  conf.setMaster("local")

这告诉Spark使用这台计算机在本地运行,而不是在分布式模式下运行。要在多台机器上运行Spark,我们需要更改此值。


5.4 部署分布式Spark应用程序

在生产环境中,Spark通常会处理存储在HDFS等分布式文件系统中的数据。Spark通常也以集群模式运行。

 1. 修改源代码如下:

1.  import org.apache.spark.{SparkConf, SparkContext}
2.       
3.  object HelloScala {
4.    def main(args: Array[String]): Unit = {     
5.      // 创建一个SparkContext来初始化Spark
6.      val conf = new SparkConf().setAppName("Word Count")
7.      val sc = new SparkContext(conf)
8.       
9.      // 修改输入和输出文件路径为HDFS上的路径(请把其中的localhost换为当前的机器名)
10.     val input = "hdfs://localhost:9000/data/dataset/shakespeare.txt"
11.     val output = "hdfs://localhost:9000/data/dataset/shakespeareWordCount"
12.      
13.     // 将文本加载到Spark RDD中,它是文本中每一行的分布式表示
14.     val textFile = sc.textFile(input)
15.      
16.     // 进行单词计数
17.     val counts = textFile.flatMap(line => line.split(" "))
18.                          .map(word => (word, 1))
19.                          .reduceByKey(_ + _)
20.      
21.     counts.foreach(println)
22.     System.out.println("全部单词: " + counts.count())
23.      
24.     counts.saveAsTextFile(output)
25.   }
26. }

这告诉Spark读写HDFS,而不是本地。


5.5 打包程序

我们将把这些代码打包到一个已编译的jar文件中,该文件可以部署在Spark集群上。jar是一个压缩文件,它包含我们的代码和代码工作所需的所有依赖项。

 1、依次选择”File | Project Structure…”菜单项,进入项目结构界面。如下图所示:

9d4b63ac2d1c44a59d0f450ec7bbf83c.png


2、按图中选择依次点击进行打包,如图13所示

400c46eec9a44ba68090907db6ff06fc.png


3、在弹出的对话框,Main Class框中选择 HelloScala,其它保持默认即可,点击【OK】。如下图所示:

9d4d219d296b405f9eee28eb24bab2b3.png


4、返回到项目结构界面,把项目依赖的所有jar包都删除,只导出类文件,点击【OK】按钮。如下图所示:

c6615c09c6454097a855a8c0946cc2c5.png


5、点击”Build | Build Artifacts”菜单项进行编译。如下图所示:

f45e149222af4d498e0425617cf8b359.png


6、按图中所示选择即开始编译。如下图所示:

41eaf5f360e54b2a8a7a01ae3d83b2b0.png


5.6 集群运行jar包

1、启动Spark集群。在终端窗口下,执行以下命令:

1.  $ cd /opt/spark
2.  $ ./sbin/start-all.sh

2、提交作业执行。使用spark-submit运行我们的代码。我们需要指定主类、要运行的jar和运行模式(集群)。(注意:请将下面命令中的localhost替换为虚拟机当前的机器名)

1.  $ spark-submit --class HelloScala  --master spark://localhost:7077 /root/IdeaProjects/helloscala/out/artifacts/helloscala_jar/helloscala.jar

控制台应该打印莎士比亚作品中出现的每个单词的频率,如下所示:

(comutual,1)
(ban-dogs,1)
(rut-time,1)
(ORLANDO],4)
(Deceitful,1)
(commits,3)
(GENTLEWOMAN,4)
(honors,10)
(returnest,1)
(topp’d?,1)
(compass?,1)
(toothache?,1)
(miserably,1)
(hen?,1)
(luck?,2)
(call’d,162)
(lecherous,2)

此外,可通过HDFS或Web UI查看输出文件的内容:

1.  $ hdfs dfs -cat /data/dataset/shakespeareWordCount/part-00000

— END —


相关文章
|
9月前
|
人工智能 Java 测试技术
【556AI】(一)IntelliJ IDEA全流程AI设计开发平台
556AI支持IDEA、PHPSTORM、PYCHARM最新版 AI平台定位是开发大型软件项目,大型软件项目代码AI生成引擎,OA/ERP/MES 百万行代码一次性AI生成 支持axure原型导入预览,集成AI软件设计/AI软件开发/AI软件测试整个流程 支持 若依 JEECG SmartAdmin THINKPHP Django等多种JAVA/PHP/python框架 实现了java php python 的统一增强行调试方式 可以链接多个AI大模型,进行AI生成代码
1122 8
|
Java 应用服务中间件 Maven
在IntelliJ IDEA中如何配置使用Maven以创建Tomcat环境
所以,别担心这些工具看起来有些吓人,实际上这些都是为了帮助你更好的完成工作的工具,就像超市里的各种烹饪工具一样,尽管它们看起来可能很复杂,但只要你学会用,它们会为你烹饪出一道道美妙的食物。这就是学习新技能的乐趣,让我们一起享受这个过程,攀登知识的高峰!
852 27
|
IDE 程序员 开发工具
只用正版!教你5个方法,白嫖JetBrains家族的所有产品,包含:IntelliJ IDEA、PyCharm、WebStorm、CLion、Rider
程序员晚枫分享了5种官方认证的免费使用JetBrains家族产品的方法,包括内容创作者计划、开源项目支持、教育许可证、用户组支持和开发者认可计划。这些方法帮助个人开发者与小型团队合法获取强大开发工具,如IntelliJ IDEA、PyCharm等,降低开发成本,提升效率。同时提醒大家遵守使用规范,尊重知识产权。
2885 13
|
JavaScript 前端开发 Java
Idea启动SpringBoot程序报错:Veb server failed to start. Port 8082 was already in use;端口冲突的原理与解决方案
本文解决了Idea启动SpringBoot程序报错:Veb server failed to start. Port 8082 was already in use的问题,并通过介绍端口的使用原理和操作系统的端口管理机制,可以更有效地解决端口冲突问题,并确保Web服务器能够顺利启动和运行。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
IDE 开发工具
【开发IDE升级】如何对IDEA版本进行升级
本文介绍了如何将 IntelliJ IDEA Ultimate 从 2020.2.2 版本升级到 2022.3.2 版本。主要内容包括准备工作、卸载旧版本和安装新版本的步骤。首先,从官网下载所需版本并备份旧版配置;接着,通过 Uninstall.exe 卸载旧版,保留配置和插件;最后,安装新版并完成激活。详细的操作步骤和截图帮助用户顺利完成升级过程。
18678 1
【开发IDE升级】如何对IDEA版本进行升级
|
开发工具 开发者 git
IntelliJ IDEA 插件推荐:提升开发效率的神器
本文介绍了 IntelliJ IDEA 的多个实用插件,涵盖从提高开发效率到美化界面的各个方面。
1900 1
|
前端开发 Java 开发者
这款免费 IDEA 插件让你开发 Spring 程序更简单
Feign-Helper 是一款支持 Spring 框架的 IDEA 免费插件,提供 URL 快速搜索、Spring Web Controller 路径一键复制及 Feign 与 Controller 接口互相导航等功能,极大提升了开发效率。
3709 1
|
人工智能 Java 数据库连接
IDEA开发 常用代码规范插件 常用辅助类插件
IDEA开发 常用代码规范插件 常用辅助类插件
2154 1
|
Java Android开发 Spring
idea开发常用快捷键总结
idea开发常用快捷键总结
757 9
|
缓存 Java Maven
IntelliJ IDEA中无法加载jar包导致出现“cannot resolve symbol...”问题的解决
IntelliJ IDEA中无法加载jar包导致出现“cannot resolve symbol...”问题的解决
1015 0