IDEA远程提交spark示例遇到的一个坑

先前使用idea进行远程提交spark程序采用的是local,也就相当于单机版spark,于是乎我又试了一下spark自带的standalone模式。但是在setMaster(“spark://192.168.160.30:7077”)的时候出现了问题

一直显示initial job has not accepted any resources ,网上查询了相关信息,有可能是spark的executor和driver的内存设置大了,于是乎我调小了点,但是还是出现这样的问题。

然后我在spark web界面查看相关日志,提交者是我的windows主机,用户也是我windows上的用户。这就是坑的来源了。解决方法:

在程序中指定spark-driver-host为windows主机的ip

然后再指定Jar包库,我们可以先将程序打包,然后setJars(List(“程序打包后的jar包路径”)),这样的话,也确保spark运行是能找到需要的jar库

修改后的代码如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf

object WordCount {
  def main(args: Array[String]) {
    val inputFile =  "hdfs://192.168.160.30:9000/input/readme.txt"
    val conf = new SparkConf().setAppName("WordCount").setMaster("spark://192.168.160.30:7077")
      .setJars(List("F:\\Code\\sparkCode\\wordcount\\out\\artifacts\\wordcount_jar\\wordcount.jar"))
      .set("spark.driver.host","169.254.230.76")
    val sc = new SparkContext(conf)
    val textFile = sc.textFile(inputFile)
    val wordCount = textFile.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey((a, b) => a + b)
    wordCount.foreach(println)
  }
}

采用standalone模式运行的结果并不会在控制台显示,而是要在web界面的stdout中查看。