構建資料倉庫的工具Hive
Hive簡介
什麼是Hive hive是基於Hadoop的一個數據倉庫工具,可以將結構化的資料檔案對映為一張資料庫表,並提供的sql查詢功能,可以將sql語句轉換為MapReduce任務進行執行。 其優點是學習成本低,可以通過類SQL語句快速實現簡單的MapReduce統計,不必開發專門的MapReduce應用,十分適合資料倉庫的統計分析。
Hive的架構 (1)使用者介面主要有三個:CLI,Client 和 WUI。其中最常用的是CLI,Cli啟動的時候,會同時啟動一個Hive副本。Client是Hive的客戶端,使用者連線至Hive Server。在啟動 Client模式的時候,需要指出Hive Server所在節點,並且在該節點啟動Hive Server。 WUI是通過瀏覽器訪問Hive。 (2)Hive將元資料儲存在資料庫中,如mysql、derby。Hive中的元資料包括表的名字,表的列和分割槽及其屬性,表的屬性(是否為外部表等),表的資料所在目錄等。 (3)直譯器、編譯器、優化器完成HQL查詢語句從詞法分析、語法分析、編譯、優化以及查詢計劃的生成。生成的查詢計劃儲存在HDFS中,並在隨後有MapReduce呼叫執行。 (4)Hive的資料儲存在HDFS中,大部分的查詢、計算由MapReduce完成(包含*的查詢,比如select * from tbl不會生成MapRedcue任務)。
搭建Hive的方法
1.基於derby的本地方式 derby與hive工具在同一個節點,缺點:不支援多個使用者同時連結。 2.基於mysql的本地模式 (1)執行hadoop叢集 (2)安裝mysql資料庫 yum install mysql-server -y (3)配置環境變數: HADOOP_HOME= HIVE_HOME= (4)修改KaTeX parse error: Expected 'EOF', got '\lib' at position 12: HADOOP_HOME\̲l̲i̲b̲目錄下的jline-*.jar…HIVE_HOME\lib下的jline-2.12.jar (5)拷貝mysql驅動包到$HIVE_HOME\lib目錄下 (6)修改hive-site.xml
<property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive_remote/warehouse</value> </property> <property> <name>hive.metastore.local</name> <value>true</value> </property> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://localhost/hive_meta?createDatabaseIfNotExist=true</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>hive</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>password</value> </property>
(7)修改mysql許可權並建立hive_meta資料庫:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123' WITH GRANT OPTION;
flush privileges;
進入mysql.user表刪除多餘會對許可權造成影響的資料 新增使用者和資料庫:
CREATE USER 'hive'@'%' IDENTIFIED BY '123';
CREATE DATABASE hive_meta;
grant all privileges on hive_meta.* to [email protected]"%" identified by '123';
flush privileges;
3.基於mysql的遠端模式 (1)服務端配置檔案
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://192.168.57.6:3306/hive?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</property>
(2)客戶端配置檔案
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>hive.metastore.local</name>
<value>false</value>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://192.168.57.5:9083</value>
</property>
(3)啟動hive服務端程式
hive --service metastore >> /tmp/meta.log 2>&1 &
(4)客戶端直接使用hive命令即可
Hive表種類
- 內部表(受控表) 完全被Hive控制,刪除內部表,元資料、源資料一同被刪除
- 臨時表 生命週期是一次會話,主要用於測試
- 外部表 不是完全受Hive控制,源資料可以在任何的目錄下,刪除外部表,源資料不會被刪除,只是刪除元資料
- 分割槽表 將源資料分到不同的Hive工作目錄中儲存,一個分割槽對應一個目錄,防止暴力掃描全表
- 分桶表 將大檔案拆分成小檔案來儲存,提升join以及抽樣的效率