HCatalog یک لایه مدیریت جداول و ذخیره‌سازی برای هدوپ است که به کاربران با ابزارهای پردازش داده‌های مختلف مانند Pig  و MapReduce  امکان خواندن و نوشتن راحت‌تر داده‌ها در شبکه را فراهم می‌کند. توانایی استخراج و تلخیص  جداول در HCatalog دیدی رابطه‌ای از داده‌ها را در سیستم فایل توزیع شده هدوپ (HDFS) به کاربران ارائه می‌کند و به مسائل ونگرانی کاربران درباره اینکه  داده‌ها از کجا یا در چه قالبی ذخیره می‌شوند - قالب RCFile، فایل‌های متنی، SequenceFiles یا فایل‌های  ORC – پاسخ می‌دهد.

 HCatalog از خواندن و نوشتن فایل‌ها در هر قالبی پشتیبانی می‌کند. به طور پیش فرض، HCatalog از فرمت‌های فایل RCFile ، CSV ، JSON، SequenceFile و ORC پشتیبانی می‌کند. برای استفاده از قالب سفارشی، باید InputFormat ، OutputFormat و SerDe را ارائه دهید.

 

معماری HCatalog

HCatalog بر روی ساختار داده‌ای Hive ایجاد شده و دستورات ایجاد و تغییر داده‌ها در Hive را پشتیبانی می‌کند. HCatalog رابط‌های خواندن و نوشتن داده‌ها در Pig و MapReduce را نیز فراهم می‌کند و از رابط خط فرمان Hive برای صدور دستورات تعریف داده و کشف متادیتا استفاده می‌کند.

رابط HCatalog برای Pig از HCatLoader و HCatStorer تشکیل شده است که به ترتیب رابط بارگیری و ذخیره داده‌ها در Pig را پیاده‌سازی می‌کنند. HCatLoader جدولی را برای خواندن داده‌ها می‌پذیرد. می‌توانید مشخص کنید که کدام پارتیشن‌ها را اسکن کنید و بدنبال آن بلافاصله دستور load را با یک عبارت فیلتر پارتیشن مورد نظر بکار ببرید. HCatStorer جدولی را برای نوشتن انتخاب کرده و به صورت اختیاری مشخصات کلیدهای پارتیشن مورد نظر را برای ایجاد یک پارتیشن جدید می‌پذیرد.

مدل داده

HCatalog دیدی رابطه‌ای از داده‌ها را ارائه می‌دهد. داده‌ها در جداول ذخیره می‌شوند و این جداول می‌توانند در پایگاه داده  قرار گیرند. جداول همچنین می‌توانند بر روی یک یا چند کلید به صورت hash تقسیم شوند. یعنی برای یک مقدار مشخص از یک کلید (یا مجموعه‌ای از کلیدها) یک پارتیشن وجود دارد که شامل تمام ردیف‌های دارای آن مقدار (یا مجموعه‌ای از مقادیر) است. به عنوان مثال، اگر یک جدول بصورت توالی تاریخی تقسیم شده باشد و سه روز داده در جدول وجود داشته باشد، در این جدول سه پارتیشن وجود دارد. پارتیشن‌های جدید را می‌توان به یک جدول اضافه کرد یا می‌توان از یک جدول حذف کرد. جداول پارتیشن‌بندی شده در زمان ایجاد هیچ پارتیشنی ندارند. جداول تقسیم نشده به طور موثر دارای یک پارتیشن پیش فرض هستند که باید در زمان ایجاد جدول ایجاد شوند.

مثالی از جریان داده‌ها

این مثال ساده جریان داده را نشان می‌دهد که چگونه HCatalog می‌تواند به کاربران شبکه کمک کند داده‌ها را به اشتراک بگذارند و به آنها دسترسی پیدا کنند.

  1. داده ها را در شبکه کپی کنید

در دستیابی به داده‌ها از distcp برای وارد کردن داده ها به شبکه استفاده می‌کنید. همانطور که مشاهده می‌کنید با دستورdistcp  فایل مورد نظر را به محیط فایل سیستم هدوپ کپی کرده و می‌توانید جداول مربوطه را ایجاد و تغییرات لازم را بر روی جداول اعمال کنید

hadoop distcp file:///file.dat hdfs://data/rawevents/20100819/data

hcat "alter table rawevents add partition (ds='20100819') location 'hdfs://data/rawevents/20100819/data'"

 

  1. داده‌ها را آماده کنید

مثلا اگر بخواهید از Pig برای پاکسازی و آماده کردن داده‌ها استفاده کنید در صورتی که از HCatalog استفاده نکنید به هنگام بارگذاری داده‌ها باید منتظر باشید و اطمینان حاصل کنید که داده‌ها بارگذاری شده و در محیط هدوپ موجود هستند اما با استفاده ازHCatalog  خود برنامه بعد از بارگذاری کامل داده‌ها یک پیغام اتمام ارسال کرده و Pig می‌تواند عملیات خود را آغاز کند.

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");

 

 

  1. تحلیل داده‌ها

فرض کنیم بخواهید از Hive برای تحلیل داده‌های مشتریان استفاده کنید. در اینصورت و بدون استفاده از HCatalog  باید خود شما جداول مورد نظر را تغییر داده و پارتیشن‌های مورد نیاز را ایجاد کنید.

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 دیگر نیازی به این کار نداشته و فقط به تحلیل و کوئری زدن بر روی داده‌های خود می‌پردازید زیرا پارتیشن‌ها از قبل برای شما ایجاد شده‌اند.

select advertiser_id, count(clicks)

from processedevents

where date = ‘20100819’

group by advertiser_id;

 

 

HCatalog Web API

WebHCat یک رابط کاربری تحت وب است که امکان کار با محیط HCatalog را فراهم می‌کند. نام اصلی WebHCat تمپلتون بود. کار با این رابط کاربری بسیار آسان بوده و امکانات خوبی را فراهم می‌کند.