HCatalog 介紹

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/data

      hcat "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/data

      select 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ǔ)充。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容