spark-submit local本地运行问题

时间:2021-01-18 09:17:03

求大神解答,或者我们来讨论下!今天碰到一个很奇怪的问题,关于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本地运行问题

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

spark-submit local本地运行问题

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

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

spark-submit local本地运行问题

   可以看出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下。