无法通过Spark-Submit使用本地文件

时间:2018-07-21 12:20:31

标签: apache-spark

我正在尝试执行火花字计数程序。我的输入文件和输出目录位于本地而不是HDFS上。当我执行代码时,输​​入目录未找到异常。

import org.apache.spark.SparkConf
import org.apache.spark.sql.SparkSession

object WordCount {
  val sparkConf = new SparkConf()
  def main(args: Array[String]): Unit = {
    val spark   = SparkSession.builder().config(sparkConf).master("yarn").getOrCreate()
    val input   = args(0)
    val output  = args(1)
    val text    = spark.sparkContext.textFile("input",1)
    val outPath = text.flatMap(line => line.split(" "))
    val words   = outPath.map(w => (w,1))
    val wc      = words.reduceByKey((x,y)=>(x+y))

    wc.saveAsTextFile("output")
  }
}

火花提交:

spark-submit --class com.practice.WordCount sparkwordcount_2.11-0.1.jar --files home/hmusr/ReconTest/inputdir/sample /home/hmusr/ReconTest/inputdir/wordout

我正在使用选项--files来获取本地输入文件,并将输出指向spark-submit中的输出目录。当我使用spark-submit提交jar时,它说输入路径不存在:

Exception in thread "main" org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: hdfs://dev/user/hmusr/input

任何人都可以让我知道我在这里犯的错误吗?

1 个答案:

答案 0 :(得分:3)

几件事:

val text = spark.sparkContext.textFile(input,1)

要使用变量,请删除双引号,input而不是"input"

您期望输入和输出作为参数,因此在jar后面提交spark提交(不带--files),并将master用作local

另外,使用file://使用本地文件。

您的spark-submit应该类似于:

spark-submit --master local[2] \
--class com.practice.WordCount \
sparkwordcount_2.11-0.1.jar \
file:///home/hmusr/ReconTest/inputdir/sample \
file:///home/hmusr/ReconTest/inputdir/wordout