① 什麼是Spark,如何使用Spark進行數據分析
Spark是UC Berkeley AMP lab (加州大學伯克利分校的AMP實驗室)所開源的類Hadoop MapRece的通用並行框架,Spark,擁有Hadoop MapRece所具有的優點;但不同於MapRece的是Job中間輸出結果可以保存在內存中,從而不再需要讀寫HDFS,因此Spark能更好地適用於數據挖掘與機器學習等需要迭代的MapRece的演算法
數據科學家為了回答一個問題或進行深入研究,會使用相關的技術分析數據。通常,他們的工作包含特殊的分析,所以他們使用互動式shell,以使得他們能在最短的時間內看到查詢結果和代碼片段。Spark的速度和簡單的API介面很好地符合這個目標,它的內建庫意味著很多演算法可以隨時使用。
Spark通過若干組件支持不同的數據科學任務。Spark shell使得用Python或Scala進行互動式數據分析變得簡單。Spark SQL也有一個獨立的SQL shell,可以用SQL進行數據分析,也可以在Spark程序中或Spark shell中使用Spark SQL。MLlib庫支持機器學習和數據分析。而且,支持調用外部的MATLAB或R語言編寫的程序。Spark使得數據科學家可以用R或Pandas等工具處理包含大量數據的問題。
② Spark 應用場景示例
使用IDE新建Scala 或 Java 工程,確保項目結構符合 Maven 推薦的項目結構。
以IDEA為例:
從靜態數據源(Parquet,Json,CVS,JDBC,Hive,RDDs)讀取數據,運行分析
再 resource 目錄構建一個 Json 數據源 data.json :
新建 Static Data Spark Demo.scala :
以上,我們擬對數據進行展示和基本的篩選工作(age > 10)
開啟調試,可以看到 log 中Spark執行了 3 個 Job ,並已經正確輸出了預期的結果。
接下來就可以根據需求進行更復雜的數據處理操作
從Kafka、Flume、S3/HDFS、kinesis、Twitter等數據源讀取數據進行實時分析
例:從 Kafka 讀取流數據,進行實時處理。
由於讀取Kafka流式數據,我們需要模擬kafka流。
參考Kafka文檔
核心文件 KafkaApplication.java
application.yml
以上,我們向Kafka伺服器的 topic 為 saprk 上不斷發送數據以模擬數據流。
現在,啟動程序開始模擬數據流
復用上例中的目錄結構,也可以新建一個 sbt 項目。
新建文件 StreamDataSparkDemo.scala
以上,我們從Kafaka伺服器讀取一個 topic 為 spark 的流,然後進行展示。
運行程序,輸出如下:
取出數據之後,就可以用於實時分析了。
假設topic spark 為新注冊的用戶信息,我們可以統計新用戶的每實時注冊量,以及階段內新注冊用戶性別比例。
在 StreamDataSparkDemo.scala 中修改
<未完待續...>
③ 科普Spark,Spark是什麼,如何使用Spark
科普Spark,Spark是什麼,如何使用Spark
1.Spark基於什麼演算法的分布式計算(很簡單)
2.Spark與MapRece不同在什麼地方
3.Spark為什麼比Hadoop靈活
4.Spark局限是什麼
5.什麼情況下適合使用Spark
Spark與Hadoop的對比
Spark的中間數據放到內存中,對於迭代運算效率更高。
Spark更適合於迭代運算比較多的ML和DM運算。因為在Spark裡面,有RDD的抽象概念。
Spark比Hadoop更通用
Spark提供的數據集操作類型有很多種,不像Hadoop只提供了Map和Rece兩種操作。比如map, filter, flatMap, sample, groupByKey, receByKey, union, join, cogroup, mapValues, sort,partionBy等多種操作類型,Spark把這些操作稱為Transformations。同時還提供Count, collect, rece, lookup, save等多種actions操作。
這些多種多樣的數據集操作類型,給給開發上層應用的用戶提供了方便。各個處理節點之間的通信模型不再像Hadoop那樣就是唯一的Data Shuffle一種模式。用戶可以命名,物化,控制中間結果的存儲、分區等。可以說編程模型比Hadoop更靈活。
不過由於RDD的特性,Spark不適用那種非同步細粒度更新狀態的應用,例如web服務的存儲或者是增量的web爬蟲和索引。就是對於那種增量修改的應用模型不適合。
容錯性
在分布式數據集計算時通過checkpoint來實現容錯,而checkpoint有兩種方式,一個是checkpoint data,一個是logging the updates。用戶可以控制採用哪種方式來實現容錯。
可用性
Spark通過提供豐富的Scala, Java,Python API及互動式Shell來提高可用性。
Spark與Hadoop的結合
Spark可以直接對HDFS進行數據的讀寫,同樣支持Spark on YARN。Spark可以與MapRece運行於同集群中,共享存儲資源與計算,數據倉庫Shark實現上借用Hive,幾乎與Hive完全兼容。
Spark的適用場景
Spark是基於內存的迭代計算框架,適用於需要多次操作特定數據集的應用場合。需要反復操作的次數越多,所需讀取的數據量越大,受益越大,數據量小但是計算密集度較大的場合,受益就相對較小(大資料庫架構中這是是否考慮使用Spark的重要因素)
由於RDD的特性,Spark不適用那種非同步細粒度更新狀態的應用,例如web服務的存儲或者是增量的web爬蟲和索引。就是對於那種增量修改的應用模型不適合。總的來說Spark的適用面比較廣泛且比較通用。
運行模式
本地模式
Standalone模式
Mesoes模式
yarn模式
Spark生態系統
Shark ( Hive on Spark): Shark基本上就是在Spark的框架基礎上提供和Hive一樣的H iveQL命令介面,為了最大程度的保持和Hive的兼容性,Shark使用了Hive的API來實現query Parsing和 Logic Plan generation,最後的PhysicalPlan execution階段用Spark代替Hadoop MapRece。通過配置Shark參數,Shark可以自動在內存中緩存特定的RDD,實現數據重用,進而加快特定數據集的檢索。同時,Shark通過UDF用戶自定義函數實現特定的數據分析學習演算法,使得SQL數據查詢和運算分析能結合在一起,最大化RDD的重復使用。
Spark streaming: 構建在Spark上處理Stream數據的框架,基本的原理是將Stream數據分成小的時間片斷(幾秒),以類似batch批量處理的方式來處理這小部分數據。Spark Streaming構建在Spark上,一方面是因為Spark的低延遲執行引擎(100ms+)可以用於實時計算,另一方面相比基於Record的其它處理框架(如Storm),RDD數據集更容易做高效的容錯處理。此外小批量處理的方式使得它可以同時兼容批量和實時數據處理的邏輯和演算法。方便了一些需要歷史數據和實時數據聯合分析的特定應用場合。
Bagel: Pregel on Spark,可以用Spark進行圖計算,這是個非常有用的小項目。Bagel自帶了一個例子,實現了Google的PageRank演算法。
End.