03.04 Hive 基礎知識大補

hive 概念

  • 是基於Hadoop的一個數據倉庫工具,用來進行數據提取、轉化、加載,這是一種可以存儲、查詢和分析存儲在Hadoop中的大規模數據的機制。
  • 能將結構化的數據文件映射為一張數據庫表,並提供SQL查詢功能,能將SQL語句轉變成MapReduce任務來執行。
  • 可以通過類似SQL語句實現快速MapReduce統計,使MapReduce變得更加簡單。

hive 特性

  • hive 構建在基於靜態批處理的Hadoop 之上,Hadoop 通常都有較高的延遲並且在作業提交和調度的時候需要大量的開銷。
  • hive 並不能夠在大規模數據集上實現低延遲快速的查詢,例如,hive 在幾百MB 的數據集上執行查詢一般有分鐘級的時間延遲。
  • hive 的最佳使用場合是大數據集的批處理作業。
  • 支持不同的存儲類型,如純文本文件、HBase 中的文件。
  • 可以將元數據保存在關係數據庫中,減少在查詢過程中語義檢查的時間。
  • 可以直接使用存儲在Hadoop 文件系統中的數據。
  • 內置用戶函數UDF,可用來操作時間、字符串和其他的數據挖掘工具,支持用戶擴展UDF 函數來完成內置函數無法實現的操作。
  • 類SQL 的查詢方式,將SQL 查詢轉換為MapReduce 的job 在Hadoop集群上執行。


Hive 架構

  • 用戶接口三個(CLI,Client 和 WUI)

1、Cli 啟動的時候,會同時啟動一個 hive 副本。

2、Client 是 hive 的客戶端,用戶連接至 hive Server。在啟動 Client 模式的時候,需要指出 hive Server 所在節點,並且在該節點啟動 hive Server。

3、WUI 是通過瀏覽器訪問 hive。

  • 元數據存儲(存儲在數據庫中)

元數據包括表的名字,表的列和分區及其屬性,表的屬性(是否為外部表等),表的數據所在目錄等。

  • 解釋器、編譯器、優化器、執行器

完成 HQL 查詢語句從詞法分析、語法分析、編譯、優化以及查詢計劃的生成。生成的查詢計劃存儲在 HDFS 中,並在隨後由 MapReduce 調用執行。

  • Hadoop

hive 的數據存儲在 HDFS 中,大部分的查詢由 MapReduce 完成。

Hive數據存儲模型

表(Table)、外部表(External Tablc)、分區(Partition)、桶(Bucket)。

  • hive中每一個Table都有一個相應的目錄存儲數據
  • 外部表是一個已經存儲在HDFS中,並具有一定格式的數據。使用外部表意味著hive表內的數據不在hive的數據倉庫內,它會到倉庫目錄以外的位置訪問數據,創建表和裝數據同時完成。
  • 分區對應於表下的一個目錄,所有的分區的數據都存儲在對應的目錄中。
  • 桶對指定列進行哈希(hash)計算,會根據哈希值切分數據,目的是為了並行每一個桶對應一個文件。

Hive應用場景

  • 日誌分析:互聯網公司使用hive進行日誌分析,如搜索引擎和購物類商城包括等。

1)統計網站一個時間段內的pv、uv

2)多維度數據分析

  • 海量結構化數據離線分析


Hive的搭建

  • 下載 hive.apache.org,拷貝到linux,winscp 設置共享文件夾
  • 解壓tar -zxvf apache-hive-1.2.1-bin.tar.gz -C /opt/programfile/
  • 配置環境變量(/etc/profile)
<code>export HIVE_HOME=/opt/programfile/hive
export PATH=$ PATH:$HIVE_HOME/bin
#使新的配置生效:source /etc/profile
#配置hive
cp hive-env.sh.template hive-env.sh
#修改配置(指定hadoop的路徑,因為hive基於Hadoop運行的)
HADOOP_HOME=/opt/programfile/hadoop
export HIVE_CONF_DIR=/opt/programfile/hive/conf/<code>
<code>#開啟集群
start-dfs.sh
start-yarn.sh

#配置數據倉庫的存儲路徑(數據最終存儲在HDFS上)(在HDFS上配置的路徑)
#創建數據存儲目錄:
hdfs dfs -mkdir /tmp
hdfs dfs -mkdir -p /user/hive/warehouse
#修改權限:
hdfs dfs -chmod 777 /tmp
hdfs dfs -chmod 777 /user/hive/warehouse/<code>

Hive 與 HBase 整合

  • 使用 hive-hbase-handler-xxx.jar 包實現 Hive 與 HBase 關聯。
  • Hive 讀取的是 HBase 表最新的數據。
  • 通過 Hive 創建的 HBase 表的值默認只有一個 VERSION ,可之後再修改 HBase 表值的最大 VERSION 數。
  • Hive 只顯示與 HBase 對應的列值,而那些沒有對應的 HBase 列在 Hive 表中不顯示。
  • Hive 表與 HBase 表關聯後,數據可以在 Hive 端插入,也可在 HBase 中插入。
  • 創建 Hive 外部表與 HBase 的關聯,可實現將 Hive 數據導入到 HBase 中。該方式是利用兩者本身對外的 API 接口互相通信來完成的,在數據量不大(4T以下)的情況下可以選擇該方式導入數據。


分享到:


相關文章: