hadoop--hive數據倉庫


一、hive概述

       Hive是基於 Hadoop 的一個【數據倉庫工具】,可以將結構化的數據文件映射為一張數據庫表,並提供簡單的 sql 查詢功能,可以將 sql 語句轉換為 MapReduce 任務進行運行。使用SQL來快速實現簡單的MapReduce 統計,不必開發專門的MapReduce 應用,學習成本低,十分適合數據倉庫的統計分析。

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

 1、數據處理分類

(1)聯機事務處理 OLTP(on-linetransaction processing)  

  OLTP是傳統的關系型數據庫的主要應用,主要是基本的、日常的事務處理,例如銀行交易OLTP系統強調數據庫內存效率,強調內存各種指標的命令率,強調綁定變量,強調並發操作;

 

(2)聯機分析處理P OLAP(On-Line AnalyticalProcessing)

  OLAP是數據倉庫系統的主要應用,支持復雜的分析操作,側重決策支持,並且提供直觀易懂的查詢結果。OLAP系統則強調數據分析,強調SQL執行市場,強調磁盤I/O,強調分區等。

 

 

---類比表

 

 

2.hive架構原理

用戶接口主要有三個:CLI命令行,Client 和 WUI。

(1)最常用的是 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.hive的搭建

 

 1.1、安裝 Hive安裝環境以及前提說明:首先,Hive 是依賴於 hadoop 系統的,因此在運行 Hive 之前需要保證已經搭建好 hadoop 集群環境。

---安裝一個關系型數據 mysql

 

1.2、配置環境變量:(類似於下面這樣,跟之前hadoop1 /2.x 配置一樣)

– HADOOP_HOME=/**/*
– HIVE_HOME=$*/**/*

1.3、替換和添加相關 jar 包--修改 HADOOP_HOME\share/hadoop/yarn/lib 目錄下的 jline-*.jar將其替換成 HIVE_HOME\lib 下的 jline-2.12.jar。

--將 hive 連接 mysql 的 jar 包:mysql-connector-java-5.1.32-bin.jar拷貝到 hive 解壓目錄的 lib 目錄下

1.4、修改配置文件(選擇 3 種模式里哪一種)見三種安裝模式
1.5、啟動 hive:bin/hive

 

2.三種模式: (內嵌模式/本地模式/遠程模式)

 2.1 內嵌模式

這種安裝模式的元數據是內嵌在Derby數據庫中的,只能允許一個會話連接,數據會存放到HDFS上。

這種方式是最簡單的存儲方式,只需要hive-site.xml做如下配置便可(注:使用 derby 存儲方式時,運行 hive 會在當

前目錄生成一個 derby 文件和一個 metastore_db)

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:derby:;databaseName=metastore_db;creat
e=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>

 

 2.2 本地模式

 這種安裝方式和嵌入式的區別在於,不再使用內嵌的 Derby 作為元數據的存儲介質,而是使用其他數據庫比如 MySQL 來存儲元數據且是一個多用戶的模式

運行多個用戶 client 連接到一個數據庫中。這種方式一般作為公司內部同時使用 Hive。這里有一個前提,每一個用戶必須要有對 MySQL 的訪問權利,即每

一個客戶端使用者需要知道 MySQL 的用戶名和密碼才行。這種存儲方式需要在本地運行一個 mysql 服務器,並作如下配置(下面兩種使用 mysql 的方式,

需要將 mysql 的 jar 包拷貝到$HIVE_HOME/lib 目錄下)。

注: mysql-connector-java-5.1.32-bin.jar拷貝到 hive 解壓目錄的 lib 目錄下

 (jar包 鏈接:https://pan.baidu.com/s/17LzbGrLpLAcs-guXz2ttLg 密碼:4k6w)

 vim hive-site-xml   配置如下:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<!--數據倉庫的位置,默認是/user/hive/warehouse-->
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive_rlocal/warehouse</value>
</property>
<property>
<!--控制hive是否連接一個遠程metastore服務器還是開啟一個本地客戶端jvm-->
<name>hive.metastore.local</name>
<value>true</value>
</property>
<property>
<!--JDBC連接字符串,默認jdbc:derby:;databaseName=metastore_db;create=true-->
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://node03/hive_remote?createDatabaseIfNotExist=t
rue</value>
</property>
<property>
<!--JDBC的driver,默認org.apache.derby.jdbc.EmbeddedDriver-->
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<!--username,默認APP-->
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</property>

 

 

啟動:

①開啟集群(hive需要依賴集群);  service  iptables stop     zkServer.sh start   start-all.sh

②開啟mysql服務器:先在mysql中鏈接到客戶端,本機創建的數據庫名為hive

 

 再到客戶端:service  mysqld start    -----> mysql  -u root   -p   (用戶名/密碼)

 

 

 ③啟動hive:  執行hive

 

小試牛刀:

創建一個數據庫:zhangsan

hive> show databases;
OK
default
wuxiong
Time taken: 0.051 seconds, Fetched: 2 row(s)
hive> create  database  zhangsan;
OK
Time taken: 0.113 seconds
hive> show databases;
OK
default
wuxiong
zhangsan
Time taken: 0.046 seconds, Fetched: 3 row(s)
hive> 

 

是否生效:①查看集群對應的目錄 :    hive-site-xml配置文件中已定義了目錄的存放位置:/user/hive/warehouse    ------>打開node02節點(active)

②本地mysql數據庫hive中查看:hive_remote  ----->dbs----->會發現:

 

 

 ok,數據庫創建完畢!存放位置也能找到!

接上述'zhangsan'數據庫繼續創建一張表:

 use   zhangsan;

 

查找:①mysql--->hive----->hive_remote------>TBLS

 ②集群中:

 2.3 遠程模式

       remote:這種存儲方式需要在遠端服務器運行一個 mysql 服務器,並且需要在 Hive 服務器啟動 meta服務。本機配置了

三個節點:node01、node02、node03,node01上已配置了mysql,現在以node02為服務端,node03為客戶端依次配置系統文件

hive-site.xml 

 node02配置如下:

 

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
        <name>hive.metastore.warehouse.dir</name>
        <value>/user/hive/warehouse</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://node01:3306/hive2?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>
</configuration>

 

 

node03配置如下:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<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://node01:9083</value>
    </property>
</configuration>

 

啟動:

node02 (服務端):  hive --server  metastore

node03(客戶端):啟動 hive

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM