一個數(shù)據(jù)倉庫時代開始--Hive

一汹押、什么是 Apache Hive夕凝?

Apache Hive 是一個基于 Hadoop Haused 構(gòu)建的開源數(shù)據(jù)倉庫系統(tǒng)亡脑,我們使用它來查詢和分析存儲在 Hadoop 文件中的大型數(shù)據(jù)集。此外往扔,通過使用 Hive旋膳,我們可以在 Hadoop 中處理結(jié)構(gòu)化和半結(jié)構(gòu)化數(shù)據(jù)澎语。

換句話說,Hive 是一個數(shù)據(jù)倉庫基礎(chǔ)設(shè)施验懊,便于查詢和管理駐留在分布式存儲系統(tǒng)中的大型數(shù)據(jù)集擅羞。它提供了一種類 SQL 的查詢語言 HiveQL(Hive Query Language)查詢數(shù)據(jù)的方法。 此外义图,編譯器在內(nèi)部將 HiveQL 語句轉(zhuǎn)換為 MapReduce减俏、Tez、Spark 等作業(yè)碱工。進(jìn)一步提交給 Hadoop 框架執(zhí)行娃承。

二奏夫、我們?yōu)槭裁匆褂?Hive 技術(shù)?

隨著 Hadoop MapReduce 的出現(xiàn)历筝,極大的簡化大數(shù)據(jù)編程的難度酗昼,使得普通程序員也能從事開發(fā)大數(shù)據(jù)編程。但在生產(chǎn)活動中經(jīng)常要對大數(shù)據(jù)計算分析是從事商務(wù)智能行業(yè)(BI)的工程師梳猪,他們通常使用 SQL 語言進(jìn)行大數(shù)據(jù)統(tǒng)計以及分析麻削,而 Mapreduce 編程是有一定的門檻,如果每次都采用 MapReduce 開發(fā)計算分析春弥,這樣成本就太高效率太低呛哟,那么有沒有更簡單的辦法,可以直接通過 SQL 在大數(shù)據(jù)平臺下運(yùn)行進(jìn)行統(tǒng)計分析匿沛?有的扫责,答案即是 Hive。

Hive 主要用于數(shù)據(jù)查詢逃呼,統(tǒng)計和分析鳖孤,提高開發(fā)人員的工作效率。Hive 通過內(nèi)置函數(shù)將 SQL 語句生成 DAG(有向無環(huán)圖)蜘渣,再讓 Mapreduce 計算處理淌铐。從而得到我們想要的統(tǒng)計結(jié)果肺然。而且在處理具有挑戰(zhàn)性的復(fù)雜分析處理和數(shù)據(jù)格式時蔫缸,極大的簡化了開發(fā)難度。

三际起、Hive 架構(gòu)

Hive 能夠直接處理我們輸入的 HiveQL 語句拾碌,調(diào)用 MapReduce 計算框架完成數(shù)據(jù)分析操作。下面是它的架構(gòu)圖街望,我們結(jié)合架構(gòu)圖來看看 Hive 到 MapReduce 整個流程校翔。

image

由上圖可知,HDFS 和 Mapreduce 是 Hive 架構(gòu)的根基灾前。Hive 架構(gòu)主要分為以下幾個組件:Client防症、Metastore、Thrift Server哎甲、Driver蔫敲,下面是各個組件介紹:

Client:用戶接口組件主要包含 CLI(命令行接口)、JDBC 或 ODBC炭玫、WEB GUI(以瀏覽器訪問 Hive)奈嘿;

Metastore組件:元數(shù)據(jù)服務(wù)組件, 記錄表名吞加、字段名裙犹、字段類型尽狠、關(guān)聯(lián) HDFS 文件路徑等這些數(shù)據(jù)庫的元數(shù)據(jù)信息;

Driver(執(zhí)行引擎):包括 Complier 叶圃、Optimizer 和 Executor袄膏,它們的作用是將 HiveQL 語句進(jìn)行語法分析、語法解析掺冠、語法優(yōu)化哩陕,生成執(zhí)行計劃,然后提交給 Hadoop MapReduce 計算框架處理赫舒;

Thrift Server:Thrift 是 FaceBook 開發(fā)的一個軟件框架悍及,它用來進(jìn)行可擴(kuò)展且跨語言的服務(wù)的開發(fā), 通過該服務(wù)使不同編程語言調(diào)用 Hive 的接口接癌。

我們通過 CLI 向 Hive 提交 SQL 命令心赶,如果 SQL 是創(chuàng)建數(shù)據(jù)表的 DDL,Hive 會通過 執(zhí)行引擎 Driver 將數(shù)據(jù)表元數(shù)據(jù)信息存儲 Metastore 中缺猛,而如果 SQL 是查詢分析數(shù)據(jù)的 DQL缨叫,通過 Complier 、Optimizer 和 Executor 進(jìn)行語法分析荔燎、語法解析耻姥、語法優(yōu)化操作,生成執(zhí)行計劃生成一個 MapReduce 的作業(yè)有咨,提交給 Hadoop MapReduce 計算框架處理琐簇。

到此 Hive 的整個流程就結(jié)束了,相信你對 Hive 的整個流程已經(jīng)有基本了解座享。接下來我們探討一條 SQL 在 MapReduce 是如何統(tǒng)計分析婉商。


四、SQL如何在Mapreduce執(zhí)行

image

左邊是數(shù)據(jù)表渣叛,右邊是結(jié)果表丈秩,這條 SQL 語句對 age 分組求和,得到右邊的結(jié)果表淳衙,到底一條簡單的 SQL 在 MapReduce 是如何被計算蘑秽, MapReduce 編程模型只包含 map 和 reduce 兩個過程,map 是對數(shù)據(jù)的劃分箫攀,reduce 負(fù)責(zé)對 map 的結(jié)果進(jìn)行匯總肠牲。

select id,age,count(1) from student_info group by age

首先看 map 函數(shù)的輸入的 key 和 value,輸入主要看 value匠童,value 就是 user_info 表的每一行數(shù)據(jù)埂材,輸入的 value 作為map函數(shù)輸出的 key,輸出的 value 固定為 1汤求,比如<<1,17>,1>俏险。 map 函數(shù)的輸出經(jīng)過 shuffle 處理严拒,shuffle 把相同的 key 以及對應(yīng)的 value 組合成新<key,value集合>,從 user_info 表看出map輸出 2 次<<1,17>,1>竖独,那么經(jīng)過 shuffle 處理后則會輸出<<1,17>,<1,1>>裤唠,并將輸出作為 reduce 函數(shù)的輸入。

在 reduce 函數(shù)會把所有 value 進(jìn)行相加后輸出結(jié)果莹痢,<<1,17>,<1,1>>輸出為<<1,17>,2>种蘸。 這就是一條簡單 SQL 在 Mapreduce 執(zhí)行過程,可能你會有點(diǎn)迷糊竞膳,在這里我畫了一張流程圖航瞭,結(jié)合流程圖你會更加清楚。

image



五坦辟、Hive 和 RDBMS 之間的區(qū)別

說到 Hive 跟 RDBMS(傳統(tǒng)關(guān)系型數(shù)據(jù)庫)相比有哪些區(qū)別刊侯,很多人可能還是說不清楚,在這里我總結(jié)一下關(guān)于 Hive 和 RDBMS 之間的區(qū)別锉走。

1滨彻、Hive 支持部分 SQL 語法,跟標(biāo)準(zhǔn) SQL 有一定區(qū)別挪蹭。

2亭饵、傳統(tǒng)的數(shù)據(jù)庫在寫入數(shù)據(jù)會嚴(yán)格檢驗數(shù)據(jù)格式,對于這種我們成為讀時模式梁厉,而 Hive 是在查詢數(shù)據(jù)時驗證數(shù)據(jù)辜羊,這種驗證我們稱為寫時模式,而且由于每次都是掃描整個表導(dǎo)致高延時懂算;

3只冻、Hive 是在 Hadoop 上運(yùn)行的庇麦,通常而言 Hive 時一次寫入多次讀取计技,而 RDBMS 則是多次讀寫;

4山橄、Hive 視圖是邏輯存在垮媒,而且只讀,不接受 LOAD/INSERT/ALTER航棱,而 RDBMS 視圖根據(jù)表變化而變化睡雇;

5、Hive 支持多表插入而 RDBMS 是不支持饮醇,而且 Hive 對子查詢有嚴(yán)格要求它抱,有許多子查詢是不支持;

6朴艰、早期 Hive 只支持 INSERT OVERWRITE\INTO TABLE 插入數(shù)據(jù)观蓄,從 0.14.0 開始支持 INSERT INTO ... VALUE 語句按行添加數(shù)據(jù)混移,另外 UPDATE 和 DELETE 也允許被執(zhí)行;

7侮穿、在 Hive 0.7.0 之后 Hive 是支持索引的歌径,只是它跟 RDBMS 不一樣,比如它不支持主鍵和外鍵亲茅,而是支持在某些列上建立索引回铛,以提高 Hive 表指定列的查詢速度(但是效果差強(qiáng)人意);

其實(shí)對于更新克锣、事物和索引茵肃,一開始 Hive 是不支持的,因為這樣非常影響性能袭祟,不符合當(dāng)初數(shù)據(jù)倉庫的設(shè)計免姿,不過后來不斷的發(fā)展,也不得不妥協(xié)榕酒,這也導(dǎo)致 Hive 和 RDBMS 在形式上更加相識胚膊。

相信看完這些大家已經(jīng)對它們之間區(qū)別有了一些理解,在這里我還貼出一張表格想鹰,你可以對照表格加深印象紊婉。

比較項 RDBMS Hive
ANSI SQL 支持 不完全支持
更新 UPDATE\INSERT\DELETE UPDATE\INSERT\DELETE(0.14.0之后)
模式 讀時模式 寫時模式
數(shù)據(jù)保存 磁盤 HDFS
延時
多表插入 不支持 支持
子查詢 完全支持 支持 From 子句
視圖 Updatable Read-only
索引 支持 支持表列(0.7.0之后)
可擴(kuò)展性
數(shù)據(jù)規(guī)模
讀寫 一次寫入多次讀取 多次讀寫
分析 OLTP OLAP
執(zhí)行 Excutor MapReduced、Spark等



小結(jié)

在實(shí)際生產(chǎn)過程中辑舷,其實(shí)我們不會經(jīng)常編寫 MapReduce 程序喻犁,起初在網(wǎng)站的大數(shù)據(jù)分析基本是通過 SQL 進(jìn)的,也因此 Hive 在大數(shù)據(jù)中扮演著非常重要作用何缓。隨著 Hive 的普及肢础,我們希望更多的大數(shù)據(jù)應(yīng)用場景中使用 SQL 語句進(jìn)行分析,于是現(xiàn)在越來越多的大數(shù)據(jù) SQL 引擎被開發(fā)出來碌廓。在我看來無論是 Cloudera 的 Impala传轰,還是后來的 Spark ,對大數(shù)據(jù)中使用 SQL需求越來迫切谷婆, 對大數(shù)據(jù) SQL 應(yīng)用場景更多樣化慨蛙,我們只需要通過 SQL 語句就可以輕易得到我們想要的結(jié)果。最后說一點(diǎn)纪挎,在這些 SQL 引擎基本都是支持類 SQL 語言期贫,但并不像數(shù)據(jù)庫那樣支持那樣標(biāo)準(zhǔn) SQL,特別是 Hive 等數(shù)據(jù)倉庫幾乎必然會用到嵌套查詢 SQL异袄,也就是在 where 條件嵌套 select 子查詢通砍,但是幾乎所有的大數(shù)據(jù) SQL 引擎都不支持。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末烤蜕,一起剝皮案震驚了整個濱河市封孙,隨后出現(xiàn)的幾起案子垢揩,更是在濱河造成了極大的恐慌,老刑警劉巖敛瓷,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件叁巨,死亡現(xiàn)場離奇詭異,居然都是意外死亡呐籽,警方通過查閱死者的電腦和手機(jī)锋勺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來狡蝶,“玉大人庶橱,你說我怎么就攤上這事云芦』占叮” “怎么了?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵顾复,是天一觀的道長奏瞬。 經(jīng)常有香客問我枫绅,道長,這世上最難降的妖魔是什么硼端? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任并淋,我火速辦了婚禮,結(jié)果婚禮上珍昨,老公的妹妹穿的比我還像新娘县耽。我一直安慰自己,他們只是感情好镣典,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布兔毙。 她就那樣靜靜地躺著,像睡著了一般兄春。 火紅的嫁衣襯著肌膚如雪澎剥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天神郊,我揣著相機(jī)與錄音肴裙,去河邊找鬼。 笑死涌乳,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的甜癞。 我是一名探鬼主播夕晓,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼悠咱!你這毒婦竟也來了蒸辆?” 一聲冷哼從身側(cè)響起征炼,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎躬贡,沒想到半個月后谆奥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拂玻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年酸些,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片檐蚜。...
    茶點(diǎn)故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡魄懂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出闯第,到底是詐尸還是另有隱情市栗,我是刑警寧澤,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布咳短,位于F島的核電站填帽,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏咙好。R本人自食惡果不足惜盲赊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望敷扫。 院中可真熱鬧哀蘑,春花似錦、人聲如沸葵第。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽卒密。三九已至缀台,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間哮奇,已是汗流浹背膛腐。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鼎俘,地道東北人哲身。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像贸伐,于是被迫代替她去往敵國和親勘天。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評論 2 359