java.lang.IllegalArgumentException:java.net.UnknownHostException:tmp

时间:2016-11-28 09:54:39

标签: scala apache-spark sbt

我使用Spark-scala应用程序,我用sbt构建项目,我的树状结构是:  projectFilms/src/main/scala/AppFilms 我在HDFS中有3个文件,这些目录是:hdfs/tmp/projetFilms/<my_3_Files>,当我通过这个命令行“sbt run”运行我的代码时,它出现错误:

java.lang.IllegalArgumentException: java.net.UnknownHostException: tmp

和此:

  [trace] Stack trace suppressed: run last compile:run for the full output.
 ERROR Utils: uncaught error in thread SparkListenerBus, stopping SparkContext
java.lang.InterruptedException

这是我的代码:

import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
import org.apache.spark.rdd._   

object appFilms {

val conf = new SparkConf().setAppName("system of recommandation").setMaster("local[*]")
val sc = new SparkContext(conf)
def main(args: Array[String]) {

val files = sc.wholeTextFiles("hdfs://tmp/ProjetFilm/*.dat")
//val nbfiles = files.count
println("Hello my application!")
sc.stop()
}
}

我无法从hdfs读取文件,但是当我写

root@sandbox projectFilms# hadoop fs -cat /tmp/ProjetFilms/*

我如何从HDFS读取所有文件的内容,因为我知道我总是使用相同的命令工作。

请你能回答我!

2 个答案:

答案 0 :(得分:1)

使用:

val files = sc.wholeTextFiles("hdfs:///tmp/ProjetFilm/*.dat")

hdfs://之后还有一个附加/,是协议名称。您必须通过hdfs://协议转到/tmp/...,这就是URL需要额外/的原因。如果没有这个,Spark就会尝试访问主机tmp,而不是文件夹

答案 1 :(得分:1)

错误IllegalArgumentException: java.net.UnknownHostException: tmp是因为wholeTextFiles值将tmp作为主机名。将值替换为hdfs:///tmp/ProjetFilm/*.dat