使用IntelliJ IDEA编写SparkPi直接在Spark中运行

时间:2021-05-14 15:58:53

使用IntelliJ IDEA编写Scala在Spark中运行

环境说明:hadoop-2.2.0+spark-1.1.0
hadoop是完全分布式,spark是standalone。在master节点master1上安装了IntelliJ IDEA。

1、开启spark

进入到spark的sbin目录,./start-all.sh命令开启spark。
注意:因为演示的是SparkPi demo,无需从hdfs读取数据,所以没有启动hadoop。可以根据需要启动hadoop。

2、在IntelliJ IDEA中新建SparkTest工程

将spark提供的SparkPi.scala文件中的内容拷贝到工程中(package语句除外)如下图所示。
使用IntelliJ IDEA编写SparkPi直接在Spark中运行

2.1、在工程中引入spark-assembly-1.1.0-hadoop2.2.0.jar

“File”->”Project Structure”->”Libraries”->绿色加号->”java”,在弹出页面中到spark/lib目录下找到spark-assembly-1.1.0-hadoop2.2.0.jar,”OK”。如下图所示
使用IntelliJ IDEA编写SparkPi直接在Spark中运行
使用IntelliJ IDEA编写SparkPi直接在Spark中运行
使用IntelliJ IDEA编写SparkPi直接在Spark中运行

3、修改代码

如下图所示
使用IntelliJ IDEA编写SparkPi直接在Spark中运行
conf.setMaster()是告诉程序我们的spark集群的master节点。
spark.addJar()是指出本程序打成jar后所在的位置。spark在执行任务时会去这个位置取这个jar包。
注意:这两处的内容需要根据实际情况修改。

4、打jar包

“File”->”Project Structure”->”Artifacts”->绿色加号->”JAR”->”From modules with dependencies”
使用IntelliJ IDEA编写SparkPi直接在Spark中运行
使用IntelliJ IDEA编写SparkPi直接在Spark中运行
在Main_Class这里选择SpartTest工程的main函数。然后“OK”,出现如下页面
使用IntelliJ IDEA编写SparkPi直接在Spark中运行
页面中Output directory就是SparkTest工程打成jar包之后的存放目录
所以第3步中spark.addJar()方法的参数就是 Output directory+工程名.jar。点击”OK”后回到工程页面。
“Build”->”Build Artifacts”->”SparkTest:jar”->”Rebuild”
使用IntelliJ IDEA编写SparkPi直接在Spark中运行
使用IntelliJ IDEA编写SparkPi直接在Spark中运行
下面就等待jar包导出。

5、运行SparkTest

5.1、配置运行参数

在IDEA菜单中选择“Run”→“Edit Configurations”出现如下界面:
点左上角的“+”,选择“Application”,在右边的拓展中改一下name,选择Main函数:
使用IntelliJ IDEA编写SparkPi直接在Spark中运行

解释一下 Program arguments参数:我们在main函数里面用args(0)表示接收到的第一个参数,这里的10就会被args(0)接收到,参与计算。如果不加这个参数,程序将会报错。

5.2、运行程序

然后点击右上角的绿色运行箭头即可:
使用IntelliJ IDEA编写SparkPi直接在Spark中运行
运行时间比较长,耐心等待一下。
pi的结果是可计算出来的,但是最后还是报了几个exception。我把console信息全部提出来,大家一起研究。
使用IntelliJ IDEA编写SparkPi直接在Spark中运行
使用IntelliJ IDEA编写SparkPi直接在Spark中运行
使用IntelliJ IDEA编写SparkPi直接在Spark中运行
使用IntelliJ IDEA编写SparkPi直接在Spark中运行
使用IntelliJ IDEA编写SparkPi直接在Spark中运行