Spark從入門到精通31:Spark SQL:Hive On Spark

Hive是目前大數(shù)據(jù)領域保礼,事實上的SQL標準沛励。其底層默認是基于MapReduce實現(xiàn)的责语,但是由于MapReduce速度實在比較慢,因此這兩年目派,陸續(xù)出來了新的SQL查詢引擎坤候。包括Spark SQL,Hive On Tez企蹭,Hive On Spark等白筹。

1.Spark SQL與Hive On Spark

Spark SQL與Hive On Spark是不一樣的。Spark SQL是Spark自己研發(fā)出來的針對各種數(shù)據(jù)源练对,包括Hive遍蟋、JSON、Parquet螟凭、JDBC虚青、RDD等都可以執(zhí)行查詢的,一套基于Spark計算引擎的查詢引擎螺男。因此它是Spark的一個項目棒厘,只不過提供了針對Hive執(zhí)行查詢的工功能而已。適合在一些使用Spark技術棧的大數(shù)據(jù)應用類系統(tǒng)中使用下隧。
而Hive On Spark奢人,是Hive的一個項目,它是指淆院,不通過MapReduce作為唯一的查詢引擎何乎,而是將Spark作為底層的查詢引擎。Hive On Spark土辩,只適用于Hive支救。在可預見的未來,很有可能Hive默認的底層引擎就從MapReduce切換為Spark了拷淘。適合于將原有的Hive數(shù)據(jù)倉庫以及數(shù)據(jù)統(tǒng)計分析替換為Spark引擎各墨,作為全公司通用的大數(shù)據(jù)統(tǒng)計分析引擎。

2.Hive的基本工作原理:

Hive QL語句 =>
語法分析 => AST =>
生成邏輯執(zhí)行計劃 => Operator Tree =>
優(yōu)化邏輯執(zhí)行計劃 => Optimized Operator Tree =>
生成物理執(zhí)行計劃 => Task Tree =>
優(yōu)化物理執(zhí)行計劃 => Optimized Task Tree =>
執(zhí)行優(yōu)化后的Optimized Task Tree

3.Hive On Spark的計算原理

1启涯、將Hive表作為Spark RDD來進行操作:這個是沒有疑問的

2贬堵、使用Hive原語
對于一些針對RDD的操作,比如groupByKey结洼、sortByKey等黎做。不使用Spark的transformation操作和原語。如果那樣做的話松忍,那么就需要重新實現(xiàn)一套Hive的原語引几,而且如果Hive增加了新功能,那么又要實現(xiàn)新的Spark原語。因此選擇將Hive的原語包裝為針對RDD的操作即可伟桅。

3敞掘、新的物理執(zhí)行計劃生成機制
使用SparkCompiler將邏輯執(zhí)行計劃,即Operator Tree楣铁,轉換為Task Tree玖雁。提交Spark Task給Spark進行執(zhí)行。SparkTask包裝了DAG盖腕,DAG包裝為SparkWork赫冬。SparkTask根據(jù)SparkWork表示的DAG計算。
4溃列、SparkContext生命周期
Hive On Spark會為每個用戶的會話劲厌,比如執(zhí)行一次SQL語句,創(chuàng)建一個SparkContext听隐。但是Spark不允許在一個JVM內創(chuàng)建多個SparkContext补鼻。因此,需要在單獨的JVM中啟動每個會話的SparkContext雅任,然后通過RPC與遠程JVM中的SparkContext進行通信风范。

5、本地和遠程運行模式
Hive On Spark提供兩種運行模式沪么,本地和遠程硼婿。如果將Spark Master設置為local,比如set spark.master=local禽车,那么就是本地模式寇漫,SparkContext與客戶端運行在一個JVM中。否則殉摔,如果將Spark Master設置為Master的地址州胳,那么就是遠程模式,SparkContext會在遠程的JVM中啟動钦勘。

遠程模式下,每個用戶Session都會創(chuàng)建一個SparkClient亚亲,SparkClient啟動RemoteDriver彻采,RemoteDriver負責創(chuàng)建SparkContext。

4.Hive On Spark的一些優(yōu)化

1捌归、Map Join
Spark SQL默認對join是支持使用broadcast機制將小表廣播到各個節(jié)點上肛响,以進行join的。但是問題是惜索,這會給Driver和Worker帶來很大的內存開銷特笋。因為廣播的數(shù)據(jù)要一直保留在Driver內存中。所以目前采取的是,類似乎MapReduce的Distributed Cache機制猎物,即提高HDFS replica factor的復制因子虎囚,以讓數(shù)據(jù)在每個計算節(jié)點上都有一個備份,從而可以在本地進行數(shù)據(jù)讀取蔫磨。

2淘讥、Cache Table
對于某些需要對一張表執(zhí)行多次操作的場景,Hive On Spark內部做了優(yōu)化堤如,即將要多次操作的表cache到內存中蒲列,以便于提升性能。但是這里要注意搀罢,并不是對所有的情況都會自動進行cache蝗岖。所以說,Hive On Spark還有很多不完善的地方榔至。

5.Hive On Spark環(huán)境搭建

1抵赢、安裝包:apache-hive-1.2.1-bin.tar.gz
2、在/usr/local目錄下解壓縮
3洛退、進入conf目錄瓣俯,mv hive-default.xml.template hive-site.xml,修改hive-site.xml
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://spark1:3306/hive_metadata_2?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hive</value>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse2</value>
</property>
4兵怯、在conf目錄下
mv hive-env.sh.template hive-env.sh

vi ./bin/hive-config.sh
export JAVA_HOME=/usr/java/latest
export HIVE_HOME=/usr/local/apache-hive-1.2.1-bin
export HADOOP_HOME=/usr/local/hadoop

5彩匕、cp /usr/share/java/mysql-connector-java-5.1.17.jar /usr/local/apache-hive-1.2.1-bin/lib

6、MySQL
create database if not exists hive_metadata_2;
grant all privileges on hive_metadata_2.* to 'hive'@'%' identified by 'hive';
grant all privileges on hive_metadata_2.* to 'hive'@'localhost' identified by 'hive';
grant all privileges on hive_metadata_2.* to 'hive'@'spark1' identified by 'hive';
flush privileges;
7媒区、啟動hive cli驼仪,./hive,報錯袜漩,Relative path in absolute URI: {system:java.io.tmpdir%7D/%7Bsystem:user.name%7D
創(chuàng)建文件夾:/home/grid/apache-hive-1.2.1-bin
/iotmp
將hive-site.xml中所有的${system:java.io.tmpdir}改為上面的目錄绪爸,這里建議用WinSCP將hive-site.xml拷貝到windows上來,用notepad++這種工具宙攻,來進行文本替換奠货,比較方便。

8座掘、啟動hive cli递惋,./hive,繼續(xù)報錯溢陪,F(xiàn)ound class jline.Terminal, but interface was expected
cp /usr/local/apache-hive-1.2.1-bin/lib/jline-2.12.jar /usr/local/hadoop/share/hadoop/yarn/lib
將hadoop原來的老的jline-0.9.94.jar萍虽,改名或者刪除

9、啟動hive cli形真,/usr/local/apache-hive-1.2.1-bin/bin/hive杉编,成功啟動

6.Hive On Spark使用

create table students(name string, age int);
load data local inpath '/usr/local/spark-study/resources/students.txt' into table students;

使用Hive On Spark非常簡單,只要用set hive.execution.engine命令設置Hive的執(zhí)行引擎為spark即可,默認是mr
set hive.execution.engine=spark;
這里邓馒,是完全可以將其設置為Spark Master的URL地址的
set spark.master=spark://192.168.1.107:7077
select * from students;

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末嘶朱,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子绒净,更是在濱河造成了極大的恐慌见咒,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挂疆,死亡現(xiàn)場離奇詭異改览,居然都是意外死亡,警方通過查閱死者的電腦和手機缤言,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進店門宝当,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人胆萧,你說我怎么就攤上這事庆揩。” “怎么了跌穗?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵订晌,是天一觀的道長。 經常有香客問我蚌吸,道長锈拨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任羹唠,我火速辦了婚禮奕枢,結果婚禮上,老公的妹妹穿的比我還像新娘佩微。我一直安慰自己缝彬,他們只是感情好,可當我...
    茶點故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布哺眯。 她就那樣靜靜地躺著谷浅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪奶卓。 梳的紋絲不亂的頭發(fā)上一疯,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天,我揣著相機與錄音寝杖,去河邊找鬼违施。 笑死互纯,一個胖子當著我的面吹牛瑟幕,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼只盹,長吁一口氣:“原來是場噩夢啊……” “哼辣往!你這毒婦竟也來了?” 一聲冷哼從身側響起殖卑,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤站削,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后孵稽,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體许起,經...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年菩鲜,在試婚紗的時候發(fā)現(xiàn)自己被綠了园细。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡接校,死狀恐怖猛频,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情蛛勉,我是刑警寧澤鹿寻,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站诽凌,受9級特大地震影響毡熏,放射性物質發(fā)生泄漏。R本人自食惡果不足惜皿淋,卻給世界環(huán)境...
    茶點故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一招刹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧窝趣,春花似錦疯暑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至洗鸵,卻和暖如春越锈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背膘滨。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工甘凭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人火邓。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓丹弱,卻偏偏與公主長得像德撬,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子躲胳,可洞房花燭夜當晚...
    茶點故事閱讀 44,654評論 2 354

推薦閱讀更多精彩內容

  • pyspark.sql模塊 模塊上下文 Spark SQL和DataFrames的重要類: pyspark.sql...
    mpro閱讀 9,451評論 0 13
  • 1蜓洪、背景 Hive是目前大數(shù)據(jù)領域,事實上的SQL標準坯苹。其底層默認是基于MapReduce實現(xiàn)的隆檀,但是由于MapR...
    雪飄千里閱讀 2,657評論 0 4
  • Hive概述 Hive 是基于 Hadoop 的一個數(shù)據(jù)倉庫工具,可以將結構化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫表粹湃,并提供...
    董二彎閱讀 9,109評論 0 10
  • Spark學習筆記 Data Source->Kafka->Spark Streaming->Parquet->S...
    哎喲喂嘍閱讀 6,620評論 0 51
  • 今天是第二節(jié)課《夢想的力量》恐仑,聽了以后感觸很深! 課程中为鳄,美娟老師用她不疾不徐的聲音波瀾不驚的講述著一個6歲孩子的...
    lxh星華閱讀 509評論 0 0