1. 程式人生 > >第74課:Hive on Spark大揭祕 完整版

第74課:Hive on Spark大揭祕 完整版

內容:

    1.Hive On Spark內幕
    2.Hive on Spark實戰

一、Hive On Spark內幕


    1.Hive on spark 是hive 的一個子專案,它是指不通過mapReduce 作為唯一的查詢引擎,而是將spark 作為底層的查詢引擎。hive on spark 只適用於hive 在可預見的未來,很有可能Hive預設的底層引擎就從MapReduce 切換到Spark 了 。使用於將原來有的Hive 資料倉庫以及資料統計分析替換為spark 引擎,作為全公司通用的大資料統計分析引擎。
    2. 將Hive 表作為SparkRDD 來進行操作 
    3. 使用hive 原語:對於一些針對於RDD的操作,比如groupByKey,sortedByKey等不使用Spark的transformation操作和原語。如果那樣的話,那麼就需要重新實現一套Hive 的原語,而且如果Hive 增加了新功能,那麼又要實現新的spark 原語。因此選擇將hive 的原語包裝為針對於RDD的操作即可。 
    4.新的執行計劃生成機制:使用SparkCompiler 將邏輯執行計劃,即可Operator Tree ,轉換為Task Tree ,提交Spark Task 給 Spark 進行執行。sparkTask 包裝了DAG ,DAG 包裝為SparkWork,SparkTask 根據SparkWork 表示的DAG 計算。 
    5. SparkContext生命週期:hive on Spark會為每個使用者建立自己的會話,比如說執行一次Sql建立一個SparkContext,但是Spark不允許在一個JVM內穿概念多個SparkContext。因此需要在單獨的JVM中啟動每個會話的Sparkcontext,然後通過RPC與遠端JVM中的Spark Context進行通訊。 
    6.本地和遠端執行模式:Hive on spark 提供兩種執行模式,本地和遠端。如果將SparkMaster這是為local,比如set.spark.master=local 那麼就是本地模式,sparkContext 與客戶端執行在一個JVM中。否則如果將sparkMaster設定為master的地址,那麼就是遠端模式,sparkcontext會在遠端JVM中啟動,遠端模式下每個使用者session 都會建立一個sparkClient,sparkClient啟動RemoveDriver,RemoveDriver負責建立SparkContext。
    7.Map join Spark Sql預設對join是支援使用BroatCast機制,將小表廣播到各個節點上,以進行join,但是問題是這會driver和worker帶來很大的記憶體開銷。因為廣播的資料要一直報訊在Driver中,所以目前採取的措施是類似於MapReduce的Distribuesd cache機制,即提高HDFS replication factor 的賦值因子,讓資料在每一個計算節點上都有一個備份,從而可以在本地進行讀取資料。 
    8.cache table:對於某些需要對一張表執行多次操作的場景,hive on spark 內部做了優化,即將要多次操作的表cache 到記憶體中以便於提升效能。但是這裡要注意並不是所有的情況都會自動進行cache 所以說hive on spark 很有很多需要完善的地方。

二、Hive on Spark實戰

由於版本問題,測試沒有成功