Začínáme s Hadoopem: Co je to HDFS

Hadoop Distibuted File System (HDFS) je distribuovaný souborový systém navržený tak, aby běžel na běžném hardwaru. Protože se jedná o distribuovaný souborový systém (běží na clusteru) a navíc je určen k tomu, aby běžel na běžně dostupném hardware, je velký důraz kladen na to, aby se dokázal vypořádat s chybami, které mohou vzniknout (chyby na síti, chyby na hardware). K hardwarovým chybám přistupuje tak, že se spíše jedná o standard než o výjimku :-). HDFS je napsáno v jazyce Java.

U aplikací používajících HDFS se předpokládá, že pracují s velkým množstvím dat. Typický soubor na HDFS má gigibajty až terabajty dat. HDFS je tedy zaměřeno na podporu velkých souborů. Se soubory v HDFS se pracuje stylem zapiš jednou, čti mnohokrát (write-once-read-many). Předpokládá se, že jednou vytvořený soubor se nebude měnit (výjimkou je přidání – append, nebo zkrácení – truncate), ale bude se k němu mnohokrát přistupovat (bude mnohokrát čten). Dalším předpokladem je, že mnohem efektivnější než přesouvat data k aplikaci provádějící výpočet je přiblížit výpočet k datům (moving computation is cheaper than moving data).

HDFS je založen na architektuře master – slave. HDFS cluster se skládá z jednoho Namenode (master server), který vše řídí a velkého množství Datanodů, kde jsou uložena data. Namenode provádí operace jako otevření, zavření a přejmenování souborů či adresářů. Datanody obsluhují čtení a zápis a také dle instrukcí namedodu vytvářejí bloky, mažou a replikují. Počet replik (kopií) je možno konfigurovat (nazývá se to replikační faktor). Informace o replikačním faktoru je uložena na namenodu. Namenode pravidelně dostává signály (heartbeat a blockreport) z datanodů v klastru a tak má stále přehled o tom, které datanody jsou dostupné (heartbeat potrvzuje, že datanode funguje a blockreport obsahuje seznam bloků na datanode).

HDFS podporuje tradiční hierarchickou strukturu souborů. To znamená, že je možné vytvářet složky a do nich umisťovat souboru. Soubory lze mazat, přemisťovat, nebo přejmenovat. Uživatel linuxu se zde bude cítit jako doma.

HDFS ukládá soubory do bloků (posloupnosti bloků). Blok je nejmenší jednotka souborového systému. Typická velikost bloku je 128MB. Všechny bloky, na které je velký soubor rozdělen, mají stejnou velikost s výjimkou posledního bloku. Pokud máme data o velikosti 1024MB a HDFS je nakonfigurováno tak, aby vytvářelo bloky o velikosti 128MB, HDFS vytvoří 8 bloků a uloží je na různé datanody. Zároveň data replikuje na jiné (odlišné) datanody.

Bloky jsou replikovány z důvodu zajištění proti chybám. Namenode neumožňuje, aby jeden datanode měl více replik stejného bloku. Bloky musí být replikovány na různých datanodech. Velikost bloku a replikační faktor (často se používá tři) jsou konfigurovatelné parametry. HDFS se snaží optimalizovat čtení dat tak, aby se čtení provádělo z dat nejblíže k požadavku na čtení. Pokud tedy existuje replika na datanodu, ze kterého vzešel požadavek na čtení dat z repliky, je použit tento blok. Datanode ukládá HDFS data do souborů na lokální souborový systém. Každý blok HDFS dat uloží se nového souboru na lokálním souborovém systému.

Pro sledování změn používá Namenode transakční log nazývaný EditLog. Do tohoto logu si ukládá všechny změny, které se udály a týkaly se systémových metadat. Metadata jsou např. název souboru, počet bloků, počet replik, umístění bloků, id bloků, atd. EditLog je uložen na lokálním souborovém systému.

Komunikační protokoly v rámci HDFS jsou založeny na TCP/IP.

V příštím příspěvku si rozchodíme HDFS na lokálním počítači.


Zdroje:

Napsat komentář