一、hive的安裝

注意:安裝hive的前提要安裝好MySQL和Hadoop

Hadoop安裝:https://www.cnblogs.com/lmandcc/p/15306163.html

MySQL的安裝:https://www.cnblogs.com/lmandcc/p/15224657.html

安裝hive首先需要啟動Hadoop

1、解壓hive的安裝包
tar -zxvf apache-hive-1.2.1-bin.tar.gz

修改下目錄名稱
mv apache-hive-1.2.1-bin hive-1.2.1

2、備份配置檔案

cd /usr/local/soft/hive-1.2.1/conf
cp hive-env.sh.template hive-env.sh
cp hive-default.xml.template hive-site.xml

3、修改配置檔案
vim hive.env.sh
新加三行配置(路徑不同就更具實際情況來):
    HADOOP_HOME=/usr/local/soft/hadoop-2.7.6
    JAVA_HOME=/usr/local/soft/jdk1.8.0_171
    HIVE_HOME=/usr/local/soft/hive-1.2.1

4、修改配置檔案
vim hive-site.xml
修改對應的配置引數(注意:是修改不是新增)

 1 <property>
2 <name>javax.jdo.option.ConnectionURL</name>
3 <value>jdbc:mysql://master:3306/hive?characterEncoding=UTF-8&amp;createDatabaseIfNotExist=true&amp;useSSL=false</value>
4 </property>
5 <property>
6 <name>javax.jdo.option.ConnectionDriverName</name>
7 <value>com.mysql.jdbc.Driver</value>
8 </property>
9 <property>
10 <name>javax.jdo.option.ConnectionUserName</name>
11 <value>root</value>
12 </property>
13 <property>
14 <name>javax.jdo.option.ConnectionPassword</name>
15 <value>123456</value>
16 </property>
17 <property>
18 <name>hive.querylog.location</name>
19 <value>/usr/local/soft/hive-1.2.1/tmp</value>
20 </property>
21 <property>
22 <name>hive.exec.local.scratchdir</name>
23 <value>/usr/local/soft/hive-1.2.1/tmp</value>
24 </property>
25 <property>
26 <name>hive.downloaded.resources.dir</name>
27 <value>/usr/local/soft/hive-1.2.1/tmp</value>
28 </property>

5、複製mysql連線工具包到hive/lib
cd /usr/local/soft/hive-1.2.1
cp /usr/local/moudle/mysql-connector-java-5.1.49.jar /usr/local/soft/hive-1.2.1/lib/

6、刪除hadoop中自帶的jline-2.12.jar位置在/usr/local/soft/hadoop-2.7.6/share/hadoop/yarn/lib/jline-2.12.jar
rm -rf /usr/local/soft/hadoop-2.7.6/share/hadoop/yarn/lib/jline-2.12.jar
7、把hive自帶的jline-2.12.jar複製到hadoop中 hive中所在位置 /usr/local/soft/hive-1.2.1/lib/jline-2.12.jar
cp /usr/local/soft/hive-1.2.1/lib/jline-2.12.jar /usr/local/soft/hadoop-2.7.6/share/hadoop/yarn/lib/
8、啟動
hive

二、hive的概述

 1、hive簡介

Hive:由Facebook開源用於解決海量結構化日誌的資料統計工具。

Hive是基於Hadoop的一個數據倉庫工具,可以將結構化的資料檔案對映為一張表,並提供類SQL查詢功能。

Hive 是建立在 Hadoop 上的資料倉庫基礎構架。它提供了一系列的工具,可以用來進行資料提取轉化載入(ETL ),這是一種可以儲存、查詢和分析儲存在 Hadoop 中的大規模資料的機制。Hive 定義了簡單的類 SQL 查詢語言,稱為 HQL ,它允許熟悉 SQL 的使用者查詢資料。同時,這個語言也允許熟悉 MapReduce 開發者的開發自定義的 mapper 和 reducer 來處理內建的 mapper 和 reducer 無法完成的複雜的分析工作。

資料倉庫,英文名稱為Data Warehouse,可簡寫為DW或DWH。資料倉庫,是為企業所有級別的決策制定過程,提供所有型別資料支援的戰略集合。它出於分析性報告和決策支援目的而建立。為需要業務智慧的企業,提供指導業務流程改進、監視時間、成本、質量以及控制。

2、Hive本質:將HQL轉化成MapReduce程式

(1)Hive處理的資料儲存在HDFS

(2)Hive分析資料底層的實現是MapReduce

(3)執行程式執行在Yarn上

 3、hive的優點

(1)操作介面採用類SQL語法,提供快速開發的能力(簡單、容易上手)。

(2)避免了去寫MapReduce,減少開發人員的學習成本。

(3)Hive的執行延遲比較高,因此Hive常用於資料分析,對實時性要求不高的場合。

(4)Hive優勢在於處理大資料,對於處理小資料沒有優勢,因為Hive的執行延遲比較高。

(5)Hive支援使用者自定義函式,使用者可以根據自己的需求來實現自己的函式。

4、hive的缺點

1Hive的HQL表達能力有限

(1)迭代式演算法無法表達

(2)資料探勘方面不擅長,由於MapReduce資料處理流程的限制,效率更高的演算法卻無法實現。

2Hive的效率比較低

(1)Hive自動生成的MapReduce作業,通常情況下不夠智慧化

(2)Hive調優比較困難,粒度較粗

5、Hive架構原理

1使用者介面:Client

CLI(command-line interface)、JDBC/ODBC(jdbc訪問hive)、WEBUI(瀏覽器訪問hive)

2元資料:Metastore

元資料包括:表名、表所屬的資料庫(預設是default)、表的擁有者、列/分割槽欄位、表的型別(是否是外部表)、表的資料所在目錄等;

預設儲存在自帶的derby資料庫中,推薦使用MySQL儲存Metastore

3Hadoop

使用HDFS進行儲存,使用MapReduce進行計算。

4驅動器:Driver

(1)解析器(SQL Parser):將SQL字串轉換成抽象語法樹AST,這一步一般都用第三方工具庫完成,比如antlr;對AST進行語法分析,比如表是否存在、欄位是否存在、SQL語義是否有誤。

(2)編譯器(Physical Plan):將AST編譯生成邏輯執行計劃。

(3)優化器(Query Optimizer):對邏輯執行計劃進行優化。

(4)執行器(Execution):把邏輯執行計劃轉換成可以執行的物理計劃。對於Hive來說,就是MR/Spark。

Hive通過給使用者提供的一系列互動介面,接收到使用者的指令(SQL),使用自己的Driver,結合元資料(MetaStore),將這些指令翻譯成MapReduce,提交到Hadoop中執行,最後,將執行返回的結果輸出到使用者互動介面。