1. 程式人生 > ><Spark快速大數據分析>讀書筆記

<Spark快速大數據分析>讀書筆記

磁盤 外部 闖關 計算 apache 忽略 分布 ado format

<Spark快速大數據分析>主要使用java, scala和python進行講解,因博主暫未對java和scala展開了解,所以後續總結只通過python進行展示。

Part 1 Spark簡介

  Spark的定位:是一個用來實現快速通用的集群計算平臺。

  Spark與Hadoop的聯系:Spark擴展了mapreduce計算模型,且支持更多的計算模式,包括交互式查詢流處理。

  Spark的主要特點:能夠在內存中進行計算,因而更快。即便是在磁盤上進行復雜的計算,Spark依然比mapreduce更高效。

  Spark主要包含了如下圖所示的組件:

  技術分享圖片

    1.Spark Core

:實現了Spark的基本功能,包含任務調度、內存管理、錯誤恢復與存儲系統交互等模塊,還包含了對彈性分布式數據集(Resilient Distributed Dataset)的API定義。

    2.Spark SQL:是Spark操作結構化數據的程序包,通過Spark SQL可以使用SQL或者Apache Hive版本的SQL方言(HQL)來查詢數據。

    3.Spark Streaming:是Spark提供的對實時數據進行流式計算的組件,如生產環境中的網頁服務器日誌。

    4.MLlib:提供機器學習功能的程序庫。

    5.GraphX:操作圖的程序庫,可以進行並行的圖計算。

    6.集群管理器

:為了實現在多個計算節點上高效得伸縮計算,Spark支持在各種集群管理器上運行,包括Hadoop YARN、Apache Mesos以及自帶的簡易調度器,獨立調度器,第七章部分會詳細探討管理器的差異以及如何選擇合適的集群管理器。

Part 2 核心概念與基本操作

  彈性分布式數據集(Resilient Distributed Dataset, 簡稱RDD):RDD的核心特性是分布式不可變

  Spark中對數據的所有操作不外乎:

    • 創建RDD
    • 轉化已有RDD,即轉化操作(transformation):由一個RDD生成一個新的RDD
    • 調用RDD操作進行求值,即行動操作(action):會對一個RDD計算出一個結果

  Spark會自動將RDD中的數據分發到集群上,並將操作並行化執行。

  惰性計算的特性:Spark會惰性計算RDD,意思是只有在一個RDD第一次執行行動操作時,才會真正計算

  默認情況下,Spark的RDD會在每次對他們進行行動操作時重新計算,如果重用同一個RDD,可以使用RDD.persist()讓Spark把這個RDD緩存下來。舉例來說,有一個原始RDD1,由RDD1生成一個RDD2,再由RDD2生成了RDD3,這時如果需要用RDD3進行兩個行動操作,默認情況下,系統兩次都會從RDD1開始重新計算RDD3,再進行行動操作。如果在RDD3生成後,使用RDD3.persist(),則兩次行動操作就會忽略RDD1到RDD3的計算過程,從而省略了1次RDD3的生成過程。類似於闖關遊戲中存儲進度,下次從存儲位置繼續玩起的動作。

  每一個Spark應用都由一個驅動器程序(driver program)來發起集群上的各種並行操作,驅動器程序通過一個SparkContext對象來訪問Spark,使用python shell啟動時會自動創建一個SparkContext對象,默認變量名為sc

  創建RDD的方式:

1 #1.通過已有集合生成,用於原型開發和測試
2 lines = sc.parallelize(["pandas", "i love pandas"])
1 #2.從外部存儲中讀取數據
2 lines = sc.textFile("/path/to/README.md")

  轉化操作:

#filter操作篩選出RDD1中滿足條件的元素構成新的RDD,以下意為選出大於5的元素構成新RDD
newRDD = oldRDD.filter(lambda x: x > 5)
#map操作對RDD1中的每個元素進行函數操作後,將結果構成新的RDD,以下意為對RDD中的每個元素進行平方構成新RDD
newRDD = oldRDD.map(lambda x: x ** 2)
1 #flatMap操作和map操作類似,但是如果操作後的結果為一個列表,則取出列表中的元素構成新RDD,而非將列表構成新RDD
2 newRDD = oldRDD.flatMap(lambda x: x.split(" "))

  其中map()和flatMap()操作的區別如下圖所示:

  技術分享圖片

  

<Spark快速大數據分析>讀書筆記