本帖最后由 desehawk 于 2016-11-18 12:12 编辑
问题导读
1.本文的环境包含哪些软件?
2.如何安装开发环境?
3.提交源码过程中遇到了哪些问题?
通常我们写了一个spark程序,总是需要将程序打成jar包然后提交到集群执行,这样很麻烦,因此本文想说明通过像在eclipse中远程开发和执行Hadoop Job一样,使用Intellij IDEA开发Spark应用,并能够直接在IDE中提交作业到远程集群去执行,在console中看到输出结果或者各种错误原因。
环境与工具
-操作系统:本地:windows 7 远程服务器:ubuntu
- IDE IntelliJ IDEA
- 插件 scala-intellij-bin-1.2.1.zip
- SDK jdk 1.6.0.37 scala-2.10.4.tgz
- Spark spark-1.3.1-bin-hadoop2.4.tgz
安装与配置
前提:服务器端spark standalone集群已正确配置并启动。
下载并安装Intellij IDEA和Scala 2.10.4(下载windows版本直接安装即可)。
打开Intellij IDEA,选择configure->plugins,搜索Scala,点击”install plugin”,开始下载并安装Scala插件。也可以根据Scala版本和Intellij版本手动下载相应的插件,选择“install plugin from disk”进行安装。
安装完Scala插件后就可以新建Scala项目了。新建项目选择non-sbt,填写项目名和位置等。
新建一个Scala对象,代码如下一节“代码实例所示”。
打开“file->project structure->libraries”,点击“+”,选择Scala sdk,添加已经安装的Scala环境。(截图为另一个项目,配置过程是一样的,仅为在此做说明)
点击“+”选择“java”,选择spark依赖包。
选择“Artifacts”,点击“+”,选择“jar->from modules with dependencies”添加程序jar包
代码实例
[mw_shl_code=scala,true]package test
/**
* Created by zwx on 5/1/15.
*/
import scala.math.random
import org.apache.spark._
/** Computes an approximation to pi */
object SparkPi {
def main(args: Array[String]) {
val conf = new SparkConf().setAppName("Spark Pi")
.setMaster("spark://10.0.5.217:7077")
.setJars(List("/home/zwx/IdeaProjects/FisrtScala/out/artifacts/FisrtScala_jar/FisrtScala.jar"))
val spark = new SparkContext(conf)
val slices = if (args.length > 0) args(0).toInt else 2
val n = 100000 * slices
val count = spark.parallelize(1 to 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()
}[/mw_shl_code]
其中,setMaster用来指定spark集群master的位置;setJars用来指定程序jar包的位置,此位置在添加程序jar包可以看到。
执行结果
右键SparkPI,选择run开始执行。
遇见问题
前几次执行过程中遇到了以下问题:
问题1:
ERROR client.Client$ClientActor: All master are unreponsive! Giving up.
解决方法:编辑 SPARK_HOME/conf/spark-env.sh,添加
export SPARK_MASTER_IP=Master节点的ip
问题2:
Exception in thread “main” java.lang.NoSuchMethodError: scala.collection.immutable.HashSet$.empty()Lscala/collection/immutable/HashSet;
解决方法:此错误是在Scala 2.11环境下出现的,将Scala版本换成2.10.4此问题解决
问题3:
Could not locate executable null\bin\winutils.exe in the Hadoop binaries.
根据错误提示,spark是需要知道winutils.exe的全路径, 因此需要安装winutils.exe并配置环境变量以使spark知道其位置. winutils.exe 是Hadoop windows 下的一个binary文件,因此虽然不需要完整安装Hadoop,但是需要在本地配置Hadoop环境依赖。
解决方法:
下载hadoop-2.5.1-x64.tar.gz并解压到 D:\Program Files,新建环境变量HADOOP_HOME=D:\Program Files\hadoop-2.5.1;配置path,添加 ;%HADOOP_HOME%\bin;
下载64位winutils.exe: 链接: https://pan.baidu.com/s/1boLixSN 密码: dpcv
之后只需将里面的winutils.exe方到HADOOP_HOME/bin下即可。
来自:IT大道
作者:itdadao
|