1. 程式人生 > >構建資料倉庫的工具Hive

構建資料倉庫的工具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以及抽樣的效率