Hive相關概念

2021-09-25 07:08:24 字數 3419 閱讀 9498

hive:基於hadoop之上的乙個離線資料倉儲,使用hdfs作為底層儲存,可以將結構化的資料檔案對映為一張資料庫表,並提供簡單的sql查詢功能,可以將sql語句轉換為mapreduce任務進行執行。

hive主要分為以下幾個部分:

1. 使用者介面

使用者介面主要有三個:cli,client 和 webui(hue/zeppelin)。其中最常用的是 cli,cli 啟動的時候,會同時啟動乙個 hive 副本。client 是 hive 的客戶端,使用者連線至 hive server。在啟動 client模式的時候,需要指出 hive server 所在節點,並且在該節點啟動 hive server。 webui是通過瀏覽器訪問 hive。

2.元資料儲存

hive 將元資料預設儲存在hive自帶的derby資料庫中,但是由於derby有以下侷限性

1.資料庫太小(2m)

2.單session有效,單個路徑下只能連線乙個session

3.使用不方便

所以生產中,我們使用mysql作為hive的元資料儲存(mysql主備)

hive中的元資料報括表的名字,表的列和分割槽及其屬性,表的屬性(是否為外部表等),表的資料所在目錄,hive庫表和hdfs上的檔案結構的對應關係等。

3.直譯器、編譯器、優化器、執行器

直譯器:將類sql的hql語句解析

編譯器:將hql語句編譯為job

優化器:優化job

執行器:呼叫hadoop執行job

生成的查詢計畫儲存在 hdfs中,並在隨後由 mapreduce 呼叫執行。 hive 的資料儲存在 hdfs 中,大部分的查詢由 mapreduce完成(不包含 * 的查詢,比如 select * from tbl 不會生成 mapreduce 任務)

hive的資料單元?

databases:資料庫,概念等同於關係型資料庫的schema,本質上僅僅是表的乙個目錄結構或命名空間。

tables:表,概念等同於關係型資料庫的表,本質上是資料的乙個目錄結構或命名空間。

partitions:分割槽。概念類似於關係型資料庫的表分割槽,沒有那麼多分割槽型別,只支援固定分割槽,將同一組資料存放至乙個固定的分割槽中,其本質為hdfs上的乙個目錄,為了更快更方便查詢到資料

buckets (or clusters):分桶。同乙個partitions分區內的資料還可以細分,將相同的key再劃分至乙個桶中,這個有點類似於hash分割槽,只不過這裡是hash分桶,也有點類似子分割槽吧。更細粒度的操作,其本質為乙個檔案

hive表有兩種?區別?

管理表(內部表):hive會控制表中資料的生命週期,當刪除一張管理表時,同時也會刪除表中的資料。管理表中的資料不與其他工具共享。

外部表:hive只控制元資料,當刪除一張外部表時,只會刪除元資料,並不會刪除真實資料。外部表中的資料與其他工具共享。

所以一般內部表用來做中間表,外部表做源資料表,或者對接表。

hive中分區分桶:

1.hive分割槽的目的?本質?分為幾種?(分割槽值必須不能為中文)

建立分割槽表的最主要的目的是:快速查詢!

hive中的分割槽表型別並不複雜,通常以表中的某乙個或多個列為分割槽依據,並建立資料夾,將表中的其他列中的資料放到該資料夾下的資料檔案中。

分割槽可以分為靜態分割槽和動態分割槽,靜態分割槽的分割槽字段不能增加,動態分割槽相反。預設情況下的分割槽表是靜態的。

2.分桶的目的?如何分桶?

分桶的優點在於,將資料大致平均的、隨機的放入多個桶中,這樣方便對海量的資料做抽樣調查、分析

hive桶以表中的某一列作為分桶的依據,桶的個數由使用者設定,這裡以使用者表中的id欄位來劃分桶,劃分4個桶。hive會計算分桶列的hash值再以桶的個數取模來計算某條記錄屬於那個桶。

hive預設分隔符?

有三種:

\n:行分隔符,對於文字檔案來說,每行都是一條記錄,因此可以用來分割記錄

^a:用於分隔字段(列),在create table語句中可以使用八進位制編碼\001表示

^b:用於分隔arrary或者struct中的元素,或用於map鍵值對之間的分隔,在create table語句中可以使用八進位制編碼\001表示

^c:用於map中鍵和值之間的分隔,在create table語句中可以使用八進位制編碼\003表示

hive資料型別?

hive的資料型別分為簡單資料型別和複雜資料型別

簡單資料型別有:hive支援多種不同長度的整型和浮點型資料,支援布林型,也支援無長度限制的字串型別。例如:tinyint、smalint、boolean、float、double、string等基本資料型別

複雜資料型別:struct、map和array集合資料類

hive資料儲存?

預設在hdfs上的以下目錄: /user/hive/warehouse/

如需要改變資料儲存位置,修改hive-site.xml配置檔案中的hive.metastore.warehouse.dir配置項即可。

hive三種引數配置方式?

1.配置檔案,修改hive-site.xml,屬於全域性的,永久生效

2.命令列引數,當前session生效,關閉此視窗則失效 啟動hive時,可以在命令列新增-hiveconf param=value,但這一設定只對本次啟動的session有效,一般不用

3.引數宣告 ,啟動hive後,使用set關鍵字進行引數設定,這一設定的作用域也是session級的,也是單次有效

eg:set param檢視某配置引數的value

set param=value設定某配置引數

優先順序:引數宣告》命令列引數》配置檔案

關於檢視hive的詳細日誌:

在hive的配置檔案 /conf/hive-log4j.properties ,預設hive-log4j.properties沒有,可以通過hive-log4j.properties.template複製乙份,裡面有個配置項 :hive.log.dir=$/$hive.log.file=hive.log

其含義表示hive詳細日誌預設存放在根下 /tmp/當前使用者名稱形成的目錄/hive.log的檔案中,如需修改,修改此配置項即可。

hive 預設是非嚴格模式hive.mapred.mode=nonstrict; 嚴格模式下 有三種限制?

1.限制分割槽查詢 必須指定where條件

2.限制order by 必須加limit

3.不能笛卡爾積

Hive核心概念

基於 hadoop 的乙個資料倉儲工具 hive本身不提供資料儲存功能,使用hdfs做資料儲存,hive也不分布式計算框架,hive的核心工作就是把sql語句翻譯成mr程式 hive也不提供資源排程系統,也是預設由hadoop當中yarn集群來排程 可以將結構化的資料對映為一張資料庫表,並提供 hq...

Hive 介紹 概念

hive是基於hadoop的乙個資料倉儲工具,可以將結構化的資料檔案對映為一張資料庫表,並提供類sql查詢功能 hql 其本質是將sql轉換為mapreduce的任務進行運算,底層由hdfs來提供資料的儲存,hive可以理解為乙個將sql轉換為mapreduce的任務的工具。每次的執行開銷較大,任務...

hive 分割槽 hive 分割槽概念 0323

1 hive 分割槽表 在hive select查詢中一般會掃瞄整個表內容,會消耗很多時間做沒必要的工作。有時候只需要掃瞄表中關心的一部分資料,因此建表時引入了partition概念。分割槽表指的是在建立表時指定的partition的分割槽空間。hive可以對資料按照某列或者某些列進行分割槽管理,所...