学习笔记Hive(一)—— Hive简介
一、Hive設(shè)計(jì)思想
(了解)
Facebook用戶社交數(shù)據(jù)存儲與處理
Facebook是美國的一個社交網(wǎng)站 ,于2004年2月4日上線。主要創(chuàng)始人為美國人馬克·扎克伯格。Facebook是世界排名領(lǐng)先的照片分享站點(diǎn)。
根據(jù)Comscore咨詢公司的數(shù)據(jù)顯示,2008年5月Facebook全球獨(dú)立訪問用戶首次超過了競爭對手Myspace,前者五月獨(dú)立訪問用戶達(dá)到了1.239億,頁面瀏覽量達(dá)到500.6億。2009年12月,Facebook的獨(dú)立人次達(dá)到了4.69億,其綜合瀏覽量增長了141個百分點(diǎn),在09年末達(dá)到了1930億。
1.1、Hive由來
Hive是Facebook開發(fā)的,構(gòu)建于Hadoop集群之上的數(shù)據(jù)倉庫應(yīng)用。2008年Facebook將Hive項(xiàng)目貢獻(xiàn)給Apache,成為開源項(xiàng)目。
Hive最初是由Facebook設(shè)計(jì)的,是基于Hadoop的一個數(shù)據(jù)倉庫工具,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫表,并提供簡單的類SQL查詢語言(稱為HiveQL)。
底層將HiveQL語句轉(zhuǎn)換為MapReduce任務(wù)運(yùn)行,它允許熟悉SQL的用戶基于Hadoop框架分析數(shù)據(jù)。
優(yōu)點(diǎn):學(xué)習(xí)成本低,對于簡單的統(tǒng)計(jì)分析,不必開發(fā)專門的MapReduce程序,直接通過HiveQL即可實(shí)現(xiàn)。
二、Hive體系結(jié)構(gòu)
-
CLI:Cli 啟動的時候,會同時啟動一個 Hive 副本。
-
JDBC客戶端:封裝了Thrift,java應(yīng)用程序,可以通過指定的主機(jī)和端口連接到在另一個進(jìn)程中運(yùn)行的hive服務(wù)器
-
ODBC客戶端:ODBC驅(qū)動允許支持ODBC協(xié)議的應(yīng)用程序連接到Hive。
-
WUI 接口:是通過瀏覽器訪問 Hive
-
Thrift服務(wù)器
基于socket通訊,支持跨語言。Hive Thrift服務(wù)簡化了在多編程語言中運(yùn)行Hive的命令。綁定支持C++,Java,PHP,Python和Ruby語言 -
解析器
- 編譯器:完成 HQL 語句從詞法分析、語法分析、編譯、優(yōu)化以及執(zhí)行計(jì)劃的生成。
- 優(yōu)化器是一個演化組件,當(dāng)前它的規(guī)則是:列修剪,謂詞下壓。
- 執(zhí)行器會順序執(zhí)行所有的Job。如果Task鏈不存在依賴關(guān)系,可以采用并發(fā)執(zhí)行的方式執(zhí)行Job。
-
元數(shù)據(jù)庫
- Hive的數(shù)據(jù)由兩部分組成:數(shù)據(jù)文件和元數(shù)據(jù)。元數(shù)據(jù)用于存放Hive庫的基礎(chǔ)信息,它存儲在關(guān)系數(shù)據(jù)庫中,如 mysql、derby。元數(shù)據(jù)包括:數(shù)據(jù)庫信息、表的名字,表的列和分區(qū)及其屬性,表的屬性,表的數(shù)據(jù)所在目錄等。
-
Hadoop
- Hive 的數(shù)據(jù)文件存儲在 HDFS 中,大部分的查詢由 MapReduce 完成。(對于包含 * 的查詢,比如 select * from tbl 不會生成 MapRedcue 作業(yè))
2.1、運(yùn)行機(jī)制
- 用戶通過用戶接口連接Hive,發(fā)布Hive SQL
- Hive解析查詢并制定查詢計(jì)劃
- Hive將查詢轉(zhuǎn)換成MapReduce作業(yè)
- Hive在Hadoop上執(zhí)行MapReduce作業(yè)
補(bǔ)充知識點(diǎn):
① 用戶接口主要有三個:CLI,Client和WUI.其中最常用的是CLI,CLI啟動的時候,會同時啟動一個Hive副本。Client是Hive的客戶端,用戶連接至Hive Server。在啟動Client模式的時候,需要指出Hive Server所在節(jié)點(diǎn),并且在該節(jié)點(diǎn)啟動Hive Server。WUI是通過瀏覽器訪問Hive。
② Hive將元數(shù)據(jù)存儲在數(shù)據(jù)庫中,如mysql、derby。Hive中的元數(shù)據(jù)包括表的名字,表的列和分區(qū)以及屬性,表的屬性(是否為外部表等),表的數(shù)據(jù)所在目錄等。
③ 解釋器、編輯器、優(yōu)化器完成HQL查詢語句從詞法分析、語法分析、編譯、優(yōu)化以及查詢計(jì)劃的生成。生成的查詢計(jì)劃存儲在HDFS中,并在隨后有MapReduce調(diào)用執(zhí)行。
④ Hive的數(shù)據(jù)存儲在HDFS中,大部分的查詢、計(jì)算由MapReduce完成
三、Hive應(yīng)用場景
3.1、Hive設(shè)計(jì)特點(diǎn)
- Hive 不支持對數(shù)據(jù)的改寫和添加,所有的數(shù)據(jù)都是在加載的時候確定的。
- 支持索引,加快數(shù)據(jù)查詢。
- 不同的存儲類型,例如,文本文件、序列化文件。
- 將元數(shù)據(jù)保存在關(guān)系數(shù)據(jù)庫中,減少了在查詢中執(zhí)行語義檢查時間。
- 可以直接使用存儲在Hadoop 文件系統(tǒng)中的數(shù)據(jù)。
- 內(nèi)置大量用戶函數(shù)UDF 來操作時間、字符串和其他的數(shù)據(jù)挖掘工具,支持用戶擴(kuò)展UDF 函數(shù)來完成內(nèi)置函數(shù)無法實(shí)現(xiàn)的操作。
- 類SQL 的查詢方式,將SQL 查詢轉(zhuǎn)換為MapReduce 的job 在Hadoop集群上執(zhí)行。
- 編碼跟Hadoop同樣使用UTF-8字符集。
3.2、Hive的優(yōu)勢
- 解決了傳統(tǒng)關(guān)系數(shù)據(jù)庫在大數(shù)據(jù)處理上的瓶頸。適合大數(shù)據(jù)的批量處理。
- 充分利用集群的CPU計(jì)算資源、存儲資源,實(shí)現(xiàn)并行計(jì)算。
- Hive支持標(biāo)準(zhǔn)SQL語法,免去了編寫MR程序的過程,減少了開發(fā)成本。
- 具有良好的擴(kuò)展性,拓展功能方便。
3.3、Hive的劣勢
- Hive的HQL表達(dá)能力有限:有些復(fù)雜運(yùn)算用HQL不易表達(dá)。
- Hive效率低:Hive自動生成MR作業(yè),通常不夠智能。
針對Hive運(yùn)行效率低下的問題,促使人們?nèi)ふ乙环N更快,更具交互性的分析框架。 SparkSQL 的出現(xiàn)則有效的提高了Sql在Hadoop 上的分析運(yùn)行效率。
3.4、應(yīng)用場景
適用場景
- 海量數(shù)據(jù)的存儲處理
- 數(shù)據(jù)挖掘
- 海量數(shù)據(jù)的離線分析
不適用場景
- 復(fù)雜的機(jī)器學(xué)習(xí)算法
- 復(fù)雜的科學(xué)計(jì)算
- 聯(lián)機(jī)交互式實(shí)時查詢
總結(jié)
以上是生活随笔為你收集整理的学习笔记Hive(一)—— Hive简介的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学习笔记Hadoop(十五)—— Map
- 下一篇: 学习笔记Hive(二)—— Hive安装