一、Hive基礎簡介
1、基礎描述
Hive是基于Hadoop的一個資料倉庫工具,用來進行資料提取、轉化、加載,是一個可以對Hadoop中的大規模存儲的資料進行查詢和分析存儲的元件,Hive資料倉庫工具能将結構化的資料檔案映射為一張資料庫表,并提供SQL查詢功能,能将SQL語句轉變成MapReduce任務來執行,使用成本低,可以通過類似SQL語句實作快速MapReduce統計,使MapReduce變得更加簡單,而不必開發專門的MapReduce應用程式。hive十分适合對資料倉庫進行統計分析。
2、組成與架構
使用者接口:ClientCLI、JDBC通路Hive、WEBUI浏覽器通路Hive。
中繼資料:Hive将中繼資料存儲在資料庫中,如mysql、derby。Hive中的中繼資料包括表的名字,表的列和分區以及屬性,表的屬性(是否為外部表等),表的資料所在目錄等。
驅動器:基于解釋器、編輯器、優化器完成HQL查詢語句從詞法分析、文法分析、編譯、優化以及查詢計劃的生成。
執行器引擎:ExecutionEngine把邏輯執行計劃轉換成可以運作的實體計劃。
Hadoop底層:基于HDFS進行存儲,使用MapReduce進行計算,基于Yarn的排程機制。
Hive收到給用戶端發送的互動請求,接收到操作指令(SQL),并将指令翻譯成MapReduce,送出到Hadoop中執行,最後将執行結果輸出到用戶端。
二、Hive環境安裝
1、準備安裝包
hive-1.2,依賴Hadoop叢集環境,位置放在hop01服務上。
2、解壓重命名
tar -zxvf apache-hive-1.2.1-bin.tar.gz
mv apache-hive-1.2.1-bin/ hive1.2
3、修改配置檔案
建立配置檔案
[root@hop01 conf]# pwd
/opt/hive1.2/conf
[root@hop01 conf]# mv hive-env.sh.template hive-env.sh
添加内容
[root@hop01 conf]# vim hive-env.sh
export HADOOP_HOME=/opt/hadoop2.7
export HIVE_CONF_DIR=/opt/hive1.2/conf
配置内容一個是Hadoop路徑,和hive配置檔案路徑。
4、Hadoop配置
首先啟動hdfs和yarn;然後在HDFS上建立/tmp和/user/hive/warehouse兩個目錄并修改賦予權限。
bin/hadoop fs -mkdir /tmp
bin/hadoop fs -mkdir -p /user/hive/warehouse
bin/hadoop fs -chmod g+w /tmp
bin/hadoop fs -chmod g+w /user/hive/warehouse
5、啟動Hive
[root@hop01 hive1.2]# bin/hive
6、基礎操作
檢視資料庫
hive> show databases ;
選擇資料庫
hive> use default;
檢視資料表
hive> show tables;
建立資料庫使用
hive> create database mytestdb;
hive> show databases ;
default
mytestdb
hive> use mytestdb;
建立表
create table hv_user (id int, name string, age int);
檢視表結構
hive> desc hv_user;
id int
name string
age int
添加表資料
insert into hv_user values (1, "test-user", 23);
查詢表資料
hive> select * from hv_user ;
注意:這裡通過對查詢日志的觀察,明顯看出Hive執行的流程。
删除表
hive> drop table hv_user ;
退出Hive
hive> quit;
檢視Hadoop目錄
# hadoop fs -ls /user/hive/warehouse
/user/hive/warehouse/mytestdb.db
通過Hive建立的資料庫和資料存儲在HDFS上。
三、整合MySQL5.7環境
這裡預設安裝好MySQL5.7的版本,并配置好相關登入賬号,配置root使用者的Host為%模式。
1、上傳MySQL驅動包
将MySQL驅動依賴包上傳到hive安裝目錄的lib目錄下。
[root@hop01 lib]# pwd
/opt/hive1.2/lib
[root@hop01 lib]# ll
mysql-connector-java-5.1.27-bin.jar
2、建立hive-site配置
[root@hop01 conf]# pwd
/opt/hive1.2/conf
[root@hop01 conf]# touch hive-site.xml
[root@hop01 conf]# vim hive-site.xml
3、配置MySQL存儲
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hop01:3306/metastore?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
<description>password to use against metastore database</description>
</property>
</configuration>
配置完成後,依次重新開機MySQL、hadoop、hive環境,檢視MySQL資料庫資訊,多了metastore資料庫和相關表。
4、背景啟動hiveserver2
[root@hop01 hive1.2]# bin/hiveserver2 &
5、Jdbc連接配接測試
[root@hop01 hive1.2]# bin/beeline
Beeline version 1.2.1 by Apache Hive
beeline> !connect jdbc:hive2://hop01:10000
Connecting to jdbc:hive2://hop01:10000
Enter username for jdbc:hive2://hop01:10000: hiveroot (賬戶回車)
Enter password for jdbc:hive2://hop01:10000: ****** (密碼123456回車)
Connected to: Apache Hive (version 1.2.1)
Driver: Hive JDBC (version 1.2.1)
0: jdbc:hive2://hop01:10000> show databases;
+----------------+--+
| database_name |
+----------------+--+
| default |
+----------------+--+
四、進階查詢文法
1、基礎函數
select count(*) count_user from hv_user;
select sum(age) sum_age from hv_user;
select min(age) min_age,max(age) max_age from hv_user;
+----------+----------+--+
| min_age | max_age |
+----------+----------+--+
| 23 | 25 |
+----------+----------+--+
2、條件查詢語句
select * from hv_user where name='test-user' limit 1;
+-------------+---------------+--------------+--+
| hv_user.id | hv_user.name | hv_user.age |
+-------------+---------------+--------------+--+
| 1 | test-user | 23 |
+-------------+---------------+--------------+--+
select * from hv_user where id>1 AND name like 'dev%';
+-------------+---------------+--------------+--+
| hv_user.id | hv_user.name | hv_user.age |
+-------------+---------------+--------------+--+
| 2 | dev-user | 25 |
+-------------+---------------+--------------+--+
select count(*) count_name,name from hv_user group by name;
+-------------+------------+--+
| count_name | name |
+-------------+------------+--+
| 1 | dev-user |
| 1 | test-user |
+-------------+------------+--+
3、連接配接查詢
select t1.*,t2.* from hv_user t1 join hv_dept t2 on t1.id=t2.dp_id;
+--------+------------+---------+-----------+-------------+--+
| t1.id | t1.name | t1.age | t2.dp_id | t2.dp_name |
+--------+------------+---------+-----------+-------------+--+
| 1 | test-user | 23 | 1 | 技術部 |
+--------+------------+---------+-----------+-------------+--+
五、源代碼位址
GitHub·位址
https://github.com/cicadasmile/big-data-parent
GitEE·位址
https://gitee.com/cicadasmile/big-data-parent