Hive On Spark概述

Hive現有支持的執行引擎有mr和tez,默認的執行引擎是mr,Hive On Spark的目的是添加一個spark的執行引擎,讓hive能跑在spark之上;sql


在執行hive ql腳本以前指定執行引擎、spark.home、spark.mastersession

set hive.execution.engine=spark;
set spark.home=/home/spark/app/spark-1.3.0-bin-spark-without-hive;
set spark.master=yarn;

 

Hive On Spark與Spark SQL/Shark的區別app

Spark SQL/Shark:優化

一、將sql語義翻譯成Spark RDD在Spark上執行;spa

二、Spark SQL是基於hive snapshot版本,雖然可以兼容hive,可是使用的版本早於當前hive的release版本,最新的一些特性則沒法使用;翻譯

三、Spark SQL使用Spark的transformation和action替換Hive sql的構建; 將會丟失一些hive自身構建實現的特性;code

Hive on Spark:orm

一、將hql語義翻譯成MapReduce在Spark上執行;對象

二、Hive On Spark則是與hive共同演化;blog

三、Hive On Spark使用的是Hive的構建,將包含Hive全部的特性,Spark僅僅是一個通用的執行引擎而已;

爲Hive添加一個spark執行引擎涉及到以下方面

一、查詢計劃

將Hive的邏輯執行計劃進一步翻譯成Spark可以執行的Spark計劃;

二、查詢執行

獲得的Spark計劃真正在Spark集羣中運行;

三、監控、計數器、統計等

 

查詢計劃

當hive接收到一個sql語句時,使用Hive的語法解析器解析成一個操做計劃;

對於On Spark引擎,引入了SparkComplier,相似於MapReduceCompiler和TezCompiler;

SparkComplier:

  將從Hive中獲得的邏輯執行計劃轉成在Spark上能運行的計劃;

  在產生Spark計劃的時候作一些物理執行計劃的優化;

SparkTask:在Spark集羣中執行的一個job

SparkWork:SparkTask的計劃,能夠經過explain查看

SparkComplier: 將Hive的執行計劃轉化成一個SparkWork

 

查詢執行

SparkTask.execute()在SparkWork以外產出rdd以及相應的方法,經過Spark Client提交給Spark集羣執行;一旦SparkTask提交給了Spark集羣,Spark Client將監控job的執行狀況;

經過SparkJobMonitor來處理打印任務的執行狀態和最終的執行結果;Spark Job的提交是經過SparkContext對象完成的;當SparkTask被hive執行時,就會爲當前用戶session建立一個SparkContext

Hive表相關的RDD將會被建立;MapFunction、ReduceFunction將會被SparkWork建立而且做用在RDD上;當在RDD上執行foreach方法時該RDD上的job就會被觸發執行。

 

監控、計數器、統計等

監控

Spark在每一個SparkContext運行時提供了WebUI,當時該UI中只能展示出運行時的Application信息;

爲了在Application運行完後也能從新渲染UI信息,須要在啓動Application以前設置spark.eventLog.enabled爲true;

Standalone模式運行時能夠經過WebUI展現,YARN/Mesos模式運行時,能夠經過Spark History Server來展示;

計數器/統計

在Spark中提供了accumulator實現計數器,使用Metrics實現統計;

相關文章
相關標籤/搜索