工做以及興趣所致,開始了spark學習之旅,瀏覽網上大牛們的博客 文章,而且結合官網docs,剛開始雲裏霧裏,如今也能霧裏看到點花了。 html
學習spark,首先咱們知道spark是由scala語言編寫而成,至於爲什麼,總結說來仍是語言的緣由,語言的優點,那麼scala就脫穎而出了, 光就我目前所瞭解所接觸,確實不少源碼中用scala實現是何等的簡潔,反觀java,有點點的辛酸。 java
那麼要不就先學習scala吧,之後還要靠着這語言來深刻理解spark來 閱讀spark源碼呢。 git
(1) 開發工具? github
(2) 項目構件工具? apache
(3) 打包部署? windows
開發工具,首先就想到的是 eclipse-scala ide插件,畢竟跟eclipse那麼多年的感受了,eclipse每天見。 服務器
項目構件工具,本來也是安裝m2eclipse-scala插件,使用最熟悉的maven的,可是一來該插件更新地址目前好像很差使了,並且廣大博友也都認爲仍是 原生的sbt比較好,那麼仍是花點時間來了解下SBT(Simple Build Tool)吧。 網絡
SBT是scala語言項目的構建工具,就至關於maven是java項目工程的構建工具。SBT自己也很強大,二者的操做,構建流程都比較相似,因此使用maven的那種思想,去類比sbt便可。可是有一點須要弄清楚,由於目前好像eclipse中並無sbt的工具插件,不像eclipse中有m2e,能夠集成maven工具插件,因此在使用的過程當中 sbt的構建過程並非經過eclipse來完成,而是使用sbt和eclipse相互配合完成。這也是在使用過程當中有點不方便的地方。 eclipse
要使用sbt,先安裝吧,本章就講在windows下的安裝方法吧 http://www.scala-sbt.org/download.html 下載msi安裝包。本文安裝使用0.13.9版本。 maven
安裝後的目錄很是 簡潔: /bin /conf 配置好系統環境變量PATH,添加bin目錄所在。這樣咱們就能夠在任意位置執行sbt.bat腳本了。
打開cmd命令窗口,輸入sbt 命令。 sbt首次運行的時候須要下載一些依賴包,說到下載依賴包,這裏再次插入一個話題拿就是當網絡環境中有代理服務器的時候。因爲在公司環境下有代理服務器的問題,因此在執行sbt以前必定主要要配置好代理服務器的地址信息。 我就簡單粗暴的再環境變量裏面分別配置了
http_proxy=http://ip:port
https_proxy=https://ip:port
兩個環境變量,這樣就能順利下載依賴包了。
依賴包下載完成以後,就會順利的進入到了stb的交互式操做控制檯。
咱們知道常見maven項目後,在項目目錄下會有pom.xml文件,會有相應的.project, .classpath文件,這都是maven工程所特有的工程目錄結構,
一樣的基於sbt構建的scala項目工程也須要有相應的工程目錄結構,咱們想要生成這樣的目錄結構須要一個 sbt-eclipse插件。 https://github.com/typesafehub/sbteclipse ,
那麼如今的問題就是如何將這個插件添加到sbt中去:在安裝sbt後,會在操做系統的用戶目錄下面生成一個目錄文件
在上圖目錄中,建立一個文件夾命名爲plugins,在該文件夾中建立一個文本文件,命名爲build.sbt
該配置文件就是相對於sbt的一個全局配置。
咱們在該文件中添加,sbteclipse插件。
addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "2.4.0")
在cmd命令行,從新執行sbt命令,sbt會下載sbt-eclipse插件了。
安裝完成sbt-eclipse插件之後,那麼使用sbt就能夠建立 eclipse下的基於sbt構建的項目工程結構了。
在eclipse的工程目錄 workspace下新建一個文件夾,文件夾命名爲scala-sbt-test。
在cmd命令窗口中定位到scala-sbt-test目錄下,執行sbt命令,進入sbt控制檯。sbt提供了eclipse命令,來生成基於sbt構建的eclipse工程結構。
生成好了 eclipse下基於sbt構建的工程目錄結構,那麼接下來就是將項目導入到eclipse
目前爲止,基於sbt構建的eclipse工程已經搭建完成。
maven項目的構建須要pom.xml,一樣的sbt項目的構建須要build.sbt配置文件,
第三方包的依賴,倉庫都配置,sbt相關的配置項都在build.sbt中配置添加。(具體該配置文件中配置什麼,怎麼配置,本文就詳述了,具體可看sbt官網描述。)
注意:每次當build.sbt中相關配置變化後,須要生效的話,都須要執行 sbt eclipse命令來更新應用。
最後說一下 打包實現。
maven中打包須要assembly插件,一樣的sbt中也提供了assembly插件。
在全局build.sbt配置文件中,添加assembly插件
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.11.2")
在項目工程下的build.sbt配置文件中,添加對 assembly插件的引用
import AssemblyKeys._
assemblySettings
打包執行:
sbt assembly
命令。
最後把全局build.sbt內容以及項目下build.sbt文件內容分別展現下
全局build.sbt
resolvers += Resolver.url("artifactory", url("http://scalasbt.artifactoryonline.com/scalasbt/sbt-plugin-releases"))(Resolver.ivyStylePatterns) resolvers += "Typesafe Repository" at "http://repo.typesafe.com/typesafe/releases/" addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "2.4.0") addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.11.2")
import AssemblyKeys._ assemblySettings name := "spark-scala-wordcount-network" version := "1.0" scalaVersion := "2.11.7" EclipseKeys.createSrc := EclipseCreateSrc.Default + EclipseCreateSrc.Resource libraryDependencies ++= Seq( "org.apache.spark" % "spark-core_2.10" % "1.3.0" % "provided", "org.apache.spark" % "spark-streaming_2.10" % "1.3.0" % "provided", "log4j" % "log4j" % "1.2.16" ) resolvers ++= Seq( // HTTPS is unavailable for Maven Central "Maven Repository" at "http://repo.maven.apache.org/maven2", "Apache Repository" at "https://repository.apache.org/content/repositories/releases", "JBoss Repository" at "https://repository.jboss.org/nexus/content/repositories/releases/", "MQTT Repository" at "https://repo.eclipse.org/content/repositories/paho-releases/", "Cloudera Repository" at "http://repository.cloudera.com/artifactory/cloudera-repos/", "nexus" at "http://172.16.25.142/nexus/content/repositories/releases/", "nexus snapshot" at "http://172.16.25.142/nexus/content/repositories/snapshots/", Resolver.mavenLocal )總結:花了點時間總算理清楚了 eclipse sbt scala之間的因果關係