1. 程式人生 > >編寫Spark程式並提交到叢集上執行

編寫Spark程式並提交到叢集上執行

編寫Spark應用程式

使用SCALA IDE,新建一個SCALA PROJECT,在專案下新建一個lib的資料夾,把spark的JAR包放進去,並且build path裡新增一下JAR包引用,然後新增一個SCALA類SparkRowCount,這個Spark應用程式的功能是計算資料的總行數,程式碼如下

import org.apache.spark.SparkConf;
import org.apache.spark.SparkContext;

object SparkRowCount {

  def main(args: Array[String]) {

    if (args.length < 1
) { println("Usage: please specify the file path"); System.exit(1); } val conf = new SparkConf().setAppName("row count"); val sc = new SparkContext(conf); val textFile = sc.textFile(args(0)); val rowNum = textFile.count(); println("rowNum: " + rowNum); } }

整個專案的結構如下圖:
Spark應用程式結構

匯出JAR

右擊專案名稱,選擇export,再選擇JAR File,然後next>,如下圖:
這裡寫圖片描述
做個簡單的配置,然後一路next,最後finish,如下圖:
這裡寫圖片描述

把JAR上傳到HDFS上

hadoop@master:~$ hadoop-2.4.0/bin/hadoop fs -put sparkrowcount.jar  /jar/

其中,/jar/是HDFS上的根目錄下的jar資料夾。

上傳測試資料集

對於測試資料集,可以隨便找個檔案上傳就好,因為只是統計檔案裡的行數,所以,不限檔案內容。

提交作業到Spark叢集

前提:hadoop spark都以開啟

hadoop@master
:~$ jps 3857 Master 8227 Jps 3555 ResourceManager 3155 NameNode 3382 SecondaryNameNode
./bin/spark-submit \
  --class <main-class> \
  --master <master-url> \
  --deploy-mode <deploy-mode> \
  --conf <key>=<value> \
  ... # other options
  <application-jar> \
  [application-arguments]

選項說明:
–class: 應用程式的入口 (例如SparkRowCount)
–master: 叢集的master的URL (例如 spark://master:7077,master是我的叢集中master的主機名)
–deploy-mode: driver的部署方式,cluster或client,預設為client (default: client) †
–conf: 指定Spark的配置,格式為 “key=value”,要有引號.
application-jar: 應用程式JAR的路徑,URL必須是在叢集中全域性可見的,例如,hdfs://或file://,例如我的是hdfs://master:9000/jar/sparkrowcount.jar.
application-arguments: 應用程式傳到主函式的引數

hadoop@master:~$ spark-1.6.0-bin-hadoop2.4/bin/spark-submit \
> --class SparkRowCount \
> --master spark://master:7077 \
> --deploy-mode cluster \
> hdfs://master:9000/jar/sparkrowcount.jar \
> hdfs://master:9000/test/data/knowledgeGraph/knowledgeGraph-100M.json

檢視進度和結果

可以通過spark的web頁面進行檢視,地址為:
http://master:8080/
在Completed Drivers裡,找到最上面這個,這個是最新執行的,然後點選進去:
這裡寫圖片描述
把頁面拉到最下面,找到Finished Drivers,點選檢視最上面這個的logs的stdout:
這裡寫圖片描述
然後,就可以看到程式的輸出結果,如下圖:
這裡寫圖片描述
其中,rowNum: 6480000就是程式的輸出結果。