什麼是Hive——大資料倉庫Hive基礎
阿新 • • 發佈:2019-01-14
Hive是什麼:
Hive是基於Hadoop的一個數據倉庫工具,可以將結構化的資料檔案對映成一張表,並提供類SQL查詢功能;其本質是將HQL轉化成MapReduce程式。
構建在Hadoop之上的資料倉庫:
- 使用HQL作為查詢介面
- 使用HDFS儲存
- 使用MapReduce計算
靈活性和擴充套件性比較好:支援UDF,自定義儲存格式等:
適合離線資料處理
Hive體系結構:
Hive的資料儲存基於HDFS,其沒有專門的資料儲存格式,主要的儲存結構主要包括:資料庫,檔案,表,檢視,索引。
Hive預設可以直接載入文字檔案(TextFile),還支援SequenceFile,RCFile。建立表時指定Hive資料的列分隔符與行分隔符即可解析資料。
- 使用者介面:Client:
- CLI(hive shell)、JDBC/ODBC(java訪問hive),WEBUI(瀏覽器訪問hive)
- 元資料:Metastore
- 元資料包括:表名、表所屬的資料庫(預設是default)、表的擁有者、列/分割槽欄位、表的型別(是否是外部表)、表的資料所在目錄等;
- 預設儲存在自帶的derby資料庫中,推薦使用採用MySQL
- Hadoop
- 使用HDFS進行儲存,使用MapReduce進行計算
- 驅動器:Driver(包含解析器,編譯器,優化器,執行器)
- 解析器:將SQL字串轉換成抽象語法樹AST,這一步一般都用第三方工具庫完成,比如antlr;對AST進行語法分析,比如表是否存在、欄位是否存在、SQL語義是否有誤(比如select中被判定為聚合的欄位在group by中是否有出現);
- 編譯器:將AST編譯生成邏輯執行計劃;
- 優化器:對邏輯執行計劃進行優化;
- 執行器:把邏輯執行計劃轉換成可以執行的物理計劃。對於Hive來說,就是MR/TEZ/Spark;
Hive四種表型別
1.分割槽表
- 最常用
- 可以按時間日期進行分割槽
2.內部表(管理表)
- 一般建立臨時表使用內部表
- 建立的時候如果不指定是外部表,預設就是內部表
- 刪除表會將資料一併刪除
3.外部表(託管表)
- 推薦使用此方式建立表
- 建立的時候需要使用關鍵字(EXTERNAL)宣告
- 刪除表的時候只會刪除表結構不會刪除資料
4.桶表
- 不常用
- 桶表專門用於抽樣查詢,是很專業性的
- 不是日常用來儲存資料的表,需要抽樣查詢時,才建立和使用桶表。
Hive 優點與使用場景
優點:
- 操作介面採用類SQL語法,提供快速開發的能力(簡單、容易上手);
- 避免了去寫MapReduce,減少開發人員的學習成本;
- 統一的元資料管理,可與impala/spark等共享元資料;
- 易擴充套件(HDFS+MapReduce:可以擴充套件叢集規模;支援自定義函式);
使用場景:
- Hive的執行延遲比較高,因此hive常用於資料分析的,對實時性要求不高的場合;
- Hive優勢在於處理大資料,對於處理小資料沒有優勢,因為Hive的執行延遲比較高。