1.構建在Hadoop之上的數據倉庫(數據計算使用MR,數據存儲使用HDFS)java
2.Hive定義了一種類SQL查詢語言----HQL
3.一般用於進行離線數據處理(非實時)
4.一個ETL工具
5.可認爲是一個HQL到MapReduce的語言翻譯器,將HQL轉化成MP來執行
6.多維度數據分析
7.大部分互聯網公司使用Hive進行日誌分析
8.海量結構化數據離線分析,低成本進行數據分析(不直接編寫MR)
HDFS 存儲數據
YARN 資源管理
MapReduce 處理數據
Hive是什麼?
* 處理的數據存儲在HDFS
* 分析數據底層的實現MapReduce
* 執行程序運行的YARN
一、由Facebook開源用於解決海量結構化日誌的數據統計;
二、
Hive是基於Hadoop的一個數據倉庫工具,能夠將結構化的數據文件映射成一張表,並提供類SQL查詢功能;
三、構建在Hadoop之上的數據倉庫;
使用HQL做爲查詢接口;
使用HDFS存儲;
使用MapReduce計算;
本質是:
將HQL轉化成MapReduce程序
Hive 架構(a、b、c、d)
a: 用戶接口:Client
CLI(hive shell)、JDBC/ODBC(java訪問hive),WEBUI(瀏覽器訪問hive)
b:元數據:Metastore(一般存儲在關係型數據庫中,好比MySql)
元數據包括:表名、表所屬的數據庫(默認是default)、表的擁有者、列/分區字段、表的類型(是不是外部表)、表的數據所在目錄(該表對應的數據文件存儲位置)等;
默認存儲在自帶的derby數據庫中,推薦使用採用MySQL存儲Metastore;
c:Hadoop
使用HDFS進行存儲,使用MapReduce進行計算;
d:驅動器:Driver
包含:解析器、編譯器、優化器、執行器;
解析器:將sql字符串轉換成抽象語法樹AST,這一步通常都用第三方工具庫完成,好比antlr;對AST進行語法分析,好比表是否存在、字段是否存在、sql語義是否有誤(好比select中被斷定爲聚合的字段在group by中是否有出現);
編譯器:將AST編譯生成邏輯執行計劃;
優化器:對邏輯執行計劃進行優化;
執行器:把邏輯執行計劃轉換成能夠運行的物理計劃。對於Hive來講,就是MR/TEZ/Spark;
Hive優勢
一、操做接口採用類SQL語法,提供快速開發的能力(簡單、容易上手);
二、避免了去寫MapReduce,減小開發人員的學習成本;
三、統一的元數據管理,可與impala/spark等共享元數據;
四、易擴展(HDFS+MapReduce:能夠擴展集羣規模;支持自定義函數);
Hive使用場景
一、數據的離線處理;好比:日誌分析,海量數據化數據離線分析。。。
二、Hive的執行延遲比較高,所以hive經常使用於數據分析的,對實時性要求不高的場合;
三、Hive優點在於處理大數據,對於處理小數據沒有優點,由於Hive的執行延遲比較高。
RDBMS關係型數據庫 表的概念
SQL on Hadoop---HiveQL hql
ETL