[日期: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...