回覆列表
-
1 # 愛可生雲資料庫
-
2 # 加米穀大資料
有很多學習Spark的程式設計師普遍認為Spark必然會替代Hive成為新的一代大資料倉庫標準。同時,培訓市場也出現了Hive已經落後,學習大資料只要學習Spark相關言論,這類說法和實際情況並不相符。
在實際生產環境中已經形成了離線以Hive為主,Spark為輔, 實時處理用Flink的大資料架構體系及Impala, Es,Kylin等應用查詢引擎。以下對資料倉庫的幾個重要特徵做了對比:
Spark替代Hive成為資料倉庫的首選時間會比較漫長,而且隨著Hive的sql執行引擎逐步最佳化後,Spark的優勢會越來越低。
在已有的 MySQL 伺服器之上使用 Apache Spark (無需將資料匯出到 Spark 或者 Hadoop 平臺上),這樣至少可以提升 10 倍的查詢效能。使用多個 MySQL 伺服器(複製或者 Percona XtraDB Cluster)可以讓我們在某些查詢上得到額外的效能提升。你也可以使用 Spark 的快取功能來快取整個 MySQL 查詢結果表。
思路很簡單:Spark 可以透過 JDBC 讀取 MySQL 上的資料,也可以執行 SQL 查詢,因此我們可以直接連線到 MySQL 並執行查詢。那麼為什麼速度會快呢?對一些需要執行很長時間的查詢(如報表或者BI),由於 Spark 是一個大規模並行系統,因此查詢會非常的快。MySQL 只能為每一個查詢分配一個 CPU 核來處理,而 Spark 可以使用所有叢集節點的所有核。在下面的例子中,我們會在 Spark 中執行 MySQL 查詢,這個查詢速度比直接在 MySQL 上執行速度要快 5 到 10 倍。
另外,Spark 可以增加“叢集”級別的並行機制,在使用 MySQL 複製或者 Percona XtraDB Cluster 的情況下,Spark 可以把查詢變成一組更小的查詢(有點像使用了分割槽表時可以在每個分割槽都執行一個查詢),然後在多個 Percona XtraDB Cluster 節點的多個從伺服器上並行的執行這些小查詢。最後它會使用 map/reduce 方式將每個節點返回的結果聚合在一起行程完整的結果。
這篇文章跟我之前文章 “Airlines On-Time Performance” 所使用的資料庫是相同的。瓦迪姆建立了一些指令碼可以方便的下載這些資料並上傳到 MySQL 資料庫。指令碼的下載地址請看 這裡。同時我們這次使用的是 2016年7月26日釋出的 Apache Spark 2.0。