1. 程式人生 > >資料倉庫元件:Hive環境搭建和基礎用法

資料倉庫元件:Hive環境搭建和基礎用法

本文原始碼:[GitHub](https://github.com/cicadasmile/big-data-parent) || [GitEE](https://gitee.com/cicadasmile/big-data-parent) # 一、Hive基礎簡介 **1、基礎描述** Hive是基於Hadoop的一個數據倉庫工具,用來進行資料提取、轉化、載入,是一個可以對Hadoop中的大規模儲存的資料進行查詢和分析儲存的元件,Hive資料倉庫工具能將結構化的資料檔案對映為一張資料庫表,並提供SQL查詢功能,能將SQL語句轉變成MapReduce任務來執行,使用成本低,可以通過類似SQL語句實現快速MapReduce統計,使MapReduce變得更加簡單,而不必開發專門的MapReduce應用程式。hive十分適合對資料倉庫進行統計分析。 **2、組成與架構** ![](https://img2020.cnblogs.com/blog/1691717/202101/1691717-20210103225539496-461576247.png) **使用者介面**: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 ``` 配置完成後,依次重啟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、基礎函式** ```sql 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、條件查詢語句** ```sql 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、連線查詢** ```sql 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 ``` **推薦閱讀:程式設計體系整理** |序號|專案名稱|GitHub地址|GitEE地址|推薦指數| |:---|:---|:---|:---|:---| |01|Java描述設計模式,演算法,資料結構|[GitHub·點這裡](https://github.com/cicadasmile/model-arithmetic-parent)|[GitEE·點這裡](https://gitee.com/cicadasmile/model-arithmetic-parent)|☆☆☆☆☆| |02|Java基礎、併發、面向物件、Web開發|[GitHub·點這裡](https://github.com/cicadasmile/java-base-parent)|[GitEE·點這裡](https://gitee.com/cicadasmile/java-base-parent)|☆☆☆☆| |03|SpringCloud微服務基礎元件案例詳解|[GitHub·點這裡](https://github.com/cicadasmile/spring-cloud-base)|[GitEE·點這裡](https://gitee.com/cicadasmile/spring-cloud-base)|☆☆☆| |04|SpringCloud微服務架構實戰綜合案例|[GitHub·點這裡](https://github.com/cicadasmile/husky-spring-cloud)|[GitEE·點這裡](https://gitee.com/cicadasmile/husky-spring-cloud)|☆☆☆☆☆| |05|SpringBoot框架基礎應用入門到進階|[GitHub·點這裡](https://github.com/cicadasmile/spring-boot-base)|[GitEE·點這裡](https://gitee.com/cicadasmile/spring-boot-base)|☆☆☆☆| |06|SpringBoot框架整合開發常用中介軟體|[GitHub·點這裡](https://github.com/cicadasmile/middle-ware-parent)|[GitEE·點這裡](https://gitee.com/cicadasmile/middle-ware-parent)|☆☆☆☆☆| |07|資料管理、分散式、架構設計基礎案例|[GitHub·點這裡](https://github.com/cicadasmile/data-manage-parent)|[GitEE·點這裡](https://gitee.com/cicadasmile/data-manage-parent)|☆☆☆☆☆| |08|大資料系列、儲存、元件、計算等框架|[GitHub·點這裡](https://github.com/cicadasmile/big-data-parent)|[GitEE·點這裡](https://gitee.com/cicadasmile/big-data-parent)|☆☆