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操做,這些操做基於table和partition,包括:
1. 使用where語句過濾制定行
2. 使用select查找指定列
3. join兩張table
4. group by
5. 一個表的查詢結果存入另外一張表
6. 將一個表的內容存入本地目錄
7. 將查詢結果存儲到hdfs上
8. 管理table和partition(creat、drop、alert)
9. 在查詢中嵌入map-reduce程序