Hive基礎知識學習

2021-09-19 20:01:10 字數 2724 閱讀 8086

[日期:2012-09-25]

[字型:大 中 小]

**:

1.hive是什麼

按照我的理解,hive

是乙個中間工具。它的主要作用是將

hql(

hive query language

)轉換為一系列的

mapreduce job

,利用hadoop

框架對資料進行類

sql處理。他的主要功能是在

hadoop

框架上提供乙個類

sql中間層,簡化在

hadoop

框架上實現

sql功能程式的編寫。

請思考一下,為了實現這個功能,hive

應該具備什麼功能?

1) 首先,hive

需要提供一種功能,將待處理的資料載入到

hdfs

當中。之所以要提供這種功能,是因為,

hadoop

想要充分發揮其分布式特性,就需要底層分布式檔案系統

hdfs

的支援。因此,只有將資料儲存在

hdfs

當中才能充分發揮

hadoop

的優勢。

2) 其次,hive

將資料載入到

hdfs

之後,需要提供對資料進行組織管理的功能。如果不提供資料的組織管理功能,那麼其跟

hdfs

儲存檔案沒有區別。

3) 第三,hive

提供將hql

(hive query lanuage

)轉化成

mapreduce job

的功能。

2.hive資料載入

hive跟

rdbms

一樣,將資料組織成表的模式,至於怎麼組織,下面進行詳細介紹。現在只要在腦海中有表的概念就可以了。

對於功能一,實現比較簡單。對於載入資料到hdfs

,hive

採用的是「讀時模式」。跟「讀時模式」相對應的是「寫時模式」。

rdbms

一般採用「寫時模式」。

rdbms

在往資料庫寫入資料時,其會檢查一條記錄是否合法,比如,列屬性是否一致、是否超過長度或者範圍等等。而「讀時模式」在載入資料的時候並不進行這些檢查,直接將資料載入到

hdfs

當中(說直白點這跟往

hdfs

存放乙個檔案並沒有區別)。當

hive

讀資料的時候,會按照格式進行資料的檢查。

hive

為什麼會採用這種模式,我認為可能是有以下幾個原因:首先,採用「讀時模式」可以加快資料載入的速度。其次,採用「讀時模式」可以方便的進行資料處理。因為資料的模式是在讀取資料的時候確定的,因此可以根據應用需求的不同定義不同的模式,方便分析型應用使用資料。

3.hive資料組織

3.1 元資料

hive在邏輯上將資料組織為表的形式(因為,

hive

在資料載入並不進行資料檢驗,這就要求使用者寫入的資料確實符合使用者想要的表結構)。既然是表結構,那麼就需要定義的表的模式(即

schema

)。hive

同樣需要

schema

,但是與資料檔案不同的是,

hive

將schema

儲存在metastore

當中,metastore

為關係型資料庫(

rdbms

)。之所以採用

rdbms

作為schema

的儲存,主要是為了加快

schema

的訪問速度,減少延遲。

3.2 資料檔案

說完元資料,我們再說一下資料檔案的儲存。最簡單的方法,資料直接以檔案的格式存放在hadoop

的檔案系統當中,包括(

hdfs

、amazon』s s3、

local file system

等)。但是為了加快資料訪問速度,

hive

採用了一些技巧加強對資料組織、存放的管理。

分割槽

hive可以對資料按照某列或者某些列進行分割槽管理,所謂分割槽我們可以拿下面的例子進行解釋。

當前網際網路應用每天都要儲存大量的日誌檔案,幾g

、幾十g

甚至更大都是有可能。儲存日誌,其中必然有個屬性是日誌產生的日期。在產生分割槽時,就可以按照日誌產生的日期列進行劃分。把每一天的日誌當作乙個分割槽。

將資料組織成分區,主要可以提高資料的查詢速度。至於使用者儲存的每一條記錄到底放到哪個分割槽,由使用者決定。即使用者在載入資料的時候必須顯示的指定該部分資料放到哪個分割槽。

對於每乙個表(table

)或者分割槽,

hive

可以進一步組織成桶。

hive

也是針對某一列進行桶的組織。

hive

採用對列值雜湊,然後除以桶的個數求餘的方式決定該條記錄存放在哪個桶當中。採用桶能夠帶來一些好處,比如

join

操作。對於

join

操作兩個表有乙個相同的列,如果對這兩個表都進行了桶操作。那麼將儲存相同列值的桶進行

join

操作就可以,可以大大較少

join

的資料量。

hive基礎知識

1.檢視hive版本號 hive version 1.2.1 2.group by 可以通過字段所在的位置進行groupby 對於1.2.1版本 set hive.groupby.orderby.position.alias true 沒有hive 287的版本,只能使用count 1 替代coun...

hive基礎知識

接觸hive也有一段時間了,一直把它當做傳統的資料庫使用的,沒有出現問題。昨天的時候遇到乙個問題,就是hive表中的資料有重複了,領導讓盡快出方案解決,我想都沒想,直接脫口就說 把重複的刪除 同事告訴我說,hive不支援刪除。當時尷尬到家啦。無知太可怕了,趕緊學習總結一下hive。補補這方面的欠缺。...

Hive程式設計指南學習記錄(一 基礎知識)

1.hive適合於資料倉儲應用程式,使用該應用程式進行相關的靜態資料分析,不需要快速響應給出結果,而且資料不會頻繁變化。2.hive不是乙個完整的資料庫,不支援記錄級別的更新,刪除,插入操作。但可以通過查詢將結果生成新錶或匯入檔案中。3.hive不支援事務。4.hadoop是乙個面向批處理的系統,m...