hive--------總結

1.hive是什麼?mysql

   hive是創建在Hadoop之上的數據倉庫架構,
sql

   它提供了一系列的工具,對數據進行提取轉化加載(ETL),這是一種能夠對存儲在hadoop中的大規模的數據的存儲,查詢和分析的機制。
數據庫

   它提供了類sql語言,可讓熟悉sql的開發人員查詢數據。
架構

   同時這個語言也容許熟悉MapReduce的開發人員自定義Mapper和Reducer來處理內建的Mapper和Reducer完成複雜的分析工做。
app

2.hive的缺點?分佈式

   hive是基於hadoop的,hadoop是分佈式系統,不能保證低延遲,所以hive的查詢也不能保證低延遲,
ide

3.hive設計的目標?工具

   可擴展:Hive能夠自由的擴展集羣的規模,通常狀況下不須要重啓服務oop

   可容錯:良好的容錯性,節點出現問題SQL仍可完成執行優化

   可伸縮,及輸入格式鬆耦合,

4.hive的體系結構

   主要分爲如下幾個部分:

   4.1用戶接口:包括CLI CLIENT WEBUI

   4.2中間件:包括thrift和JDBC/ODBC的服務端,用於整合hive和其餘程序

   4.3元數據:一般是存儲在關係數據庫如 mysql, derby 中的系統參數

   4.4底層驅動:包括HiveQL解釋器、編譯器、優化器、執行器(引擎)

   4.5hadoop :用 HDFS 進行存儲,利用 MapReduce 進行計算。(大部分查詢會由MapReduce完成,包括*的查詢不會生成MapReduce任務)

5.hive整個建立表的過程

   5.1用戶提交hive語句,對其進行解析,分解爲表,分區,字段等hive對象,

   5.2根據解析到的信息構建對應的表,分區,字段對象,從SEQUENCE_TABLE中獲取構建對象的最新ID,與構建對象信息一塊兒寫到元數據表中,成功後將SEQUENCE_TABLE中對應的ID+5.

6.hive的數據存儲

   6.1hive中沒有專門的數據存儲的格式,也沒有爲數據創建索引,用戶能夠很是自由的組織hive中的表,只須要在建立表的時候制定表的行分隔符和列分隔符,hive就能夠解析數據。

   6.2hive中的數據都存儲在HDFS中,hive中包含如下數據模型:

           Table,hdfs中的一個目錄

           External Table,指向的是hdfs中已經存在的目錄,

           Partition,分區就是表的目錄下的一個子目錄

           Bucket,若是有分區,桶就是分區下的一個單位,若是沒有分區,桶就是表下的單位,桶通常是文件的形式。(對制定列進行hash計算,根據hash進行切分數據,目的是爲了並行)

   6.3

· Table 的建立過程和數據加載過程(這兩個過程能夠在同一個語句中完成),在加載數據的過程當中,實際數據會被移動到數據倉庫目錄中;以後對數據對訪問將會直接在數據倉庫目錄中完成。刪除表時,表中的數據和元數據將會被同時刪除。

· External Table 只有一個過程,加載數據和建立表同時完成(CREATE EXTERNAL TABLE ……LOCATION),實際數據是存儲在 LOCATION 後面指定的 HDFS 路徑中,並不會移動到數據倉庫目錄中。當刪除一個 External Table 時,僅刪除


-----------------------------

7.hive和RDBMS的區別:

   7.1數據更新:

       因爲hive是針對數據倉庫設計的,而數據倉庫的數據是讀多寫少的,所以hive不支持對數據的改寫和添加,全部的數據都是在加載的時候肯定的。



8.語言能力:

   

   hive查詢語言提供基本的類sql操做,這些操做基於tablepartition,包括:
   1. 使用where語句過濾制定行
   2. 使用select查找指定列
   3. join兩張table
   4. group by
   5. 一個表的查詢結果存入另外一張表
   6. 將一個表的內容存入本地目錄
   7. 將查詢結果存儲到hdfs
   8. 管理tablepartition(creatdropalert)
   9. 在查詢中嵌入map-reduce程序

相關文章
相關標籤/搜索