1. 程式人生 > >Hive總結(一)hive初始

Hive總結(一)hive初始

1.沒有接觸,不知道這個事物是什麼,所以不會產生任何問題。
2.接觸了,但是不知道他是什麼,反正我每天都在用。
3.有一定的瞭解,不夠透徹。
那麼hive,
1.我們對它瞭解多少?
2.它到底是什麼?
3.hive和hadoop是什麼關係?
擴充套件:
hbase和hive是什麼關係?



Hive最初是應Facebook每天產生的海量新興社會網路資料進行管理和機器學習的需求而產生和發展的。那麼,到底什麼是Hive,我們先看看Hive官網Wiki是如何介紹Hive的(https://cwiki.apache.org/confluence/display/Hive/Home):
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資料倉庫軟體提供對儲存在分散式中的大型資料集的查詢和管理,它本身是建立在Apache Hadoop之上,主要提供以下功能:
(1)它提供了一系列的工具,可用來對資料進行提取/轉化/載入(ETL);
(2)是一種可以儲存、查詢和分析儲存在HDFS(或者HBase)中的大規模資料的機制;
(3)查詢是通過MapReduce來完成的(並不是所有的查詢都需要MapReduce來完成,比如select * from XXX就不需要;
(4)在Hive0.11對類似select a,b from XXX的查詢通過配置也可以不通過MapReduce來完成

上面的意思很明白了.這裡再給他提煉一下:

1.hive是一個數據倉庫
2.hive基於hadoop。
總結為一句話:hive是基於hadoop的資料倉庫。

那麼上面”基於“如何講,看下面
Hive是一種建立在Hadoop檔案系統上的資料倉庫架構,並對儲存在HDFS中的資料進行分析和管理;
(也就是說對儲存在HDFS中的資料進行分析和管理,我們不想使用手工,我們建立一個工具把,那麼這個工具就可以是hive)

到此,我們已經明白hive是什麼,想更深一步的瞭解,可檢視下面內容。那麼,我們如何來分析和管理那些資料呢?
  Hive定義了一種類似SQL的查詢語言,被稱為HQL,對於熟悉SQL的使用者可以直接利用Hive來查詢資料。同時,這個語言也允許熟悉 MapReduce 開發者們開發自定義的mappers和reducers來處理內建的mappers和reducers無法完成的複雜的分析工作。Hive可以允許使用者編寫自己定義的函式UDF,來在查詢中使用。Hive中有3種UDF:User Defined Functions(UDF)、User Defined Aggregation Functions(UDAF)、User Defined Table Generating Functions(UDTF)。

  今天,Hive已經是一個成功的Apache專案,很多組織把它用作一個通用的、可伸縮的資料處理平臺。

  當然,Hive和傳統的關係型資料庫有很大的區別,Hive將外部的任務解析成一個MapReduce可執行計劃,而啟動MapReduce是一個高延遲的一件事,每次提交任務和執行任務都需要消耗很多時間,這也就決定Hive只能處理一些高延遲的應用(如果你想處理低延遲的應用,你可以去考慮一下Hbase)。同時,由於設計的目標不一樣,Hive目前還不支援事務;不能對錶資料進行修改(不能更新、刪除、插入;只能通過檔案追加資料、重新匯入資料);不能對列建立索引(但是Hive支援索引的建立,但是不能提高Hive的查詢速度。如果你想提高Hive的查詢速度,請學習Hive的分割槽、桶的應用)。

同時補充一下hive與hbase的聯絡與區別:
共同點:
1.hbase與hive都是架構在hadoop之上的。都是用hadoop作為底層儲存

區別:

2.Hive是建立在Hadoop之上為了減少MapReduce jobs編寫工作的批處理系統,HBase是為了支援彌補Hadoop對實時操作的缺陷的專案 。
3.想象你在操作RMDB資料庫,如果是全表掃描,就用Hive+Hadoop,如果是索引訪問,就用HBase+Hadoop 。
4.Hive query就是MapReduce jobs可以從5分鐘到數小時不止,HBase是非常高效的,肯定比Hive高效的多。
5.Hive本身不儲存和計算資料,它完全依賴於HDFS和MapReduce,Hive中的表純邏輯。
6.hive借用hadoop的MapReduce來完成一些hive中的命令的執行
7.hbase是物理表,不是邏輯表,提供一個超大的記憶體hash表,搜尋引擎通過它來儲存索引,方便查詢操作。
8.hbase是列儲存。
9.hdfs作為底層儲存,hdfs是存放檔案的系統,而Hbase負責組織檔案。
10.hive需要用到hdfs儲存檔案,需要用到MapReduce計算框架。