使用scala開發spark入門總結html
1、spark簡單介紹java
關於spark的介紹網上有不少,能夠自行百度和google,這裏只作簡單介紹。推薦簡單介紹鏈接:http://blog.jobbole.com/89446/python
一、 spark是什麼?git
Spark是UC Berkeley AMP lab (加州大學伯克利分校的AMP實驗室)所開源的類Hadoop MapReduce的通用並行框架。通常配合hadoop使用,能夠加強hadoop的計算性能。github
二、 Spark的優勢有哪些?算法
Spark擁有Hadoop MapReduce所具備的優勢;但不一樣於MapReduce的是Job中間輸出結果能夠保存在內存中,從而再也不須要讀寫HDFS,所以Spark能更好地適用於數據挖掘與機器學習等須要迭代的MapReduce的算法。apache
值得注意的是:spark是經過scala這一編程語言開發的。雖然spark的開發語言支持java和python,可是編寫spark程序最好仍是使用scala編寫,一是代碼簡潔,二是函數式的易讀性比較好,最重要的是scala可以幫助咱們更好的理解spark的工做過程。編程
2、Scala和sbt簡單介紹json
Scala 是一門多範式(multi-paradigm)的編程語言,設計初衷是要集成面向對象編程和函數式編程的各類特性。Scala 運行在Java虛擬機上,併兼容現有的Java程序。Scala 源代碼被編譯成Java字節碼,因此它能夠運行於JVM之上,並能夠調用現有的Java類庫。框架
Scala推薦學習網站:http://www.runoob.com/scala/scala-tutorial.html 若是喜歡看視頻教程的話推薦慕課網的scala教程:http://www.imooc.com/learn/613
相似於開發Java程序使用maven管理項目,scala項目的管理工具是sbt。Sbt是Simple Build Tool的縮寫,它是對scala或Java語言進行編譯的一個工具,它須要JDK1.6或更高的版本支持。
3、安裝scala和sbt
具體的安裝網上有不少教程,都介紹的很清楚。下面是一些推薦的鏈接。
Scala官網連接:http://www.scala-lang.org/
Scala安裝連接:http://www.runoob.com/scala/scala-install.html (與jdk的安裝大同小異)
Sbt安裝連接:http://www.importnew.com/4311.html 詳細介紹了sbt的優勢,項目目錄結構,如何常見一個sbt工程等。
值得注意的是:
l sbt安裝並不困難,可是安裝完成以後再命令窗口第一次運行sbt命令的時候,sbt會默認下載須要用到的包,這個過程很是消耗時間,須要耐心等待,若是遇到一些包很大,很長時間都沒有下載完成的話,能夠手動下載這個包,並把包放到命令行顯示的路徑下面。
l sbt的本地倉庫儘可能修改,默認目錄在C盤。
4、使用開發工具
Scala的IDE通常有兩個:Scala IDE for Eclipse 和 IntelliJ Idea,對於習慣使用eclipse的用戶可使用scala ide for eclipse,下載連接:http://scala-ide.org/。兩個IDE都比較好用。我的感受,idea對於插件的安裝以及win環境下命令窗口的支持要比eclipse好用一點,更推薦使用idea開發。
使用sbt:
真正寫起程序和項目來,確定要使用項目管理工具的。Sbt是編寫scala項目的經常使用管理工具。
Sbt目前使用的人還不是不少,不能要求像maven那樣方便。Sbt項目的結構目錄爲:
src目錄詳解
Maven用戶對src目錄的結構應該不會感到陌生,下面簡單介紹各個子目錄的做用。
build.sbt詳解
讀者能夠簡單的將build.sbt文件理解爲Maven項目的pom.xml文件,它是build定義文件。 SBT運行使用兩種形式的build定義文件,一種就是放在項目的根目錄下,即build.sbt, 是一種簡化形式的build定義; 另外一種放在project目錄下,採用純Scala語言編寫,形式更加複雜,固然,也更完備,更有表現力。
具體的使用能夠參照網上的介紹
推薦連接:http://www.th7.cn/Program/java/201309/149445.shtml
上面介紹的這些目錄能夠本身建立,而後導入到IDE中。生產相應IDE的工具備:
Sbt Eclipse 插件:
推薦連接:http://www.cnblogs.com/rxingyue/p/4398591.html
有2種配置方式:一種是在 ~/.sbt/0.13/plugins//build.sbt 裏配置addPlugin,這種作法是全局的插件,即對本機全部sbt項目均使用。另外一種是每一個項目不同的plugins,則是在每一個項目跟目錄下project/plugins.sbt裏進行插件配置。 plugins.sbt裏面內容配置,添加插件:addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "2.4.0")
在根目錄的build.sbt裏添加EclipseKeys.createSrc := EclipseCreateSrc.Default + EclipseCreateSrc.Resource,再執行sbt eclipse。
這樣就能夠生成eclipse項目了,直接導入項目就可使用了。
Sbt Idea 插件:
在項目目錄下的project/plugins.sbt中添加插件
addSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "1.6.0")
在命令行輸入sbt ,會自動安裝插件。
安裝完插件以後,在命令行(項目根目錄)輸入sbt gen-idea能夠幫咱們生成IntelliJ Idea的相關文件。
以上兩個插件還有一個重要做用就是能夠幫咱們導入build.sbt中用到的依賴,這樣咱們就能夠在開發環境進行一些測試。
使用assembly插件。參照博客:http://www.cnblogs.com/rxingyue/p/4398591.html
Assembly是做爲一種插件的,因此要在project下面的plugins.sbt裏面配置。
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.11.2")
除了插件的配置以外,還須要配置跟目錄下build.sbt,支持assembly,在文件頭部加入:
import AssemblyKeys._
assemblySettings
5、一些坑及解決辦法
一、 Sbt下載依賴慢
這是很正常的問題,畢竟默認的遠程倉庫都在國外。能夠選擇更改庫,能夠全局更改,也能夠針對項目進行更改,在build.sbt裏面配置內容:
resolvers ++= Seq(
// HTTPS is unavailable for Maven Central
"Maven Repository" at "http://repo2.maven.apache.org/maven2",
"Apache Repository" at "https://repository.apache.org/content/repositories/releases",
"MQTT Repository" at "https://repo.eclipse.org/content/repositories/paho-releases/",
"Cloudera Repository" at "http://repository.cloudera.com/artifactory/cloudera-repos/",
Resolver.mavenLocal
)
另外的辦法:對於一些比較大的包,能夠手動下載而後放到相應的目錄。(通常把下載的地址給迅雷,下載會快不少,這種辦法只針對個別狀況)
二、 依賴的版本問題
互相依賴的包之間,可能出現版本的衝突,最好保持版本一致。
形如
libraryDependencies ++= Seq(
"org.json4s" %% "json4s-native" % "3.2.10",
"org.json4s" %% "json4s-jackson" % "3.2.10"
)
中間兩個百分號的依賴是不指定版本的,版本有scala的版本肯定。
形如
libraryDependencies += "org.apache.kafka" % "kafka_2.10" % "0.10.0.0"
中間有一個百分號的依賴是指定版本的。
三、 Sbt找不到依賴
找不到依賴,能夠在引用的依賴後面寫一下依賴的地址。例如:
libraryDependencies += "net.sf.json-lib" % "json-lib" % "2.4" from "http://repo1.maven.org/maven2/net/sf/json-lib/json-lib/2.4/json-lib-2.4-jdk15.jar"
6、Spark經典入門示例
一、 WordCount
二、 SparkStreaming讀取kafka數據
這些程序均可以在官方網站查看獲得。