1. 程式人生 > >大資料(十七):Hive簡介、安裝與基本操作

大資料(十七):Hive簡介、安裝與基本操作

一、簡介

        Hive由Facebook開源用於解決海量結構化日誌的資料統計。Hive是基於Hadoop的一個數據倉庫工具,可以將結構化的資料檔案對映為一張表,並提供類Sql查詢的功能。

hive本質是將HQL轉化為MapReduce的程式

  1. hive處理的資料儲存在HDFS

  2. hive分析資料低層的實現是MapReduce

  3. 執行程式執行在YARN上

 

二、Hive的優缺點

1.優點:

  1. 操作介面採用類sql語法,提供快速開發的能力

  2. 避免去寫MapReduce,減少開發人員的學習成本。

  3. Hive的執行延遲比較高,因此Hive常用於資料分析,對實時性要求不高的場合。

  4. Hive優勢在於處理大資料,對於處理小資料沒有優勢,應為Hive的資料延遲比較高。

  5. Hive支援使用者自定義函式,使用者可以根據自己的需求來實現自己的函式

2.缺點:

  1. Hive的HQL表達能力有限

    1. 迭代式演算法無法表達

    2. 資料探勘方面不擅長

  2. hive的效率較低

    1. Hive自動生成MapReduce作業,通常情況下不夠智慧化
    2. Hive調優比較困難,粒度較粗

 

三、hive架構原理

        Hive通過給使用者提供的一系列互動介面,接收到使用者的指令(SQL),使用註解的Drive,結合元資料(MetaStore),將這些指令翻譯成MapReduce,提交到Hadoop中執行,最後,將執行返回的結果輸出到使用者互動介面。

1.使用者介面:Client

CLI(hive shell)、JDBC/ODBC(java訪問Hive)、WEBUI(瀏覽器訪問hive)

2.元資料:Metastore

元資料包括:表名、表所屬的資料庫(預設是default)、表的擁有者、列/分割槽欄位、表的型別(是否是外部表)、表的資料所在目錄等;

預設儲存在自帶的derby資料庫中,推薦使用Mysql儲存Metastore

3.Hadoop

使用HDFS進行儲存,使用MapReduce進行計算。

4.驅動器:Driver

  1. 解析器(SQL parser):將SQL字串轉換成抽象語法樹AST,這一步一般都用第三方的工具完成。

  2. 編譯器(Physical Plan):將AST編譯生成邏輯執行計劃。

  3. 優化器(QUery Optimizer):對邏輯執行計劃進行優化

  4. 執行器(Execution):把邏輯執行計劃轉換成可以執行的物理計劃。對於Hive來說就是MR/Spark

 

四、Hive和資料庫比較

        Hive採用了類似Sql的查詢語言HQL(Hive Query Language),因此很容易將Hive理解為資料庫。從結構上來看,Hive和資料庫除了擁有類似的查詢語言,再無類似之處。資料庫可以用於Online的應用,但是Hive是為資料倉庫而設計的,清楚這一點,有助於從應用角度理解Hive的特效

1.查詢語言

        Sql被廣泛的應用在資料倉庫中,因此,專門針對hive的特性設計了類sql的查詢語言HQl。熟悉Sql的開發者可以很方便的使用Hive進行開發。

2.資料儲存位置

        Hive是建立在Hadoop之上的,所有hive的資料都是儲存在HDFS中,而資料庫則可以將資料儲存在塊裝置或者本地檔案系統中。

3.資料更新

        由於Hive是針對資料倉庫應用設計的,而資料倉庫的內容是讀多寫少的。因此,Hive中不支援對資料的改寫和新增,所有的資料都是載入的時候確定好的。而資料庫中的資料通常是需要經常進行修改的,因此可以修改資料。

4.索引

        Hive在載入資料的過程中不會對資料進行任何處理,甚至不會對資料進行掃描,因此也沒有對資料中的某些key簡歷索引,Hive要訪問資料中滿足條件的特定值式,需要暴力掃描整個資料,因此訪問延遲較高。有與MapReduce的引入,Hive可以並行訪問資料,因此即使沒有索引,對於大資料量的訪問,Hive仍然可以體現出優勢。資料庫中,通常會針對一個或者幾個列建立索引,因此對於少了的特定資料的訪問,資料庫可以有很高的效率,較低的延遲。資料的訪問延遲修改較高,決定了Hive不適合線上資料查詢

5.執行

        Hive中大多數查詢的執行是通過Hadoop提供的MapReduce來實現的。而資料庫通常有自己的執行引擎

6.執行延遲

        Hive在查詢資料的過程,由於沒有索引,需要掃描整個表,因此延遲較高。另外一個導致Hive執行延遲高的因素是MapReduce框架。由於MapReduce本身具有較高的延遲,因此在利用MapReduce執行Hive查詢時,也會有較高的延遲。相對的,資料庫的執行延遲較低。當熱,這個低是有條件的,資料規模要較小,當資料規模大到超過資料庫的處理能力的時候,Hive的平行計算顯然能體現出優勢。

7.可擴充套件性

        由於Hive是建立在Hadoop之上的,因此Hive的可擴充套件性是和Hadoop的可擴充套件性是一致的,而資料庫由於ACID語義的嚴格限制,擴充套件性非常有限。(2009年的Yahoo的hadoop叢集已經達到4000臺,而同期的Oracle資料庫理論擴充套件上線只有100臺左右)
8.資料規模

        Hive利用MapReduce進行平行計算,可以支援很大規模的資料,而普通的資料庫可以支援的資料規模就要小很多。

 

五、Hive安裝環境準備

1.Hive安裝地址說明

  1. Hive官網地址:http://hive.apache.org

  2. 下載地址:http://archive.apache.org/dist/hive

  3. 需要安裝hadoop,並配置好環境

2.Hive安裝部署(這裡演示1.2.1版本,2.x.x版本安裝方式並不一樣)

  1. 把apache-hive-1.2.1-bin.tar.gz上傳到linux服務上

  2. 解壓tar包

    • tar -zxvf apache-hive-1.2.1-bin.tar.gz

  3. 將解壓出來的資料夾轉移到/usr/local目錄下並重命名為hive

    • mv apache-hive-1.2.1-bin /usr/local/hive

  4. 進入/usr/local/hive/conf目錄下,將hive-env.sh.template更名為hive-env.sh

    • mv hive-env.sh.template hive-env.sh

  5. 進入hive-env.sh檔案,並配置HADOOP_HOME和HIVE_CONF_DIR路徑

    1. vim hive-env.sh

    2. export HADOOP_HOME=/usr/local/hadoop(這裡填寫自己的hadoop路徑)

    3. export HIVE_CONF_DIR=/usr/local/hive/conf(hive目錄的conf檔案地址)

3.Hadoop叢集配置(條件有限這裡的hadoop使用的是偽分散式)

  1. 進入hadoop目錄下的sbin目錄,並啟動hdfs和yarn

    1. hadoop-daemon.sh start namenode

    2. hadoop-daemon.sh start datanode

    3. yarn-daemon.sh start resourcemanager
    4. yarn-daemon.sh start nodemanager

  2. 在HDFS上建立/tmp和/user/hive/warehouse兩個目錄,並修改他們的許可權為可讀可寫

    1. hadoop fs -mkdir -p /tmp

    2. hadoop fs -mkdir -p /user/hive/warehouse

    3. hadoop fs -chmod 777 /tmp

    4. hadoop fs -chmod 777 /user/hive/warehouse

 

六、hive基礎操作

先回到hive目錄下

1.啟動hive

  • bin/hive

啟動成功!

2.檢視存在的資料庫

  • show databases;(分號別忘了)

3.開啟預設的資料庫

  • use default;

4.顯示資料庫的表

  • show tables;

5.建立一張表

  • create table student(id int,name string);

6.插入資料

  • insert into student values(1,"zhangsan");

7.檢視資料

  • select * from student;

8.退出資料庫

  • quit;