本文先敘述如何配置eclipse中maven+scala的開發環境,以後,敘述如何實現Spark的本地運行。最後,成功運行scala編寫的spark程序。git
剛開始個人eclipse+maven環境是配置好的。github
系統:win7shell
eclipse版本:Luna Release(4.4.0)apache
maven是從EclipseMarket中安裝的,如圖1。windows
當初構建eclipse+maven環境時,僅僅安裝了第一個。bash
這裏能夠先不用急着安裝maven,下面在安裝maven for scala時,也提供了maven for eclipse。架構
圖1-eclipse安裝的m2e插件eclipse
圖2-eclipse安裝Scala IDEmaven
如圖3,圖中的url是:http://alchim31.free.fr/m2e-scala/update-site/oop
從圖3中搜索到的插件名稱中能夠看到,這裏同時也配置了m2e,也即eclipse須要的maven插件。若是eclipse沒有eclipse插件,則能夠所有選中安裝;若已經有了能夠單獨安裝第三個Maven Integration for Scala IDE。
安裝完成了MavenIntegration for Scala IDE以後,再輸入上面的url,可安裝列表裏就沒有Maven Integration for Scala IDE這一項了。
(PS:此處我是將MavenIntegration for Scala IDE卸載了以後從新截圖的)
(PS:若是再看圖1,除了第一個MavenIntegration for Eclipse(Luna and newer)1.5以外,還有一個MavenIntegration for Eclipse(Luna)1.5.0,。這是我在使用上述 url安裝m2e-scala時,沒有注意其中還包含了MavenIntegration for Eclipse,致使安裝了兩個版本的Maven Integration for Eclipse)
(PS:雖然我已經安裝上述url中的MavenIntegration for Eclipse,而且並無卸載,而圖3中依然顯示了Maven Integration for Eclipse的選項,是由於其版本有了更新。能夠從其中看到其最新的版本是1.5.1,此時若繼續安裝該Maven Integration for Eclipse,則是對版本進行更新。)
(PS:圖1中還有一個MavenIntegration for Eclipse WTP(Juno)1.0.1暫時不知道是怎麼安裝上去的)
圖3-安裝m2e-scala
新建一個名爲Scala Project,右鍵工程添加一個名爲test的Scala Object,代碼以下:
package test object test { def main(args : Array[String]) { println("hello world") } }
最終如圖四、5所示。
圖4-新建scalaproject
、
圖5-scala工程目錄
右鍵test.scala,Run as…-> Scala Application,在終端成功輸出了hello world。
從圖5中能夠看到,咱們安裝的ScalaIDE中自帶的scala版本是2.11.5的。
(PS:若是不在終端以命令行的形式使用scala的話,彷佛能夠不用單獨下載scala包並設置環境變量)
原本新建一個scala+maven的流程能夠是這樣的,如圖6所示。
新建maven工程,不勾選Createa simple project,選擇與scala有關的archetype。
eclipse的archetype是一種模板,給人的感受就是其中的目錄架構及相關文件(好比說pom.xml)都是按照某種模式(如scala maven)構造好的。若是選擇如圖6中的1.2版本的scala相關archetype,則新建的maven工程就有了scala maven工程的目錄結構,pom.xml也是配置好的,而且還有幾個scala的代碼文件。
可是,有一些錯誤,編譯沒法經過。我想,這主要是由於scala的版本問題,從工程中的pom.xml中能夠看到,這個模板是基於scala 2.7.0構建的。而咱們安裝的scala IDE是基於scala 2.11.5。
圖6-新建scala maven工程
scala的新版本對老版本的兼容彷佛並很差。這裏能夠本身修正pom.xml文件,不過估計代碼可能也要修改。
我這裏是從Git上下載了一個現成的基於scala2.11.5的maven工程。
git網址:https://github.com/scala/scala-module-dependency-sample
使用git clone下來以後,在eclipse中導入maven工程(maven-sample)。
從其pom.xml中能夠看到,是基於scala-2.11.5的。其中只有一個代碼文件,便是XMLHelloWorld.scala。只要可以順利的拉取到pom.xml中的依賴包,就能夠直接右鍵XMLHelloWorld.scala, Run as -> Scala Application。
至此,ecipse+scala+maven就搭建好了。接下來配置spark的本地運行環境。
這裏我是在maven-sample工程的基礎上配置spark的。
在pom.xml中添加spark-core。
<dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.11</artifactId> <version>1.2.1</version> </dependency>
在default package中添加scala object – SimpleApp。代碼以下:
/* SimpleApp.scala */ import org.apache.spark.SparkContext import org.apache.spark.SparkContext._ import org.apache.spark.SparkConf object SimpleApp { def main(args: Array[String]) { val logFile = "test.txt" // Should be some file on your system val conf = new SparkConf().setAppName("Simple Application").setMaster("local[2]") val sc = new SparkContext(conf) val logData = sc.textFile(logFile, 2).cache() val numAs = logData.filter(line => line.contains("a")).count() val numBs = logData.filter(line => line.contains("b")).count() println("Lines with a: %s, Lines with b: %s".format(numAs, numBs)) } }
此時,編譯已經經過了,可是若是Run as–> Scala Application的話,會有ClassDefNotFound的異常。
這是由於spark-core其實須要依賴不少其餘的jar包來運行,但這些包在spark-core包中並無,而且在咱們的classpath中也沒有。
咱們能夠方便的從在線maven庫裏找到spark-core包。
圖7-spark-core
咱們點擊後面的pom連接,能夠看到spark-core的pom.xml文件,其中依賴的包不少。
將其中全部的dependency拷貝到咱們的maven-sample工程的pom.xml中。從新build工程的時候,須要下載不少包,可能須要很長時間。
(PS:從spark-core的pom.xml文件中能夠很直觀看到的是,其中org.scala-lang.scala-library組件咱們本來已經有了,不過版本稍有不一樣,能夠刪掉,也可不刪。)
其實,也可本身根據ClassDefNotFound的提示一步步本身添加依賴包,不過,須要添加的可很多。
而且,由於spark-core依賴的衆多包,又依賴了其餘的包。因此,你可能在根據ClassDefNotFound異常添加依賴包的過程當中,發現一些Class所依賴的包在spark-core的pom.xml文件中並未看到。這是由於它們存在於spark-core的依賴包的依賴包中。並且,spark-core的依賴包所依賴的包,還有些版本的衝突,手動添加的過程當中,可能還會遇到MethodNotFound的錯誤。
最簡單的方法就是將全部的依賴拷貝過來。
如今,咱們先在工程目錄下配置test.txt文件。
圖8-添加test.txt文件
文件內容以下:
a b c ab abab d
右鍵SimpleApp.scala,Run as -> Scala Application,發現打了不少日誌。
我也只明白最後一行。
Lineswith a: 3, Lines with b: 3
是spark程序運行的正確輸出。
可是能夠看到日誌中仍是有一條異常。
圖9-Hadoop異常
這條異常彷佛並不影響程序的正確運行,不過仍是先考慮將該異常解決掉。
有關這個異常能夠參考
這個網頁的主體內容很簡短,意思就是hadoop2.2.0的發佈版本對windows的支持並很差。網頁中提供了「Build, Install, Configure and Run Apache Hadoop 2.2.0 in MicrosoftWindows OS」的連接,也提供了現成的編譯好的包。
我是直接將包下載下來,在工程目錄下按照異常提示創建了null/bin目錄,並將下載包中的全部文件拷貝進了null/bin目錄。
圖10-bin目錄
接下來,再運行SimpleApp程序,就沒有異常了。
可是,這種方法是否本質上解決了該異常就不知道了。由於我發現,即便手動隨便建一個null/bin/winutils.exe文件,只要路徑及文件名相同,也能夠消除上述有關hadoop2.2.0的異常。