簡介
一、Hadoop開發存在的問題
- 只能用java語言開發,如果是c語言或其他語言的程序員用Hadoop,存在語言門檻
- 需要對Hadoop底層原理,api比較瞭解才能做開發
- 開發調試比較麻煩
二、Hive概述
- Hive是基於Hadoop的一個數據倉庫工具。可以將結構化的數據文件映射爲一張表,並提供完整的sql查詢功能
- 底層是將sql語句轉換爲MapReduce任務進行運行
- Hive提供了一系列的工具,可以用來進行數據提取、轉化、加載(ETL Extract-Transform-Load ),這是一種可以存儲、查詢和分析存儲在 Hadoop 中的大規模數據的機制
- 本質上是一種大數據離線分析工具
三、Hive的HQL
- HQL - Hive通過類SQL的語法,來進行分佈式的計算
- HQL用起來和SQL非常的類似,Hive在執行的過程中會將HQL轉換爲MapReduce去執行,所以Hive其實是基於Hadoop的一種分佈式計算框架,底層仍然是MapReduce
四、特點
- 優點:
a. 學習成本低,只要會sql就能用hive
b. 開發效率高,不需要編程,只需要寫sql
c. 模型簡單,易於理解
d. 針對海量數據的高性能查詢和分析
e. HiveQL 靈活的可擴展性(Extendibility)
f. 高擴展性(Scalability)和容錯性
g. 與 Hadoop 其他產品完全兼容 - 缺點:
a. 不支持行級別的增刪改
b. 不支持完整的在線事務處理
c. 本質上仍然是MR的執行,效率不算高
五、適用場景
- Hive 構建在基於靜態(離線)批處理的Hadoop 之上,Hadoop 通常都有較高的延遲並且在作業提交和調度的時候需要大量的開銷。因此,Hive 並不能夠在大規模數據集上實現低延遲快速的查詢因此,Hive 並不適合那些需要低延遲的應用
- Hive 並不提供實時的查詢和基於行級的數據更新操作。Hive 的最佳使用場合是大數據集的離線批處理作業,例如,網絡日誌分析。
數據倉庫和數據庫對比
一、數據倉庫和數據庫對比
數據庫 | 數據倉庫 |
---|---|
爲線上系統提供實時數據 | 爲離線分析存儲歷史數據 |
具有完整的增刪改查的能力 | 只支持一次寫入多次查詢,不支持行級別的增刪改 |
具有完整的事務能力 | 不強調事務的特性 |
儘量的避免冗餘,提高存儲和處理的效率 | 人爲的製造冗, 提高查詢的效率 |
數據來源單一 | 數據來源多樣(數據庫,爬蟲,日誌等) |
二、OLTP和OLAP對比
- 數據庫屬於OLTP系統(Online Transaction Processing)聯機事務處理系統。涵蓋了企業大部分的日常操作,如購物、庫存、製造、銀行、工資、註冊、記賬等。比如Mysql,oracle等關係型數據庫;數據倉庫屬於OLAP系統。(Online Analytical Processing)聯機分析處理系統。Hive,Hbase等
- OLTP是面向用戶的、用於程序員的事務處理以及客戶的查詢處理;OLAP是面向市場的,用於知識工人(經理、主管和數據分析人員)的數據分析
- OLAP通常會集成多個異構數據源的數據,數量巨大;OLTP系統的訪問由於要保證原子性,所以有事務機制和恢復機制
- OLAP系統一般存儲的是歷史數據,所以大部分都是隻讀操作,不需要事務;OLTP系統具有較強的事務
體系結構
1. 用戶接口主要有三個:CLI,JDBC 和 WUI
a. CLI,最常用的模式。實際上在>hive 命令行下操作時,就是利用CLI用戶接口
b. JDBC,通過java代碼操作,需要啓動hiveserver,然後連接操作
2. Metastore
Hive將元數據存儲在數據庫中,如mysql、derby。Hive中的元數據包括表的名字,表的列和分區及其屬性,表的屬性(是否爲外部表等),表的數據所在目錄等
3. 解釋器(complier)、優化器(optimizer)、執行器(executor)組件
這三個組件用於:HQL語句從詞法分析、語法分析、編譯、優化以及查詢計劃的生成。生成的查詢計劃存儲在HDFS中,並在隨後有MapReduce調用執行
4. Hadoop
Hive的數據存儲在HDFS中,大部分的查詢、計算由MapReduce完成
流程
1.通過客戶端提交一條Hql語句
2.通過complier(編譯組件)對Hql進行詞法分析、語法分析。在這一步,編譯器要知道此hql語句到底要操作哪張表
3.去元數據庫找表信息
4.得到信息
5.complier編譯器提交Hql語句分析方案。
6.1 executor 執行器收到方案後,執行方案(DDL過程)。在這裏注意,執行器在執行方案時,會判斷
如果當前方案不涉及到MR組件,比如爲表添加分區信息、比如字符串操作等,比如簡單的查詢操作等,此時就會直接和元數據庫交互,然後去HDFS上去找具體數據。
如果方案需要轉換成MR job,則會將job 提交給Hadoop的JobTracker。
6.2 MR job完成,並且將運行結果寫入到HDFS上。
6.3 執行器和HDFS交互,獲取結果文件信息。
7.如果客戶端提交Hql語句是帶有查詢結果性的,則會發生:7-8-9步,完成結果的查詢。
安裝Hive
- 安裝JDK
- 安裝Hadoop
- 配置JDK和Hadoop的環境變量
- 下載Hive安裝包
http://mirror.bit.edu.cn/apache/hive/hive-1.2.2/ - 解壓安裝hive
解壓:tar -xvf apache-hive-1.2.2-bin.tar.gz
改名:mv apache-hive-1.2.2-bin hive-1.2.2
我的路徑:/home/software/hive-1.2.2
- 啓動Hadoop的HDFS和Yarn
之前我們已經裝過hadoop了。所以直接啓動即可,注意hive需要hadoop的支持所以要放到一個機器上
- 進入到bin目錄,啓動Hive:sh hive (或者執行:./hive)
安裝成功
注意如果你用的高版本要看和hadoop的兼容。