分享

用IDEA开发spark,源码提交任务到YARN

本帖最后由 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环境。(截图为另一个项目,配置过程是一样的,仅为在此做说明)


1.png

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


2.png


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


3.png


代码实例



[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开始执行。


4.png


遇见问题


前几次执行过程中遇到了以下问题:
问题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



已有(5)人评论

跳转到指定楼层
CoderLeonard 发表于 2016-11-18 10:30:01
楼主你好,你确定你是提交到yarn上的吗?
如果要提交到yarn,首先没有master节点的概念,然后肯定是要复制RM节点的配置文件到工程目录下的,sparkcontext才能知道RM的host和port
回复

使用道具 举报

George-zqq 发表于 2016-11-18 11:20:28
不要总是无脑的复制粘贴
回复

使用道具 举报

zhuangmz 发表于 2016-11-18 22:41:43
楼主你好,这样是提交到Spark Cluster,不是YARN Cluster吧?
回复

使用道具 举报

LouisPu 发表于 2017-11-28 16:06:47
以为看见了希望,确是一篇失望
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条