2016-03-15 139 views
1

下面的代码会导致火花,无响应:运行斯卡拉星火与SBT

System.setProperty("hadoop.home.dir", "H:\\winutils"); 

val sparkConf = new SparkConf().setAppName("GroupBy Test").setMaster("local[1]") 
val sc = new SparkContext(sparkConf) 

def main(args: Array[String]) { 

    val text_file = sc.textFile("h:\\data\\details.txt") 

    val counts = text_file 
     .flatMap(line => line.split(" ")) 
     .map(word => (word, 1)) 
     .reduceByKey(_ + _) 

    println(counts); 

} 

我设置hadoop.home.dir为了避免此处提到的错误:Failed to locate the winutils binary in the hadoop binary path

这是怎么了我build.sbt文件看起来像:

lazy val root = (project in file(".")). 
    settings(
    name := "hello", 
    version := "1.0", 
    scalaVersion := "2.11.0" 
) 


libraryDependencies ++= Seq(

      "org.apache.spark" % "spark-core_2.11" % "1.6.0" 

) 

应在文件中使用SBT代码斯卡拉星火是编译/运行的?

我认为代码是好的,它是从http://spark.apache.org/examples.html逐字采取的,但我不确定是否需要Hadoop WinUtils路径。

更新:“解决的办法是使用fork:=真主build.sbt” 这里是参考:Spark: ClassNotFoundException when running hello world example in scala 2.11

+0

这将运行得很好,因为它是我的结束(我做出的唯一改变是文本文件+ winutils不同的路径)。它启动后,将'ShuffledRDD [4]在Application.scala:18'的reduceByKey处打印并关闭。我唯一立即看到的是,在转换结束时没有使用任何动作,即数据永远不会被计算并返回给驱动程序,代码只会生成具有几个转换的RDD。但是,这不应该导致应用程序挂起,尤其是不在单线程本地模式下(流式传输至少需要2个线程,但是您不会使用它)。 – alextsc

+0

@alextsc你在Windows上运行?我正在使用Windows10 –

+0

是的Windows 10专业版 – alextsc

回答

1

这是我build.sbt的内容。请注意,如果您的网络连接速度较慢,则可能需要一些时间。

version := "1.0" 

scalaVersion := "2.10.4" 

libraryDependencies ++= Seq(
    "org.apache.spark" %% "spark-core" % "1.6.1", 
    "org.apache.spark" %% "spark-mllib" % "1.6.1", 
    "org.apache.spark" %% "spark-sql" % "1.6.1", 
    "org.slf4j" % "slf4j-api" % "1.7.12" 
) 


run in Compile <<= Defaults.runTask(fullClasspath in Compile, mainClass in (Compile, run), runner in (Compile, run)) 

在我加入这个主要的,但它取决于你在哪里放置winutil文件夹。

System.setProperty("hadoop.home.dir", "c:\\winutil") 

How it looks