[TOC]
# Hive簡介及安裝
## 1. Hive基本概念
### > Hive簡介
#### 1.1.1 什么是Hive
> Hive是基于Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射為一張數據庫表,并提供類SQL查詢功能。
#### 1.1.2 為什么使用Hive
1) 直接使用hadoop所面臨的問題
> 人員學習成本太高
> 項目周期要求太短
> MapReduce實現復雜查詢邏輯開發難度太大
2) 為什么要使用Hive
> 操作接口采用類SQL語法,提供快速開發的能力。
> 避免了去寫MapReduce,減少開發人員的學習成本。
> 功能擴展很方便。
#### 1.1.3 Hive的特點
1) 可擴展
> Hive可以自由的擴展集群的規模,一般情況下不需要重啟服務。
2) 延展性
> Hive支持用戶自定義函數,用戶可以根據自己的需求來實現自己的函數。
3) 容錯
> 良好的容錯性,節點出現問題SQL仍可完成執行。
### 1.2 Hive架構
#### 1.2.1 架構圖

#### 1.2.2 基本組成
1. 用戶接口:包括 CLI、JDBC/ODBC、WebGUI。
2. 元數據存儲:通常是存儲在關系數據庫如 mysql , derby中。
3. 解釋器、編譯器、優化器、執行器。
#### 1.2.3 各組件的基本功能
1. 用戶接口主要由三個:CLI、JDBC/ODBC和WebGUI。其中,CLI為shell命令行;JDBC/ODBC是Hive的JAVA實現,與傳統數據庫JDBC類似;WebGUI是通過瀏覽器訪問Hive。
2. 元數據存儲:Hive 將元數據存儲在數據庫中。Hive 中的元數據包括表的名字,表的列和分區及其屬性,表的屬性(是否為外部表等),表的數據所在目錄等。
3. 解釋器、編譯器、優化器完成 HQL 查詢語句從詞法分析、語法分析、編譯、優化以及查詢計劃的生成。生成的查詢計劃存儲在 HDFS 中,并在隨后有 MapReduce 調用執行。
### 1.3 Hive與Hadoop的關系
> Hive利用HDFS存儲數據,利用MapReduce查詢分析數據

### 1.4 Hive與傳統數據庫對比
> hive用于海量數據的離線數據分析

> 總結:hive具有關系型數據庫的查詢分析功能,但應用場景完全不同,hive只適合用來做批量數據統計分析,數據量大、對應的延遲較高!
### 1.5 Hive的數據存儲
1、 Hive中所有的數據都存儲在 HDFS 中,沒有專門的數據存儲格式(可支持Text,SequenceFile,ParquetFile,RCFILE等)
> SequenceFile是hadoop中的一種文件格式:
> 文件內容是以序列化的kv對象來組織的
2、只需要在創建表的時候告訴 Hive 數據中的列分隔符和行分隔符,Hive 就可以解析數據。
3、Hive 中包含以下數據模型:DB、Table,External Table,Partition,Bucket。
> db:在hdfs中表現為${hive.metastore.warehouse.dir}目錄下一個文件夾
> table:在hdfs中表現所屬db目錄下一個文件夾
> external table:與table類似,不過其數據存放位置可以在任意指定路徑
> partition:在hdfs中表現為table目錄下的子目錄
> bucket:在hdfs中表現為同一個表目錄下根據hash散列之后的多個文件
### 1.6 HIVE的安裝部署
#### 1.6.1 安裝
> derby版:
1. 解壓hive
2. 解決一下版本不兼容問題:替換 /var/local/hadoop/share/hadoop/yarn/lib中的老版本jline 為hive的lib中的jline-2.12.jar
> 缺點:多個地方安裝hive后,每一個hive是擁有一套自己的元數據,大家的庫、表就不統一;
> 元數據庫mysql版:
1. 解壓
2. 修改配置文件
3. 加載mysql數據驅動包
#### 1.6.2 使用方式
1) Hive交互shell
~~~
bin/hive
~~~
2) Hive JDBC服務

> hive也可以啟動為一個服務器,來對外提供
~~~
啟動方式,(假如是在itcast01上):
啟動為前臺:bin/hiveserver2
啟動為后臺:nohup bin/hiveserver2 1>/var/log/hiveserver.log 2>/var/log/hiveserver.err &
~~~
> 啟動成功后,可以在別的節點上用beeline去連接
> 方式(1)
> hive/bin/beeline 回車,進入beeline的命令界面
> 輸入命令連接hiveserver2
> beeline> !connect jdbc:hive2://itcast01:10000
> (itcast01是hiveserver2所啟動的那臺主機名,端口默認是10000)
> 方式(2)
> 或者啟動就連接:
~~~
bin/beeline -u jdbc:hive2://itcast01:10000 -n root
~~~
> 接下來就可以做正常sql查詢了
- hadoop
- linux基礎
- Linux入門
- Linux進階
- shell
- Zookeeper
- Zookeeper簡介及部署
- Zookeeper使用及API
- Redis
- Redis簡介安裝部署
- Redis使用及API
- Java高級增強
- Java多線程增強
- Maven簡介及搭建
- Hive
- Hive簡介及安裝
- Hive操作
- HIve常用函數
- Hive數據類型
- Flume
- Flume簡介及安裝
- flume 攔截器(interceptor)
- azkaban
- azKaban簡介及安裝
- Sqoop
- Sqoop簡介及安裝
- HDFS
- HDFS原理
- HDFS操作API
- MAPREDUCE原理
- MAPREDUCE圖片資源
- MAPREDUCE加強
- HBASE
- HBASE簡介及安裝
- HBASE操作及API
- HBASE內部原理
- Storm
- Storm簡介及安裝
- Storm原理
- kafka
- kafka簡介及安裝
- kafka常用操作及API
- kafka原理
- kafka配置詳解
- Scala
- Scala簡介及安裝
- Scala基礎語法
- Scala實戰