Spark源碼倒騰

本文演示spark源碼在idea編輯器上編譯和提交任務

1、從網站上下載spark源碼,在idea中 點擊 VCS->CheckOut form Version Control->Git 把代碼下載到本地

        https://github.com/apache/spark

       

 


 2、爲了能讓本地編譯更快一些,設置父pom.xml 中加上oschina的maven源

  

<repository>
	<id>nexus</id>
        <name>local private nexus</name>
        <url>http://maven.oschina.net/content/groups/public/</url>
        <releases>
	 <enabled>true</enabled>
	</releases>
	<snapshots>
	    <enabled>false</enabled>
	 </snapshots>
    </repository>

 

 

3、執行 mvn clean idea:idea 順便說一下本地的mvn環境要在3.3.x以上

4、打開idea,點擊菜單 File->Open-> 在彈出窗口中找spark源碼然後打開

5、找到Master.scala然後點擊運行;

  

 然後在瀏覽器中查看是否運行成功



 6、接着運行worker,找到Worker.scala,右鍵運行,但是這裏需要做點設置,在Program arguments:加上參數 --webui-port 8081 spark://192.168.3.107:7077  (注:有時候localhost不是很管用,要看系統的設置,最好使用ip)
 

 這時候刷新瀏覽器會發現worker 已經被註冊進來了



 8、我們寫個spark程序提交執行試試看,新建一個scala maven工程,用於統計用戶信息,工程下載見附件,核心代碼如下:

package com.zhanjun.spark.learn

import org.apache.spark.{SparkConf, SparkContext}

object UserInfoCount {
  def main(args: Array[String]) {
    if (args.length == 0) {
      System.err.println("Usage: UserInfoCount <file1> <file2>")
      System.exit(1)
    }
    val conf = new SparkConf().setAppName("UserInfoCount")
    val sc = new SparkContext(conf)
    // 讀取數據源,以“,”號分隔數據,過濾每行數據爲8個字段
    val userInfoRDD = sc.textFile(args(0)).map(_.split(",")).filter(_.length == 8)
    // 按照地區進行統計,其中地區字段爲第4個字段,合計後按照統計量進行排序
    val blockCountRDD = userInfoRDD.map(x => (x(3), 1)).reduceByKey(_ + _).map(x => (x._2, x._1)).sortByKey(false).map(x => (x._2, x._1))
    // 按手機號照前三位號碼進行統計,其中手機號爲第3個字段,合計後按照手機號碼前三位數字排序(從小到大)
    val phoneCountRDD = userInfoRDD.map(x => (x(2).substring(0, 3), 1)).reduceByKey(_ + _).sortByKey(true)
    // 對兩部分數據進行合併,然後輸出到HDFS
    val unionRDD = blockCountRDD.union(phoneCountRDD)
    //repartition設置RDD中partition數量
    unionRDD.repartition(1).saveAsTextFile(args(1))
    sc.stop()
  }
}

 通過 mvn clean package 對工程打包,把users_txt.zip解壓到相應的目錄中。

 

9、我們回到spark源碼的idea,通過idea提交job試試 找到org.apache.spark.deploy.SparkSubmit,右鍵運行,然後設置對應的參數

 

--class
com.zhanjun.spark.learn.UserInfoCount
--master
local
/home/admin/workspace/spark-work/UserInfoCount/target/UserInfoCount-1.0-SNAPSHOT.jar
file:///home/admin/temp/users.txt
file:///home/admin/temp/output/

 

 

我們可以發現 /home/admin/temp/output目錄下面會生成對應的計算結果.



 

過程中使用了spark官網下載的源碼 在sparksubmit時一直報錯貌似是akka的初始化失敗,後然從git上下載代碼一切沒有問題

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章