hive初识.docx
為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??
產(chǎn)生背景:
Hive最初是應(yīng)Facebook每天產(chǎn)生的海量新興社會(huì)網(wǎng)絡(luò)數(shù)據(jù)進(jìn)行管理和機(jī)器學(xué)習(xí)的需求而產(chǎn)生和發(fā)展的。
Hive 誕生于 facebook 的日志分析需求,面對(duì)海量的結(jié)構(gòu)化數(shù)據(jù), hive 以較低的成本完成了以往需要大規(guī)模數(shù)據(jù)庫(kù)才能完成的任務(wù),并且學(xué)習(xí)門(mén)檻相對(duì)較低,應(yīng)用開(kāi)發(fā)靈活而高效。
Hive 是一個(gè)基于 hadoop 的開(kāi)源數(shù)據(jù)倉(cāng)庫(kù)工具,用于存儲(chǔ)和處理海量結(jié)構(gòu)化數(shù)據(jù)。??? 它把海量數(shù)據(jù)存儲(chǔ)于 hadoop 文件系統(tǒng),而不是數(shù)據(jù)庫(kù),但提供了一套類數(shù)據(jù)庫(kù)的數(shù)據(jù)存儲(chǔ)和處理機(jī)制,并采用 HQL (類 SQL )語(yǔ)言對(duì)這些數(shù)據(jù)進(jìn)行自動(dòng)化管理和處理。我們可以把 hive 中海量結(jié)構(gòu)化數(shù)據(jù)看成一個(gè)個(gè)的表,而實(shí)際上這些數(shù)據(jù)是分布式存儲(chǔ)在 HDFS 中的。 Hive 經(jīng)過(guò)對(duì)語(yǔ)句進(jìn)行解析和轉(zhuǎn)換,最終生成一系列基于 hadoop 的 map/reduce 任務(wù),通過(guò)執(zhí)行這些任務(wù)完成數(shù)據(jù)處理。
Wiki上對(duì)hive的解釋:
Apache Hive數(shù)據(jù)倉(cāng)庫(kù)軟件提供對(duì)存儲(chǔ)在分布式中的大型數(shù)據(jù)集的查詢和管理,它本身是建立在Apache Hadoop之上。
主要提供以下功能:
1)、它提供了一系列的工具,可用來(lái)對(duì)數(shù)據(jù)進(jìn)行提取/轉(zhuǎn)化/加載(ETL);
2)、是一種可以存儲(chǔ)、查詢和分析存儲(chǔ)在HDFS(或者HBase)中的大規(guī)模數(shù)據(jù)的機(jī)制;
3)、查詢是通過(guò)MapReduce來(lái)完成的
(并不是所有的查詢都需要MapReduce來(lái)完成,比如select * from XXX就不需要;在Hive0.11對(duì)類似select a,b from XXX的查詢通過(guò)配置也可以不通過(guò)MapReduce來(lái)完成,,具體怎么配置請(qǐng)參見(jiàn)本博客《Hive:簡(jiǎn)單查詢不啟用Mapreduce job而啟用Fetch task》)。
從上面的定義我們可以了解到,Hive是一種建立在Hadoop文件系統(tǒng)上的數(shù)據(jù)倉(cāng)庫(kù)架構(gòu),并對(duì)存儲(chǔ)在HDFS中的數(shù)據(jù)進(jìn)行分析和管理;那么,我們?nèi)绾蝸?lái)分析和管理那些數(shù)據(jù)呢?
HQL
Hive定義了一種類似SQL的查詢語(yǔ)言,被稱為HQL,對(duì)于熟悉SQL的用戶可以直接利用Hive來(lái)查詢數(shù)據(jù)。同時(shí),這個(gè)語(yǔ)言也允許熟悉 MapReduce 開(kāi)發(fā)者們開(kāi)發(fā)自定義的mappers和reducers來(lái)處理內(nèi)建的mappers和reducers無(wú)法完成的復(fù)雜的分析工作。Hive可以允許用戶編寫(xiě)自己定義的函數(shù)UDF,來(lái)在查詢中使用。
Hive中有3種UDF:
User Defined Functions(UDF)
User Defined Aggregation Functions(UDAF)
User Defined Table Generating Functions(UDTF)
今天,Hive已經(jīng)是一個(gè)成功的Apache項(xiàng)目,很多組織把它用作一個(gè)通用的、可伸縮的數(shù)據(jù)處理平臺(tái)。
Hive和傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)的區(qū)別:
Hive將外部的任務(wù)解析成一個(gè)MapReduce可執(zhí)行計(jì)劃,而啟動(dòng)MapReduce是一個(gè)高延遲的一件事,每次提交任務(wù)和執(zhí)行任務(wù)都需要消耗很多時(shí)間,這也就決定Hive只能處理一些高延遲的應(yīng)用(如果你想處理低延遲的應(yīng)用,你可以去考慮一下Hbase)。
Hive缺點(diǎn)1:
由于設(shè)計(jì)的目標(biāo)不一樣,Hive目前還不支持事務(wù);不能對(duì)表數(shù)據(jù)進(jìn)行修改(不能更新、刪除、插入;只能通過(guò)文件追加數(shù)據(jù)、重新導(dǎo)入數(shù)據(jù));不能對(duì)列建立索引(但是Hive支持索引的建立,但是不能提高Hive的查詢速度。如果你想提高Hive的查詢速度,請(qǐng)學(xué)習(xí)Hive的分區(qū)、桶的應(yīng)用)。
適用場(chǎng)景:
1)、Hive最適合于數(shù)據(jù)倉(cāng)庫(kù)應(yīng)用程序,適用該應(yīng)用程序進(jìn)行相關(guān)的靜態(tài)數(shù)據(jù)分析,不需要快速響應(yīng)給出結(jié)果,而且數(shù)據(jù)本身不會(huì)頻繁變化。
2)、hive是最適合數(shù)據(jù)倉(cāng)庫(kù)應(yīng)用的,其可以維護(hù)海量數(shù)據(jù),而且可以對(duì)數(shù)據(jù)進(jìn)行挖掘,然后形成意見(jiàn)和報(bào)告等。
缺點(diǎn)2:
Hive不是一個(gè)完整地?cái)?shù)據(jù)庫(kù)。Hadoop以及hdfs的設(shè)計(jì)本身約束和局限性地限制了hive所能勝任的工作。
1)、hive不支持記錄級(jí)別的更新、插入或者刪除操作
其中最大的限制是:Hive目前還不支持事務(wù);
不能對(duì)表數(shù)據(jù)進(jìn)行修改(不能更新、刪除、插入;只能通過(guò)文件追加數(shù)據(jù)、重新導(dǎo)入數(shù)據(jù));
hive不支持記錄級(jí)別的更新、插入或者刪除操作,但是用戶可以通過(guò)查詢生成新表或者將查詢結(jié)果導(dǎo)入到文件中。
不能對(duì)列建立索引(但是hive支持索引的建立,但是不能提高hive的 查詢速度。如果你想提高hive的查詢速度,請(qǐng)學(xué)習(xí)hive的分區(qū)、桶的應(yīng)用)。
2)、hive查詢延時(shí)嚴(yán)重
因?yàn)?/span>Hadoop是 一個(gè)面向批處理的系統(tǒng),而MapReduce任務(wù)(job)的啟動(dòng)過(guò)程需要消耗較長(zhǎng)的時(shí)間,所以hive查詢延時(shí)比較嚴(yán)重。傳統(tǒng)數(shù)據(jù)庫(kù)中秒級(jí)別可以完成的查詢,在Hive中,即使數(shù)據(jù)集相對(duì)較小,往往也需要執(zhí)行更長(zhǎng)的時(shí)間。
3)、hive不支持事務(wù)
如果用戶需要對(duì)大規(guī)模數(shù)據(jù)使用OLTP功能的話,那么應(yīng)該選擇使用一個(gè)NoSQL數(shù)據(jù)庫(kù)。例如,和Hadoop結(jié)合使用的HBase及Cassandra.
總結(jié):
1)、hive誕生于facebook的日志分析需求
2)、hive處理結(jié)構(gòu)化數(shù)據(jù)
3)、hive應(yīng)用場(chǎng)景主要是處理冷數(shù)據(jù)(只讀不寫(xiě))
因此,它只支持批量導(dǎo)入和導(dǎo)出數(shù)據(jù),并不支持單條數(shù)據(jù)的寫(xiě)入和更新,所以如果要導(dǎo)入的數(shù)據(jù)存在某些不太規(guī)范的行,則需要我們定制一些功能對(duì)其進(jìn)行處理。
4)、hive操作本地?cái)?shù)據(jù)
一開(kāi)始,總是把本地?cái)?shù)據(jù)先傳到 HDFS ,再由 hive 操作 hdfs 上的數(shù)據(jù),然后再把數(shù)據(jù)從 HDFS 上傳回本地?cái)?shù)據(jù)。后來(lái)發(fā)現(xiàn)大可不必如此, hive 語(yǔ)句都提供了“ local ”關(guān)鍵字,支持直接從本地導(dǎo)入數(shù)據(jù)到 hive ,也能從 hive 直接導(dǎo)出數(shù)據(jù)到本地,不過(guò)其內(nèi)部計(jì)算時(shí)當(dāng)然是用 HDFS 上的數(shù)據(jù),只是自動(dòng)為我們完成導(dǎo)入導(dǎo)出而已。
5)、hive將數(shù)據(jù)存儲(chǔ)在Hadoop中的hdfs文件系統(tǒng)中,并提供了一套類似于關(guān)系型數(shù)據(jù)庫(kù)的處理機(jī)制。
6)、hive將數(shù)據(jù)存儲(chǔ)在表中,表的每一列都有一個(gè)相關(guān)的類型。Hive支持常見(jiàn)的原語(yǔ)類型并支持復(fù)合類型。再加上其查詢語(yǔ)言與SQL及其類似,因此,Hive很容易被用戶接受并掌握。
道.卡丁
Doug Cutting
命令行界面
CLI
?
轉(zhuǎn)載于:https://my.oschina.net/HIJAY/blog/503829
總結(jié)
以上是生活随笔為你收集整理的hive初识.docx的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 网站自动提交至百度站长收录平台函数(适用
- 下一篇: nginx源码安装