試用最強Spark IDE--IDEA

1安裝IntelliJ IDEAjava

IDEA 全稱 IntelliJ IDEA,是java語言開發的集成環境,IntelliJ在業界被公認爲最好的java開發工具之一,尤爲在智能代碼助手、代碼自動提示、重構、J2EE支持、Ant、JUnit、CVS整合、代碼審查、創新的GUI設計等方面的功能能夠說是超常的。IDEA是JetBrains公司的產品,這家公司總部位於捷克共和國的首都布拉格,開發人員以嚴謹著稱的東歐程序員爲主。程序員

IDEA每一個版本提供Community和Ultimate兩個版本,以下圖所示,其中Community是徹底免費的,而Ultimate版本可使用30天,過這段時間後須要收費。從安裝後使用對比來看,下載一個Community版本足夠了。apache

 

 

1.1  安裝軟件編程

1.1.1 下載IDEA安裝文件session

能夠到Jetbrains官網http://www.jetbrains.com/idea/download/,選擇最新的安裝文件。因爲之後的練習須要在Linux開發Scala應用程序,選擇Linux系統IntelliJ IDEA14,以下圖所示:app

 

】在該系列配套資源的install目錄下分別提供了ideaIC-14.0.2.tar.gz(社區版)和ideaIU-14.0.2.tar.gz(正式版)安裝文件,對於Scala開發來講兩個版本區別不大less

1.1.2 解壓縮並移動目錄ide

把下載的安裝文件上傳到目標機器,用以下命令解壓縮IntelliJ IDEA安裝文件,並遷移到/app目錄下:函數

cd /home/hadoop/upload

tar -zxf ideaIU-14.0.2.tar.gz sudo mv idea-IU-139.659.2 /app/idea-IU

 

 

1.1.3配置/etc/profile環境變量工具

使用以下命令打開/etc/profile文件:

sudo vi /etc/profile

確認JDK配置變量正確配置(參見第2節《Spark編譯與部署》中關於基礎環境搭建介紹):

export JAVA_HOME=/usr/lib/java/jdk1.7.0_55 export PATH=$PATH:$JAVA_HOME

 

 

1.2 配置Scala環境

1.2.1 啓動IntelliJ IDEA

能夠經過兩種方式啓動IntelliJ IDEA:

  • 到IntelliJ IDEA安裝所在目錄下,進入bin目錄雙擊idea.sh啓動IntelliJ IDEA;
  • 在命令行終端中,進入$IDEA_HOME/bin目錄,輸入./idea.sh進行啓動

IDEA初始啓動目錄以下,IDEA默認狀況下並無安裝Scala插件,須要手動進行安裝,安裝過程並不複雜,下面將演示如何進行安裝。

 

 

1.2.2 下載Scala插件

參見上圖,在啓動界面上選擇「Configure-->Plugins"選項,而後彈出插件管理界面,在該界面上列出了全部安裝好的插件,因爲Scala插件沒有安裝,須要點擊」Install JetBrains plugins"進行安裝,以下圖所示:

 

 

待安裝的插件不少,能夠經過查詢或者字母順序找到Scala插件,選擇插件後在界面的右側出現該插件的詳細信息,點擊綠色按鈕"Install plugin」安裝插件,以下圖所示:

 

 

安裝過程將出現安裝進度界面,經過該界面瞭解插件安裝進度,以下圖所示:

 

 

安裝插件後,在啓動界面中選擇建立新項目,彈出的界面中將會出現"Scala"類型項目,選擇後將出現提示建立的項目是僅Scala代碼項目仍是SBT代碼項目,以下圖所示:

 

 

1.2.3 設置界面主題

從IntelliJ IDEA12開始起推出了Darcula 主題的全新用戶界面,該界面以黑色爲主題風格獲得不少開發人員的喜好,下面咱們將介紹如何進行配置。在主界面中選擇File菜單,而後選擇Setting子菜單,以下圖所示:

 

在彈出的界面中選擇Appearance &Behavior中Appearance,其中Theme中選擇Darcula主題,以下圖所示:

 

 

保存該主題從新進入,能夠看到以下圖樣式的開發工具,是否是很酷!

 

 

2    使用IDEA編寫例子

2.1 建立項目

2.1.1 設置項目基本信息

在IDEA菜單欄選擇File->New Project,出現以下界面,選擇建立Scala項目:

 

 

在項目的基本信息填寫項目名稱、項目所在位置、Project SDK和Scala SDK,在這裏設置項目名稱爲class3,關於Scala SDK的安裝參見第2節《Spark編譯與部署》下Spark編譯安裝介紹:

 

 

2.1.2 設置Modules

建立該項目後,能夠看到如今尚未源文件,只有一個存放源文件的目錄src以及存放工程其餘信息的雜項。經過雙擊src目錄或者點擊菜單上的項目結構圖標打開項目配置界面,以下圖所示:

 

 

在Modules設置界面中,src點擊右鍵選擇「新加文件夾」添加src->main->scala目錄:

 

 

在Modules設置界面中,分別設置main->scala目錄爲Sources類型:

 

 

2.1.3 配置Library

選擇Library目錄,添加Scala SDK Library,這裏選擇scala-2.10.4版本

 

 

添加Java Library,這裏選擇的是在$SPARK_HOME/lib/spark-assembly-1.1.0-hadoop2.2.0.jar文件,添加完成的界面以下:

 

 

2.2 例子1:直接運行

《Spark編程模型(上)--概念及Shell試驗》中使用Spark-Shell進行了搜狗日誌的查詢,在這裏咱們使用IDEA對Session查詢次數排行榜進行從新練習,能夠發現藉助專業的開發工具能夠方便快捷許多。

2.2.1 編寫代碼

在src->main->scala下建立class3包,在該包中添加SogouResult對象文件,具體代碼以下:

 

 1 package class3 2 3 import org.apache.spark.SparkContext._ 4 import org.apache.spark.{SparkConf, SparkContext} 5 6 object SogouResult{ 7 def main(args: Array[String]) { 8 if (args.length == 0) { 9 System.err.println("Usage: SogouResult <file1> <file2>") 10 System.exit(1) 11 } 12 13 val conf = new SparkConf().setAppName("SogouResult").setMaster("local") 14 val sc = new SparkContext(conf) 15 16 //session查詢次數排行榜 17 val rdd1 = sc.textFile(args(0)).map(_.split("\t")).filter(_.length==6) 18 val rdd2=rdd1.map(x=>(x(1),1)).reduceByKey(_+_).map(x=>(x._2,x._1)).sortByKey(false).map(x=>(x._2,x._1)) 19 rdd2.saveAsTextFile(args(1)) 20 sc.stop() 21 } 22 }

 

 

2.2.2 編譯代碼

代碼在運行以前須要進行編譯,能夠點擊菜單Build->Make Project或者Ctrl+F9對代碼進行編譯,編譯結果會在Event Log進行提示,若是出現異常能夠根據提示進行修改

 

 

2.2.3 運行環境配置

SogouResult首次運行或點擊菜單Run->Edit Configurations打開"運行/調試 配置界面"

 

 

運行SogouResult時須要輸入搜狗日誌文件路徑和輸出結果路徑兩個參數,須要注意的是HDFS的路徑參數路徑須要全路徑,不然運行會報錯:

  • 搜狗日誌文件路徑:使用上節上傳的搜狗查詢日誌文件hdfs://hadoop1:9000/sogou/SogouQ1.txt
  • 輸出結果路徑:hdfs://hadoop1:9000/class3/output2

 

 

2.2.4 運行結果查看

啓動Spark集羣,點擊菜單Run->Run或者Shift+F10運行SogouResult,在運行結果窗口能夠運行狀況。固然了若是須要觀察程序運行的詳細過程,能夠加入斷點,使用調試模式根據程序運行過程。

 

 

使用以下命令查看運行結果,該結果和上節運行的結果一致

hadoop fs -ls /class3/output2 

hadoop fs -cat /class3/output2/part-00000 | less

 

2.3  例子2:打包運行

上個例子使用了IDEA直接運行結果,在該例子中將使用IDEA打包程序進行執行

2.3.1 編寫代碼

在class3包中添加Join對象文件,具體代碼以下:

 

 1 package class3 2 3 import org.apache.spark.SparkContext._ 4 import org.apache.spark.{SparkConf, SparkContext} 5 6 object Join{ 7 def main(args: Array[String]) { 8 if (args.length == 0) { 9 System.err.println("Usage: Join <file1> <file2>") 10 System.exit(1) 11 } 12 13 val conf = new SparkConf().setAppName("Join").setMaster("local") 14 val sc = new SparkContext(conf) 15 16 val format = new java.text.SimpleDateFormat("yyyy-MM-dd") 17 case class Register (d: java.util.Date, uuid: String, cust_id: String, lat: Float,lng: Float) 18 case class Click (d: java.util.Date, uuid: String, landing_page: Int) 19 val reg = sc.textFile(args(0)).map(_.split("\t")).map(r => (r(1), Register(format.parse(r(0)), r(1), r(2), r(3).toFloat, r(4).toFloat))) 20 val clk = sc.textFile(args(1)).map(_.split("\t")).map(c => (c(1), Click(format.parse(c(0)), c(1), c(2).trim.toInt))) 21 reg.join(clk).take(2).foreach(println) 22 23 sc.stop() 24 } 25 }

 

 

2.3.2 生成打包文件

第一步   配置打包信息

在項目結構界面中選擇"Artifacts",在右邊操做界面選擇綠色"+"號,選擇添加JAR包的"From modules with dependencies"方式,出現以下界面,在該界面中選擇主函數入口爲Join:

 

 

第二步   填寫該JAR包名稱和調整輸出內容

【注意】的是默認狀況下"Output Layout"會附帶Scala相關的類包,因爲運行環境已經有Scala相關類包,因此在這裏去除這些包只保留項目的輸出內容

 

 

第三步   輸出打包文件

點擊菜單Build->Build Artifacts,彈出選擇動做,選擇Build或者Rebuild動做

 

 

第四步   複製打包文件到Spark根目錄下

cd /home/hadoop/IdeaProjects/out/artifacts/class3 cp LearnSpark.jar /app/hadoop/spark-1.1.0/ ls /app/hadoop/spark-1.1.0/

 

 

2.3.3 運行查看結果

經過以下命令調用打包中的Join方法,運行結果以下:

cd /app/hadoop/spark-1.1.0 bin/spark-submit --master spark://hadoop1:7077 --class class3.Join --executor-memory 1g LearnSpark.jar hdfs://hadoop1:9000/class3/join/reg.tsv hdfs://hadoop1:9000/class3/join/clk.tsv

 

 

 

3問題解決

3.1 出現"*** is already defined as object ***"錯誤

編寫好SogouResult後進行編譯,出現"Sogou is already as object SogouResult"的錯誤,

 

 

出現這個錯誤極可能不是程序代碼的問題,極可能是使用Scala JDK版本問題,做者在使用scala-2.11.4遇到該問題,換成scala-2.10.4後從新編譯該問題獲得解決,須要檢查兩個地方配置:Libraries和Global Libraries分別修改成scala-2.10.4

 

相關文章
相關標籤/搜索