使用Intellij IDEA开发并提交Spark应用到远程Spark集群

使用Intellij IDEA开发Spark应用,并提交到远程Spark集群执行

通常我们写了一个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集群已正确配置并启动。


  1. 下载并安装Intellij IDEA和Scala 2.10.4(下载windows版本直接安装即可)。
  2. 打开Intellij IDEA,选择configure->plugins,搜索Scala,点击”install plugin”,开始下载并安装Scala插件。也可以根据Scala版本和Intellij版本手动下载相应的插件,选择“install plugin from disk”进行安装。
  3. 安装完Scala插件后就可以新建Scala项目了。新建项目选择non-sbt,填写项目名和位置等。
  4. 新建一个Scala对象,代码如下一节“代码实例所示”。
  5. 打开“file->project structure->libraries”,点击“+”,选择Scala sdk,添加已经安装的Scala环境。(截图为另一个项目,配置过程是一样的,仅为在此做说明)


    添加Scala SDK


    点击“+”选择“java”,选择spark依赖包。


    添加spark依赖


    选择“Artifacts”,点击“+”,选择“jar->from modules with dependencies”添加程序jar包


    添加程序jar包

代码实例

基于spark自带example中的SparkPI稍作修改:

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()
  }

其中,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环境依赖。

解决方法:

  1. 下载hadoop-2.5.1-x64.tar.gz并解压到 D:\Program Files,新建环境变量HADOOP_HOME=D:\Program Files\hadoop-2.5.1;配置path,添加 ;%HADOOP_HOME%\bin;
  2. 下载64位winutils.exe:Http://pan.baidu.com/s/1bnsCEib
    之后只需将里面的winutils.exe方到HADOOP_HOME/bin下即可。
  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值