分享

用IDEA开发spark,应该如何提交任务到YARN上?

今天在cloudera上部署了spark on YARN,查看spark的状态,发现Gateway全部是灰色,而且都是“不适用”的状态,在网上搜了一下,也没人有具体说明这是装成功了还是装失败了:
QQ截图20161117151604.png


尝试着启动spark-shell,是可以启动的。

于是我安装了IDEA,安装了插件,在window上安装了scala2.10.6,写了一个wordcount的程序,准备在IDEA中提交:
[mw_shl_code=scala,true]import org.apache.spark._
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
object test {
  def main(args : Array[String]) : Unit = {
    System.setProperty("HADOOP_USER_NAME", "hdfs")
    val conf = new SparkConf().setMaster("yarn-client").setAppName("spark_test")
    conf.setJars(List("F:\\workspace\\hadoop-mr\\TestMr\\out\\artifacts\\sparktest_jar\\sparktest.jar"))
    conf.set("spark.yarn.jar", "hdfs://hadoopnamenode1:8020/user/spark/sparkjar/spark-assembly-1.6.0-cdh5.8.2-hadoop2.6.0-cdh5.8.2.jar")
    val sc = new SparkContext(conf)
    val lines = sc.textFile("hdfs://hadoopnamenode1:8020//DCBD/data/ic/201609", 1)
    val words = lines.flatMap { line => line.split(" ") }
    val pairs = words.map { word => (word, 1) }
    val wordCounts = pairs.reduceByKey { _ + _ }

    wordCounts.foreach(wordCount => println(wordCount._1 + " appeared " + wordCount._2 + " times."))
  }
}[/mw_shl_code]

从日志上来看,spark把我的windows本机当成了driver:
INFO  util.Utils (Logging.scala:logInfo(58)) - Successfully started service 'sparkDriver' on port 58400.

但是运行了几秒钟,就开始一直打印出错信息:
2016-11-17 15:19:16,088 INFO  cluster.YarnClientSchedulerBackend (Logging.scala:logInfo(58)) - Registered executor NettyRpcEndpointRef(null) (HadoopDatanode3:59789) with ID 2
2016-11-17 15:19:16,138 WARN  net.ScriptBasedMapping (ScriptBasedMapping.java:runResolveCommand(254)) - Exception running /etc/hadoop/conf.cloudera.yarn/topology.py 172.16.1.145
java.io.IOException: Cannot run program "/etc/hadoop/conf.cloudera.yarn/topology.py" (in directory "F:\workspace\spark\sparktest"): CreateProcess error=2, 系统找不到指定的文件。


很明显,这是在注册executor的时候报的错,在172.16.1.145 上无法执行"/etc/hadoop/conf.cloudera.yarn/topology.py",但是172.16.1.145 上明明是有这个路径存在的,用hdfs用户也能手动执行,所以应该不是权限的问题(任何用户都有可读可执行权限)。

日志中显示in directory "F:\workspace\spark\sparktest",这是我IDEA工程的路径,我怀疑,是不是程序在我的工程路径中去找需要执行的文件,那当然是找不到的,查看了源码ProcessBuilder.java:
[mw_shl_code=scala,true]           throw new IOException(
                "Cannot run program \"" + prog + "\""
                + (dir == null ? "" : " (in directory \"" + dir + "\")")
                + exceptionInfo,
                cause);[/mw_shl_code]


[mw_shl_code=scala,true]    /**
     * Returns this process builder's working directory.
     *
     * Subprocesses subsequently started by this object's {@link
     * #start()} method will use this as their working directory.
     * The returned value may be {@code null} -- this means to use
     * the working directory of the current Java process, usually the
     * directory named by the system property {@code user.dir},
     * as the working directory of the child process.
     *
     * @return this process builder's working directory
     */
    public File directory() {
        return directory;
    }[/mw_shl_code]

我尝试着用去set system property 去修改user.dir,但是这样程序刚启动就会报错,说路径非法。

综上所述,想请问一下同样在IDEA下,用scala开发spark,同时提交任务到spark上的同学,你们是如何提交的呢?


已有(6)人评论

跳转到指定楼层
CoderLeonard 发表于 2016-11-18 10:26:44
desehawk 发表于 2016-11-17 18:55
楼主设置的jar最好是远程服务器的,还有master也未设置。

楼主参考这篇,应该有一定的帮助

谢谢你的帮助!
你发给我的帖子我之前看过,我部署的spark是 spark on yarn的,没有standalone中的master和slave的概念,所以帖子中的方法并不适合我。
我昨天自己折腾了一天,发现在windows上,似乎没有办法在IDEA中直接提交job到YARN集群,只能用local模式先本地调试,没问题后再打包到集群中,然后用spark-submit --master yarn-cluster的方式运行。
或者在集群的节点上运行spark-shell --master yarn-client 把代码粘过来运行。
目前我所知的,就是这两种方法,也许在linux环境下,IDEA可以直接提交,以后有机会装个虚拟机试试。

点评

在企业中都是通过打包方式到集群上运行的!  发表于 2016-11-18 16:32
回复

使用道具 举报

desehawk 发表于 2016-11-17 18:55:33
楼主设置的jar最好是远程服务器的,还有master也未设置。

楼主参考这篇,应该有一定的帮助
用IDEA开发spark,源码提交任务到YARN
http://www.aboutyun.com/forum.php?mod=viewthread&tid=20316


回复

使用道具 举报

George-zqq 发表于 2016-11-18 11:23:10
楼主 gateway 不适用 解决了么? 我也很纳闷,装了好几次都是不适用
回复

使用道具 举报

tntzbzc 发表于 2016-11-18 12:10:12
George-zqq 发表于 2016-11-18 11:23
楼主 gateway 不适用 解决了么? 我也很纳闷,装了好几次都是不适用
有类似的问题
CDH上spark gateway 无状态 不适用是什么意思?求大神解释
http://www.aboutyun.com/forum.php?mod=viewthread&tid=16779


回复

使用道具 举报

w517424787 发表于 2016-11-18 16:54:15
cloudera manager安装后的Gateway是你那样的,我公司安装的也是一样!
回复

使用道具 举报

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

本版积分规则

关闭

推荐上一条 /2 下一条