背景:
- MapReduce is hard to program
- No Schema, lack of query lanaguages, eg. SQL
數據分析,針對DBA、SQL語句,如何對數據分析MapReduce編程成本高FaceBook 實現並開源Hive
什麼是Hive?:
- 由Facebook開源用於解決海量結構化日誌的數據統計;
- Hive是基於Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射 成一張表,並提供類SQL查詢功能;
- 構建在Hadoop之上的數據倉庫;
- 使用HQL作爲查詢接口;
- 使用HDFS存儲;
- 使用MapReduce計算;
- 本質是:將HQL轉化成MapReduce程序
- 靈活性和擴展性比較好:支持UDF,自定義存儲格式等;
- 適合離線數據處理
Hive在Hadoop生態系統中的位置:
Hive架構:
- 用戶接口: Client CLI(hive shell)、JDBC/ODBC(java訪問hive),WEBUI(瀏覽器訪問hive)
- 元數據: Metastore 元數據包括:表名、表所屬的數據庫(默認是default)、表的擁有者、列/ 分區字段、表的類型(是否是外部表)、表的數據所在目錄等;默認存儲在自帶的derby數據庫中,推薦使用採用MySQL存儲Metastore;
- Hadoop 使用HDFS進行存儲,使用MapReduce進行計算;
- 驅動器: 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的執 行延遲比較高
相關配置:
# Set HADOOP_HOME to point to a specific hadoop install directory HADOOP_HOME=/usr/hadoop-2.6.1 # Hive Configuration Directory can be controlled by: export HIVE_CONF_DIR=/usr/hive-1.2.2/conf
5、然後在hdfs文件系統中創建如下文件夾
$ $HADOOP_HOME/bin/hadoop fs -mkdir /tmp $ $HADOOP_HOME/bin/hadoop fs -mkdir /user/hive/warehouse $ $HADOOP_HOME/bin/hadoop fs -chmod g+w /tmp $ $HADOOP_HOME/bin/hadoop fs -chmod g+w /user/hive/warehouse
6、在Hive目錄內輸入以下命令啓動Hive(交互式命令行)
bin/hive