您的位置:首页 > 编程语言 > Java开发

java.io.IOException: No FileSystem for scheme: file spark hadoop

2017-11-23 16:43 507 查看

问题描述

在IDEA中新建maven工程运行基本的spark程序如下:

// 创建一个Scala版本的Spark Context
val conf = new     SparkConf().setAppName("wordCount").setMaster("local")
val sc = new SparkContext(conf)
// 读取我们的输入数据
val input = sc.textFile(logFile)
// 把它切分成一个个单词
val words = input.flatMap(line => line.split(" "))
// 转换为键值对并计数
val counts = words.map(word => (word, 1)).reduceByKey{case (x, y) => x + y}
// 将统计出来的单词总数存入一个文本文件,引发求值
println(counts.collect().mkString(","))


结果报错如下:

Exception in thread "main" java.lang.RuntimeException: java.io.IOException: No FileSystem for scheme: file
at org.apache.hadoop.mapred.JobConf.getWorkingDirectory(JobConf.java:658)
at org.apache.hadoop.mapred.FileInputFormat.setInputPaths(FileInputFormat.java:436)
at org.apache.hadoop.mapred.FileInputFormat.setInputPaths(FileInputFormat.java:409)
at org.apache.spark.SparkContext$$anonfun$hadoopFile$1$$anonfun$33.apply(SparkContext.scala:1015)
at org.apache.spark.SparkContext$$anonfun$hadoopFile$1$$anonfun$33.apply(SparkContext.scala:1015)
at org.apache.spark.rdd.HadoopRDD$$anonfun$getJobConf$6.apply(HadoopRDD.scala:176)
at org.apache.spark.rdd.HadoopRDD$$anonfun$getJobConf$6.apply(HadoopRDD.scala:176)
at scala.Option.map(Option.scala:145)
......


解决方案(加入了三句话):

// 创建一个Scala版本的Spark Context
val conf = new SparkConf().setAppName("wordCount").setMaster("local")
val sc = new SparkContext(conf)

val h_conf = sc.hadoopConfiguration

h_conf.set("fs.hdfs.impl", classOf[org.apache.hadoop.hdfs.DistributedFileSystem].getName)
h_conf.set("fs.file.impl", classOf[org.apache.hadoop.fs.LocalFileSystem].getName)

// 读取我们的输入数据
val input = sc.textFile(logFile)
// 把它切分成一个个单词
val words = input.flatMap(line => line.split(" "))
// 转换为键值对并计数
val counts = words.map(word => (word, 1)).reduceByKey{case (x, y) => x + y}
// 将统计出来的单词总数存入一个文本文件,引发求值
println(counts.collect().mkString(","))


报错原因:

在hadoop-commons和hadoop-hdfs两个jar文件中在META-INFO/services下包含相同的文件名org.apache.hadoop.fs.FileSystem,而我们使用maven-assembly-plugin时,最终只有一个文件被保留,所以被重写的那个文件系统就无法找到。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spark hadoop scala idea maven