一、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&createDatabaseIfNotExist=true&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的缺點
1)Hive的HQL表達能力有限
(1)迭代式算法無法表達
(2)數據挖掘方面不擅長,由於MapReduce數據處理流程的限制,效率更高的算法卻無法實現。
2)Hive的效率比較低
(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
3)Hadoop
使用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中執行,最后,將執行返回的結果輸出到用戶交互接口。
6、Hive與傳統數據庫比較
1. 查詢語言。類 SQL 的查詢語言 HQL。熟悉 SQL 開發的開發者可以很方便的使用 Hive 進行開發。
2. 數據存儲位置。所有 Hive 的數據都是存儲在 HDFS 中的。而數據庫則可以將數據保存在塊設備或者本地文件系統中。
3. 數據格式。Hive 中沒有定義專門的數據格式。而在數據庫中,所有數據都會按照一定的組織存儲,因此,數據庫加載數據的過程會比較耗時。
4. 數據更新。Hive 對數據的改寫和添加比較弱化,0.14版本之后支持,需要啟動配置項。而數據庫中的數據通常是需要經常進行修改的。
5. 索引。Hive 在加載數據的過程中不會對數據進行任何處理。因此訪問延遲較高。數據庫可以有很高的效率,較低的延遲。由於數據的訪問延遲較高,決定了 Hive 不適合在線數據查詢。
6. 執行計算。Hive 中執行是通過 MapReduce 來實現的而數據庫通常有自己的執行引擎。
7. 數據規模。由於 Hive 建立在集群上並可以利用 MapReduce 進行並行計算,因此可以支持很大規模的數據;對應的,數據庫可以支持的數據規模較小。