Hive最初是應Facebook每天產(chǎn)生的海量新興社會網(wǎng)絡數(shù)據(jù)進行管理和機器學習的需求而產(chǎn)生和發(fā)展的。那么,到底什么是Hive,我們先看看Hive官網(wǎng)Wiki是如何介紹Hive的
The Apache Hive data warehouse software facilitates querying and managing large datasets residing in distributed storage.Built on top of Apache HadoopTM, it provides:
(1)、Tools to enable easy data extract/transform/load (ETL)
(2)、A mechanism to impose structure on a variety of data formats
(3)、Access to files stored either directly in Apache HDFSTM or in other data storage systems such as Apache HBaseTM
(4)、Query execution via MapReduce
上面英文的大致意思是:
Apache Hive數(shù)據(jù)倉庫軟件提供對存儲在分布式中的大型數(shù)據(jù)集的查詢和管理,它本身是建立在Apache Hadoop之上,主要提供以下功能:
(1)它提供了一系列的工具,可用來對數(shù)據(jù)進行提取/轉化/加載(ETL);
(2)是一種可以存儲、查詢和分析存儲在HDFS(或者HBase)中的大規(guī)模數(shù)據(jù)的機制;
(3)查詢是通過MapReduce來完成的(并不是所有的查詢都需要MapReduce來完成,比如select * from XXX就不需要;
(4)在Hive0.11對類似select a,b from XXX的查詢通過配置也可以不通過MapReduce來完成
上面的意思很明白了.這里再給他提煉一下:
1.hive是一個數(shù)據(jù)倉庫
2.hive基于hadoop。
總結為一句話:hive是基于hadoop的數(shù)據(jù)倉庫。
Hive是一種建立在Hadoop文件系統(tǒng)上的數(shù)據(jù)倉庫架構,并對存儲在HDFS中的數(shù)據(jù)進行分析和管理;
**(也就是說對存儲在HDFS中的數(shù)據(jù)進行分析和管理,我們不想使用手工,我們建立一個工具把,那么這個工具就可以是hive)
**
那么,我們?nèi)绾蝸矸治龊凸芾砟切?shù)據(jù)呢?
Hive定義了一種類似SQL的查詢語言,被稱為HQL,對于熟悉SQL的用戶可以直接利用Hive來查詢數(shù)據(jù)。同時,這個語言也允許熟悉 MapReduce 開發(fā)者們開發(fā)自定義的mappers和reducers來處理內(nèi)建的mappers和reducers無法完成的復雜的分析工作。Hive可以允許用戶編寫自己定義的函數(shù)UDF,來在查詢中使用。Hive中有3種UDF:User Defined Functions(UDF)、User Defined Aggregation Functions(UDAF)、User Defined Table Generating Functions(UDTF)。
今天,Hive已經(jīng)是一個成功的Apache項目,很多組織把它用作一個通用的、可伸縮的數(shù)據(jù)處理平臺。
當然,Hive和傳統(tǒng)的關系型數(shù)據(jù)庫有很大的區(qū)別,Hive將外部的任務解析成一個MapReduce可執(zhí)行計劃,而啟動MapReduce是一個高延遲的一件事,每次提交任務和執(zhí)行任務都需要消耗很多時間,這也就決定Hive只能處理一些高延遲的應用(如果你想處理低延遲的應用,你可以去考慮一下Hbase)。同時,由于設計的目標不一樣,Hive目前還不支持事務;不能對表數(shù)據(jù)進行修改(不能更新、刪除、插入;只能通過文件追加數(shù)據(jù)、重新導入數(shù)據(jù));不能對列建立索引(但是Hive支持索引的建立,但是不能提高Hive的查詢速度。如果你想提高Hive的查詢速度,請學習Hive的分區(qū)、桶的應用)。
hive與hbase的聯(lián)系與區(qū)別:
共同點:
1.hbase與hive都是架構在hadoop之上的。都是用hadoop作為底層存儲
區(qū)別:
2.Hive是建立在Hadoop之上為了減少MapReduce jobs編寫工作的批處理系統(tǒng),HBase是為了支持彌補Hadoop對實時操作的缺陷的項目 。
3.想象你在操作RMDB數(shù)據(jù)庫,如果是全表掃描,就用Hive+Hadoop,如果是索引訪問,就用HBase+Hadoop 。
4.Hive query就是MapReduce jobs可以從5分鐘到數(shù)小時不止,HBase是非常高效的,肯定比Hive高效的多。
5.Hive本身不存儲和計算數(shù)據(jù),它完全依賴于HDFS和MapReduce,Hive中的表純邏輯。
6.hive借用hadoop的MapReduce來完成一些hive中的命令的執(zhí)行
7.hbase是物理表,不是邏輯表,提供一個超大的內(nèi)存hash表,搜索引擎通過它來存儲索引,方便查詢操作。
8.hbase是列存儲。
9.hdfs作為底層存儲,hdfs是存放文件的系統(tǒng),而Hbase負責組織文件。
10.hive需要用到hdfs存儲文件,需要用到MapReduce計算框架。
點我查看 == > 原文鏈接