HCatalog 介紹
標(biāo)簽:HCatalog
對(duì)于任何一個(gè)新的工具或者知識(shí)點(diǎn),當(dāng)我們需要對(duì)其進(jìn)行研究時(shí),都需要有一個(gè)明確的思路。簡(jiǎn)單來(lái)說(shuō),就是要在進(jìn)行研究之前先問(wèn)自己幾個(gè)問(wèn)題:這個(gè)東西的作用是什么?在什么場(chǎng)景下使用?具體應(yīng)該如何使用?
下面,就沿著這一思路,對(duì) HCatalog 做一個(gè)簡(jiǎn)單的研究。
目的
所有事物都有其存在的意義,那么對(duì)于 HCatalog,它的目的是什么呢?或者說(shuō),HCatalog 想要解決的問(wèn)題是什么?
概括來(lái)說(shuō),HCatalog 提供了一個(gè)統(tǒng)一的元數(shù)據(jù)服務(wù),允許不同的工具如 Pig、MapReduce 等通過(guò) HCatalog 直接訪問(wèn)存儲(chǔ)在 HDFS 上的底層文件。
HCatalog 使用了 Hive 的元數(shù)據(jù)存儲(chǔ),這樣就使得像 MapReduce 這樣的第三方應(yīng)用可以直接從 Hive 的數(shù)據(jù)倉(cāng)庫(kù)中讀寫(xiě)數(shù)據(jù)。同時(shí),HCatalog 還支持用戶在 MapReduce 程序中只讀取需要的表分區(qū)和字段,而不需要讀取整個(gè)表。也就是提供一種邏輯上的視圖來(lái)讀取數(shù)據(jù),而不僅僅是從物理文件的維度。
HCatalog 還提供了一個(gè)消息通知服務(wù),這樣對(duì)于 Oozie 這樣的工作流工具,在數(shù)據(jù)倉(cāng)庫(kù)提供新數(shù)據(jù)時(shí),可以通知到這些工作流工具。
那么寫(xiě)到這里,就已經(jīng)很清晰了,HCatalog 主要解決了這樣一個(gè)問(wèn)題:將以前各自為政的數(shù)據(jù)處理工具(如 Hive、Pig、MapReduce)有機(jī)的整合在一起,使其相互之間能夠順暢合作,進(jìn)而提升效率。
場(chǎng)景
上面對(duì) HCatalog 解決的問(wèn)題描述的比較抽象,可能還是有點(diǎn)不好理解,下面通過(guò)一個(gè)具體的場(chǎng)景來(lái)展示 HCatalog 的作用(PS:場(chǎng)景來(lái)自 Hive 官網(wǎng)):
-
張三將數(shù)據(jù)上傳到 HDFS 上,并且將這些數(shù)據(jù)加載到相應(yīng)的表中:
hadoop distcp file:///file.dat hdfs://data/rawevents/20100819/datahcat "alter table rawevents add partition (ds='20100819') location 'hdfs://data/rawevents/20100819/data'" 李四需要在 Pig 中對(duì)張三加載的這些數(shù)據(jù)進(jìn)行處理,如果不使用 HCatalog,那么他只能等到張三把數(shù)據(jù)加載成功后再手動(dòng)在 Pig 中進(jìn)行加載處理:
A = load '/data/rawevents/20100819/data' as (alpha:int, beta:chararray, ...);
B = filter A by bot_finder(zeta) = 0;
...
store Z into 'data/processedevents/20100819/data';
但如果使用 HCatalog 的話,當(dāng)數(shù)據(jù)被張三加載成功后會(huì)自動(dòng)發(fā)送消息,之后 Pig 會(huì)自動(dòng)開(kāi)始處理:
A = load 'rawevents' using org.apache.hive.hcatalog.pig.HCatLoader();
B = filter A by date = '20100819' and by bot_finder(zeta) = 0;
...
store Z into 'processedevents' using org.apache.hive.hcatalog.pig.HCatStorer("date=20100819");-
王五需要在 Hive 中對(duì)這些數(shù)據(jù)進(jìn)行分析,如果不使用 HCatalog 的話,需要手動(dòng)將數(shù)據(jù)加載到 Hive 中的表中,然后進(jìn)行一系列的分析操作:
alter table processedevents add partition 20100819 hdfs://data/processedevents/20100819/dataselect advertiser_id, count(clicks) from processedevents where date = '20100819' group by advertiser_id;
但如果使用 HCatalog 的話,王五就可以直接對(duì)數(shù)據(jù)進(jìn)行分析而不需要再手動(dòng)加載,因?yàn)?Hive、Pig 共享的是同一份元數(shù)據(jù):
select advertiser_id, count(clicks)
from processedevents
where date = ‘20100819’
group by advertiser_id;
由以上的場(chǎng)景可以看出,HCatalog 省去了許多需要人工干預(yù)的過(guò)程,使各個(gè)組件之間的協(xié)作自動(dòng)化,大大提升了效率。
使用
HCatalog 是 Apache 的頂級(jí)項(xiàng)目,從 Hive0.11.0 開(kāi)始,HCatalog 已經(jīng)合并到 Hive 中。也就是說(shuō),如果是通過(guò) binary 安裝的 Hive0.11.0 之后的版本,HCatalog 已經(jīng)自動(dòng)安裝了,不需要再單獨(dú)部署。
因?yàn)?HCatalog 使用的就是 Hive 的元數(shù)據(jù),因此對(duì)于 Hive 用戶來(lái)說(shuō),不需要使用額外的工具來(lái)訪問(wèn)元數(shù)據(jù),還是繼續(xù)使用 Hive 的命令行工具。
對(duì)于非 Hive 用戶,HCatalog 提供了一個(gè)稱為 hcat 的命令行工具。這個(gè)工具和 Hive 的命令行工具類似,兩者最大的不同就是 hcat 只接受不會(huì)產(chǎn)生 MapReduce 任務(wù)的命令。
如果用戶需要在 MapReduce 程序中使用 HCatalog,HCatalog 提供了一個(gè) HCatInputFormat 類來(lái)供 MapReduce 用戶從 Hive 的數(shù)據(jù)倉(cāng)庫(kù)中讀取數(shù)據(jù)。該類允許用戶只讀取需要的表分區(qū)和字段,同時(shí)其還以一種方便的列表格式來(lái)展示記錄,這樣就不需要用戶來(lái)進(jìn)行劃分了。
同樣的,HCatalog 提供了一個(gè) HCatOutputFormat 類來(lái)供 MapReduce 用戶向 Hive 中指定的表和分區(qū)中寫(xiě)入數(shù)據(jù)。
總結(jié)
以上就是對(duì)于 HCatalog 的簡(jiǎn)單介紹,因?yàn)闆](méi)有在具體的生產(chǎn)環(huán)境中使用 HCatalog,因此只是介紹了一些比較基本的原理,更深入的原理解析留待以后補(bǔ)充。