SparkSQL & Spark on Hive & Hive on Spark


 

剛開始接觸Spark被Hive在Spark中的作用搞得雲里霧里,這里簡要介紹下,備忘。

參考:https://blog.csdn.net/zuochang_liu/article/details/82292076

SparkSQL:是一個完全不依賴Hive的SQL引擎。

Spark On Hive

通過sparksql,加載hive的配置文件,獲取到hive的元數據信息;spark sql獲取到hive的元數據信息之后就可以拿到hive的所有表的數據;接下來就可以通過spark sql來操作hive表中的數據。也就是說僅僅是將Hive作為一個數據倉庫,並沒有用到Hive的SQL執行引擎的能力。代碼在內核代碼spark-hive_2.11工程中。

Hive On Spark

是把hive查詢從mapreduce 的mr (hadoop 計算引擎)操作替換為spark rdd 操作;將HQL翻譯成分布式可以執行的Spark程序。Hive和SparkSQL都不負責計算。也就是一個為Spark計算框架定制的Hive。和Hive基本上沒有關系,耦合之處為:HQL、元數據庫、UDF、序列化、反序列化機制。它是一個單獨的工程,和Spark內核代碼獨立,但是Spark依賴於Hive On Spark, Spark中的某些模塊執行過程中會調用Hive on Spark. 例如Spark JDBCServer:

Hive原來的計算模型是MR,頻繁操作磁盤(將中間結果寫入到HDFS中)效率低。而Hive On Spark中使用了RDD(Dataframe),然后運行在spark集群上面。元數據保存在mysql中,其中包含了hive表的描述信息,描述了那些數據庫、表,以及表有多少列,每一列都是什么類型,還要描述表的數據保存在HDFS的什么位置。

Hive元數據庫的功能

  hive的元數據(metadata)建立了一種映射關系,執行HQL是,先到Mysql元數據庫中查找描述信息,然后根據描述信息生成任務,然后將任務下發到spark集群中執行。hive on spark使用的僅僅是hive的標准和規范,不需要有hive數據庫一樣可以使用。要使用Hive的標准需要將hive的配置文件放在spark的conf目錄下。沒有安裝Hive組件也沒有影響。

要在Spark-Submit進程中使用開啟spark對hive的支持:

val session = SparkSession.builder()
  .master("local")
  .appName("xx")
  .enableHiveSupport() 
  .getOrCreate()

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM