spark-submit local本地运行问题

来源:互联网 发布:排序算法总结 java 编辑:程序博客网 时间:2024/06/04 17:58

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


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


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

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


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

0 0
原创粉丝点击