这里主要介绍用Eclipse IDEA计算Pi值的具体操作过程
前提环境条件
- 安装Eclipse Scala IDEA
- 下载并配置JAVA 1.8
创建项目
创建Maven项目
用Eclipse创建Maven项目
选择默认地址
选择快速开始项
Group id: org.test
Artifact id: SparkCalPi
修改pom.xml
双击pom.xml, 点击dependencies,点击添加按钮,添加dependency。
Group ID: org.apache.spark
Artifact ID: spark-core_2.11
Version: 2.1.0
添加scala特性
解决java报错
错误为:
Description Resource Path Location Type
Archive for required library: ‘/Users/liuqi/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.6.5/jackson-databind-2.6.5.jar’ in project ‘SparkCalPi’ cannot be read or is not a valid ZIP file SparkCalPi Build path Build Path Problem
到对应文件夹下,删除黄色框部分:
发现都不成功,最后发现是版本不对应,修改pom.xml
<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>1.2.0</version>
</dependency>
</dependencies>
更改后成功
修改scala配置
点击项目(右键)->属性,删除Scala Library container[2.11.8]
删除Scala-Library-Container
可选:改变scala编译器环境,点击属性->项目配置->修复scala安装(Fix scala installation 2.10.4)
将java包都改为scala
更改 src/main/java 到 src/main/scala
更改 src/test/java 到 src/test/scala
点击包(右键)->重命名,将java改为scala
创建scala程序
创建scala对象
创建新的包org.test.spark
点击包src/main/scala(右键)->新建->包 org.test.spark
创建新的scala对象 SparkPi
点击包org.test.spark(右键)->新建->scala对象,命名为 SparkPi
计算Pi的源程序
源代码
package org.test.spark
import scala.math.random
import org.apache.spark._
object SparkPi {
def main(args: Array[String]) {
val conf = new SparkConf().setAppName("Spark Pi") .setMaster("local")
val spark = new SparkContext(conf)
val slices = if (args.length > 0) args(0).toInt else 2
val n = math.min(100000L * slices, Int.MaxValue).toInt
// avoid overflow
val count = spark.parallelize(1 until n, slices).map { i =>
val x = random * 2 - 1
val y = random * 2 - 1
if (x*x + y*y < 1) 1 else 0
}.reduce(_ + _)
println("Pi is roughly " + 4.0 * count / n)
spark.stop()
}
}
运行scala对象
运行scala对象
点击scala对象(右键)->运行->Java应用程序
查看最后结果,报错 ERROR ActorSystemImpl: Uncaught fatal error from thread [sparkDriver-akka.remote.default-remote-dispatcher-8] shutting down ActorSystem [sparkDriver]
由于集群较小,只有4台机器,在其中master上面提交了任务,结果出现上述异常。即driver 内存不足,因此使用Spark-sumbit脚本时,提供–executor-memory –driver-memory选项,来相应的设置内存。
(暂时还没有解决,暂缓)
理论结果如下: