1. 程式人生 > >22-hadoop-hive搭建

22-hadoop-hive搭建

外部 過濾 更改 會同 ive client模式 get share dfs

1, hive簡介

hive是基於Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射為一張數據庫表,並提供簡單的sql查詢功能,可以將sql語句轉換為MapReduce任務進行運行。 其優點是學習成本低,可以通過類SQL語句快速實現簡單的MapReduce統計,不必開發專門的MapReduce應用,十分適合數據倉庫的統計分析。是為了非java人員對hdfs進行mapreduce操作的

數據倉庫,英文名稱為Data Warehouse,可簡寫為DW或DWH。數據倉庫,是為企業所有級別的決策制定過程,提供所有類型數據支持的戰略集合。它是單個數據存儲,出於分析性報告和決策支持目的而創建。 為需要業務智能的企業,提供指導業務流程改進、監視時間、成本、質量以及控制,簡而言之,數據倉庫是用來做查詢分析的數據庫,基本不用來做插入,修改,刪除

hive的本質為: 線下數據挖掘和分析使用的工具

解釋器: 解釋sql語句
編譯器: (將sql編譯為maperduce), 
優化器: 對編譯過程優化

2, 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 QL轉換操作符
?操作符是Hive的最小的處理單元
?每個操作符代表HDFS的一個操作或者一道MapReduce作業

3, 實現原理

技術分享

Operator都是hive定義的一個處理過程
?Operator都定義有:
?
protected List <Operator<? extends Serializable >> childOperators; ?protected List <Operator<? extends Serializable >> parentOperators; ?protected boolean done; // 初始化值為false ?所有的操作構成了 Operator圖,hive正是基於這些圖關系來處理諸如limit, group by, join等操作

使用Antlr解析hql語句的

技術分享

4, 執行流程

hive通過 ExecMapper 和 ExecReduce 執行mapreduce任務

TableScanOperator    掃描hive表數據
ReduceSinkOperator    創建將發送到Reducer端的<Key,Value>對
JoinOperator    Join兩份數據
SelectOperator    選擇輸出列
FileSinkOperator    建立結果數據,輸出至文件
FilterOperator    過濾輸入數據
GroupByOperator    GroupBy語句
MapJoinOperator    /*+mapjoin(t) */
LimitOperator    Limit語句
UnionOperator    Union語句

5, 三種模式

Derby: 單用戶, 內置數據庫
Mysql: 單用戶, 使用mysql
meta: 多用戶, 區分客戶端和服務端

需要Mysql, ( http://www.cnblogs.com/wenbronk/p/6840484.html )

1) derby模式的搭建:

1, 上傳解壓

2, 修改配置文件

cp hive-default.xml.template hive-site.xml

將hive-site.xml中的所有信息刪除, 更換為一下配置文件

<configuration>
    <property>  
    <name>javax.jdo.option.ConnectionURL</name>  
        <value>jdbc:derby:;databaseName=metastore_db;create=true</value>  
    </property>  
       
    <property>  
      <name>javax.jdo.option.ConnectionDriverName</name>  
        <value>org.apache.derby.jdbc.EmbeddedDriver</value>  
    </property>  
       
    <property>  
          <name>hive.metastore.local</name>  
        <value>true</value>  
    </property>  
       
    <property>  
          <name>hive.metastore.warehouse.dir</name>  
          <value>/user/hive/warehouse</value>  
    </property>  
</configuration>

3, 更改hadoop的jline.jar

因為hadoop安裝的為2.5.1, hive的版本是1,2,1 , 所以更換hadoop的hive鏈接包, jline

將 HADOOP_HOME//share/hadoop/yarn/lib 下的jline 更換為 jline.2.12.jar

4, 添加環境變量(可選)

將 HIVE_HOME 添加到環境變量中

export HIVE_HOME=/opt/apache-hive-1.2.1-bin
export PATH=$PATH:$HIVE_HOME/bin

5, 啟動

hive

2) mysql模式安裝

1, 需要mysql的環境

此處mysql和hive為同一臺機器

/* 創建hive的專用數據庫(需要創建, 不然報錯) */

create database hive;

2, 將 mysql的鏈接jar放進jdbc中

技術分享

3, 更改配置文件

<configuration>
<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://192.168.208.109:3306/hive_remote?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>123</value>  
    </property>  

</configuration>

4, 啟動

./hive

3), metastore 模式

配置文件不同:

service端

<configuration>  
  
<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.208.109: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>123</value>  
</property>  
</configuration>  

client端:

<configuration>  
  
<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.208.109:9083</value>  
</property>  
  
</configuration>  

2, 啟動hive服務端程序

hive --service metastore

3, 客戶端直接使用hive命令即可

[email protected]:~$ hive

Hive history file=/tmp/root/hive_job_log_root_201301301416_955801255.txt

hive> show tables;

OK

test_hive

Time taken: 0.736 seconds

4, 驗證是否成功

進入hive後, 創建一個表, 看表信息是否存儲在mysql中了( 此處使用的第二種模式)

CREATE TABLE xp(id INT,name string) ROW FORMAT DELIMITED FIELDS TERMINATED BY \t;

然後進入mysql下, 在hive或 hive_remote 數據庫下, 有hive自己創建的表信息

技術分享

系列來自尚學堂視頻

22-hadoop-hive搭建