spark-submit local本地运行问题

求大神解答,或者我们来讨论下!今天碰到一个很奇怪的问题,关于spark-submit 三种运行模式:

(1)本地local模式

(2)在Hadoop YARN-client模式

(3)Standalone Cluster模式

  1  问题描述

      首先说明一下我的集群,一个master节点和两个slave节点,slave1和slave2。

       我一直在master节点上练习spark-submit三种模式。运行的列子就是统计单词的个数。

       首先我运行的spark-submit的local模式,可以成功,并且成功的写入了Linux下制定的输出目录,然后在Hadoop YARN-client模式下运行,成功的写入了HDFS目录下,最后在Stand alone Cluster模式下也成功运行,但是问题来了,我再次在master节点上运行本地模式输出的结果写到了HDFS下我明明制定了本地运行模式而且代码里写的输出路径为Linux路径不是HDFS路径,为什么没有写入Linux目录下呢?

      此时,我在slave1节点和slave2节点运行本地模式,都成功的写进了Linux目录下,并没有写入HDFS目录下

      我再次运行本地模式说目录已存在但是Linux目录下没有,我就把HDFS下的目录删掉,然后运行。

      说明:Linux目录和HDFS目录名一样,开始写代码的时候没注意,发现最后一模一样,这样不知道到底写到了哪里,应该注意的。

      然后查看Linux目录下是否有输出文件,发现没有。然后我在HDFS目录下查看确实输出到了HDFS目录下

spark-submit local本地运行问题_第1张图片

         下面是slave1节点运行本地模式信息

spark-submit local本地运行问题_第2张图片

     可以看出slave1成功运行本地模式,并输出到制定Linux目录      

     下面是slave2运行本地模式信息

spark-submit local本地运行问题_第3张图片

   可以看出slave2成功运行本地模式,并输出到制定Linux目录 。

   2运行代码

object RunWordCount {
  def main(args: Array[String]): Unit = {
    Logger.getLogger("org").setLevel(Level.OFF)
    System.setProperty("spark.ui.showConsoleProgress","false")
    println("开始运行RunWordCount")
    val sc = new SparkContext(new SparkConf().setAppName("wordCount").setMaster("local[4]"))
    println("开始读取文本文件")
    val textFile = sc.textFile("/root/test/LICENSE.txt")
    println("开始创建RDD....")
    val countsRDD = textFile.flatMap(line => line.split(" ")).map(word => (word,1)).reduceByKey(_+_)
    println(countsRDD)
    println("开始保存到文本文件")
    try{
      countsRDD.saveAsTextFile("/root/test/output2")
      println("已经存盘成功")
    }catch {
      case e:Exception => println("输出目录已经存在,请先删除原有目录")
    }
  }
}

    3解决方法

输出的时候写上 file就可以解决了,会写到Linux下。

你可能感兴趣的:(Spark)