自己寫的Spark入門實戰教程,適合於有一定hadoop和資料分析經驗的朋友。
Spark簡介
Spark是一個開源的計算框架平臺,使用該平臺,資料分析程式可自動分發到叢集中的不同機器中,以解決大規模資料快速計算的問題,同時它還向上提供一個優雅的程式設計正規化,使得資料分析人員透過編寫類似於本機的資料分析程式即可實現叢集平行計算。
Spark專案由多個緊密整合的元件組成。核心是Spark Core元件,它實現了Spark的基本功能,包括:任務排程、記憶體管理、錯誤恢復、與儲存系統互動等模組,特別的,Spark Core還定義了彈性分散式資料集(RDD)的API,是Spark記憶體計算與平行計算的主要程式設計抽象。
在Spark Core上有一系列軟體棧,用於滿足了各種不同資料分析計算任務需求,包括連線關係型資料庫或Hadoop Hive的SQL/HQL的查詢元件Spark SQL,對實時資料進行流式計算的元件Spark Steaming,支援常見機器學習演算法平行計算元件MLlib,支援並行圖計算元件GraphX等。
為了進一步支援在數千個計算節點上的伸縮計算,Spark Core底層支援在各種叢集管理器上執行,包括Hadoop YARN、Apache Mesos,或者Spark自帶的Standalone獨立排程器。
Spark部署
安裝Spark比較簡單,只要在機器上配置好最新版JAVA環境,下載編譯好的Spark軟體包後即可在本地執行。當然,也可以根據具體環境,使用Maven編譯需要的Spark功能。
Spark部署有兩種方式,一是本地部署,二是叢集部署。前者只需啟動本地的互動式環境spark-shell.sh指令碼即可,常用在本機快速程式測試,後者的應用場景更多些,具體根據叢集環境不同,可部署在簡易的Spark獨立排程叢集上、部署在Hadoop YARN叢集上、或部署在Apache Mesos上等。
其中,Spark自帶的獨立排程器是最簡單實現Spark叢集環境的一種方式,只需在多臺聯網計算機上安裝好Spark,然後在其中一臺啟動叢集管理器(透過start-master.sh指令碼),然後再在其他計算機上啟動工作節點(透過start-slave.sh指令碼),並連線到管理器上即可。
Spark程式設計
使用Spark程式設計,需要先在本機安裝好Spark環境,然後啟動Spark上下文管理器連線到本機(本地部署)或是叢集上的叢集管理器(叢集部署),再使用Spark提供的抽象介面程式設計即可。
支援Spark的原生語言是Scala,一種支援JVM的指令碼語言,可以避免其他語言在做資料轉化過程的效能或資訊丟失。但隨著Spark專案的不斷完善,使用Python和PySpark包、或者R和SparkR包進行Spark程式設計也都是不錯的選擇。
不論使用何種程式語言,使用Spark進行資料分析的關鍵在於掌握Spark抽象的程式設計正規化,其基本流程包括4步:
Spark程式設計正規化的本質是有向無環圖方式的惰性計算,即當使用上述方式進行程式設計後,Spark將自動將上述RDD和轉化運算元轉換為有向無環圖的資料工作流,只有當觸發執行運算元時,才按需進行資料工作流的計算。此外,為進一步提高計算效率,Spark預設將在記憶體中執行,並自動進行記憶體分配管理,當然分析人員也可根據需求透過persist()運算元將中間步驟資料顯式的將記憶體資料持久化到磁碟中,以方便除錯或複用。
在R環境下使用Spark例項
最新版的RStudio已經較完整的集成了Spark資料分析功能,可以在SparkR官方擴充套件介面基礎上更方便的使用Spark,主要需要安裝兩個包,分別是sparklyr和dplyr。其中,sparklyr包提供了更簡潔易用的Spark R程式設計介面,dplyr包提供了一個語法可擴充套件的資料操作介面,支援與主流SQL/NoSQL資料庫連線,同時使資料操作與資料集資料結構解耦合,並且和Spark原生運算元可基本對應。
若第一次執行,先在本機安裝必要的包和Spark環境:
之後執行下面的小例子,可以發現,除了需要初始化SparkContext、匯入RDD資料和匯出資料外,其他資料處理操作都與在本機做資料分析是一樣的。
自己寫的Spark入門實戰教程,適合於有一定hadoop和資料分析經驗的朋友。
Spark簡介
Spark是一個開源的計算框架平臺,使用該平臺,資料分析程式可自動分發到叢集中的不同機器中,以解決大規模資料快速計算的問題,同時它還向上提供一個優雅的程式設計正規化,使得資料分析人員透過編寫類似於本機的資料分析程式即可實現叢集平行計算。
Spark專案由多個緊密整合的元件組成。核心是Spark Core元件,它實現了Spark的基本功能,包括:任務排程、記憶體管理、錯誤恢復、與儲存系統互動等模組,特別的,Spark Core還定義了彈性分散式資料集(RDD)的API,是Spark記憶體計算與平行計算的主要程式設計抽象。
在Spark Core上有一系列軟體棧,用於滿足了各種不同資料分析計算任務需求,包括連線關係型資料庫或Hadoop Hive的SQL/HQL的查詢元件Spark SQL,對實時資料進行流式計算的元件Spark Steaming,支援常見機器學習演算法平行計算元件MLlib,支援並行圖計算元件GraphX等。
為了進一步支援在數千個計算節點上的伸縮計算,Spark Core底層支援在各種叢集管理器上執行,包括Hadoop YARN、Apache Mesos,或者Spark自帶的Standalone獨立排程器。
Spark部署
安裝Spark比較簡單,只要在機器上配置好最新版JAVA環境,下載編譯好的Spark軟體包後即可在本地執行。當然,也可以根據具體環境,使用Maven編譯需要的Spark功能。
Spark部署有兩種方式,一是本地部署,二是叢集部署。前者只需啟動本地的互動式環境spark-shell.sh指令碼即可,常用在本機快速程式測試,後者的應用場景更多些,具體根據叢集環境不同,可部署在簡易的Spark獨立排程叢集上、部署在Hadoop YARN叢集上、或部署在Apache Mesos上等。
其中,Spark自帶的獨立排程器是最簡單實現Spark叢集環境的一種方式,只需在多臺聯網計算機上安裝好Spark,然後在其中一臺啟動叢集管理器(透過start-master.sh指令碼),然後再在其他計算機上啟動工作節點(透過start-slave.sh指令碼),並連線到管理器上即可。
Spark程式設計
使用Spark程式設計,需要先在本機安裝好Spark環境,然後啟動Spark上下文管理器連線到本機(本地部署)或是叢集上的叢集管理器(叢集部署),再使用Spark提供的抽象介面程式設計即可。
支援Spark的原生語言是Scala,一種支援JVM的指令碼語言,可以避免其他語言在做資料轉化過程的效能或資訊丟失。但隨著Spark專案的不斷完善,使用Python和PySpark包、或者R和SparkR包進行Spark程式設計也都是不錯的選擇。
不論使用何種程式語言,使用Spark進行資料分析的關鍵在於掌握Spark抽象的程式設計正規化,其基本流程包括4步:
初始化SparkContext。SparkContext即是Spark上下文管理器(也稱為驅動器程式),它主要負責向Spark工作節點上傳送指令並獲得計算結果,但資料分析人員無需關注具體細節,只需使用SparkContext介面程式設計即可。建立RDD。彈性分佈資料集RDD是Spark在多機進行平行計算的核心資料結構,因此使用Spark進行資料分析,首先需使用SparkContext將外部資料讀入到Spark叢集內。設計資料轉化操作。即操作的結果是返回一個新的RDD,即在圖計算中只是一箇中間節點。類比於Hadoop的Map()對映運算元,但又不僅於此,Spark還支援filter()過濾運算元、distinct()去重運算元、sample()取樣運算元,以及多個RDD集合的交差補並等集合操作。設計資料執行操作。即操作的結果向SparkContext返回結果,或者將結果寫入外部作業系統。類比於Hadoop的Reduce()運算元,按某函式操作兩個資料並返回一個同類型的資料,此外Spark還支援collect()直接返回結果運算元、count()計數運算元、take()/top()返回部分資料運算元、foreach()迭代計算運算元等操作。Spark程式設計正規化的本質是有向無環圖方式的惰性計算,即當使用上述方式進行程式設計後,Spark將自動將上述RDD和轉化運算元轉換為有向無環圖的資料工作流,只有當觸發執行運算元時,才按需進行資料工作流的計算。此外,為進一步提高計算效率,Spark預設將在記憶體中執行,並自動進行記憶體分配管理,當然分析人員也可根據需求透過persist()運算元將中間步驟資料顯式的將記憶體資料持久化到磁碟中,以方便除錯或複用。
在R環境下使用Spark例項
最新版的RStudio已經較完整的集成了Spark資料分析功能,可以在SparkR官方擴充套件介面基礎上更方便的使用Spark,主要需要安裝兩個包,分別是sparklyr和dplyr。其中,sparklyr包提供了更簡潔易用的Spark R程式設計介面,dplyr包提供了一個語法可擴充套件的資料操作介面,支援與主流SQL/NoSQL資料庫連線,同時使資料操作與資料集資料結構解耦合,並且和Spark原生運算元可基本對應。
若第一次執行,先在本機安裝必要的包和Spark環境:
之後執行下面的小例子,可以發現,除了需要初始化SparkContext、匯入RDD資料和匯出資料外,其他資料處理操作都與在本機做資料分析是一樣的。