天天看點

《深入了解Spark:核心思想與源碼分析》——1.2節Spark初體驗

本節書摘來自華章社群《深入了解spark:核心思想與源碼分析》一書中的第1章,第1.2節spark初體驗,作者耿嘉安,更多章節内容可以通路雲栖社群“華章社群”公衆号檢視

1.2 spark初體驗

本節通過spark的基本使用,讓讀者對spark能有初步的認識,便于引導讀者逐漸深入學習。

1.2.1 運作spark-shell

要運作spark-shell,需要先對spark進行配置。

1)進入spark的conf檔案夾:

cd ~/install/spark-1.2.0-bin-hadoop1/conf

2)複制一份spark-env.sh.template,命名為spark-env.sh,對它進行編輯,指令如下:

cp spark-env.sh.template spark-env.sh

vim spark-env.sh

3)添加如下配置:

export spark_master_ip=127.0.0.1

export spark_local_ip=127.0.0.1

4)啟動spark-shell:

cd ~/install/spark-1.2.0-bin-hadoop1/bin

./spark-shell

最後我們會看到spark啟動的過程,如圖1-3所示。

《深入了解Spark:核心思想與源碼分析》——1.2節Spark初體驗

從以上啟動日志中我們可以看到sparkenv、mapoutputtracker、blockmanagermaster、diskblockmanager、memorystore、httpfileserver、sparkui等資訊。它們是做什麼的?此處望文生義即可,具體内容将在後邊的章節詳細講解。

1.2.2 執行word count

這一節,我們通過word count這個耳熟能詳的例子來感受下spark任務的執行過程。啟動spark-shell後,會打開scala指令行,然後按照以下步驟輸入腳本。

1)輸入val lines = sc.textfile("../readme.md", 2),執行結果如圖1-4所示。

《深入了解Spark:核心思想與源碼分析》——1.2節Spark初體驗
《深入了解Spark:核心思想與源碼分析》——1.2節Spark初體驗
《深入了解Spark:核心思想與源碼分析》——1.2節Spark初體驗

5)輸入counts.foreach(println),任務執行過程如圖1-8和圖1-9所示。輸出結果如圖1-10所示。

《深入了解Spark:核心思想與源碼分析》——1.2節Spark初體驗
《深入了解Spark:核心思想與源碼分析》——1.2節Spark初體驗

在這些輸出日志中,我們先是看到spark中任務的送出與執行過程,然後看到單詞計數的輸出結果,最後列印一些任務結束的日志資訊。有關任務的執行分析,筆者将在第5章中展開。

1.2.3 剖析spark-shell

通過word count在spark-shell中執行的過程,我們想看看spark-shell做了什麼。spark-shell中有以下一段腳本,見代碼清單1-1。

代碼清單1-1 spark-shell中的一段腳本

讀到這裡,應該知道spark啟動了以sparksubmit為主類的jvm程序。

為便于在本地對spark程序使用遠端監控,給spark-class腳本追加以下jmx配置:

在本地打開jvisualvm,添加遠端主機,如圖1-11所示。

右擊已添加的遠端主機,添加jmx連接配接,如圖1-12所示。

單擊右側的“線程”頁籤,選擇main線程,然後單擊“線程dump”按鈕,如圖1-13所示。

從dump的内容中找到線程main的資訊,如代碼清單1-3所示。

《深入了解Spark:核心思想與源碼分析》——1.2節Spark初體驗

代碼清單1-3 main線程dump資訊

這裡最終使用sparkconf和sparkcontext來完成初始化,具體内容将在第3章講解。代碼分析中涉及的repl主要用于與spark實時互動。