Unos podataka u Hadoop klaster

Pre početka instalacije Hadoop-a isplaniraćete ceo sistem ili možda imate neki test Hadoop sistem. U svakom slučaju, prvo morate da se zapitate koje podatke treba obraditi vaš sistem. Kako je Hadoop jako fleksibilan što se tiče raznolikosti podataka, sledeće na šta treba da obratite pažnju je kako te podatke da prebacite u HDFS.

Brzina podataka

Kao prvo, treba da utvrdite kojom brzinom pristižu podaci u vaš sistem. Neka generalna podela podataka u tom smislu bi bila na one statične i nestatične podatke. Statični podaci su oni koji se ne povećavaju nakon unosa. Pravi primer za ovakve podatke su genetski podaci. Malo da pojasnim ovo: naravno da vi možete da dodate nove podatke u sistem, nego kada unesete neke podatke, analize se vrše samo nad njima. Dobijete 1TB genetskih podataka i sve analize vršite nad njima. Za statične podatke je lakše odabrati alat za transfer u Hadoop klaster iz prostog razloga što transfer nije čest. Nasuprot statičnim, nestatični podaci se stalno uvećavaju. Dobar primer su socijalne mreže ili log podaci – ako ste imali 2TB log podataka, za kratko vreme imate još toliko. U ovakvim situacijama morate pažljivo da birate alate kako biste proces automatizovali i olakšali. Naravno, i vaše analize nisu iste ako imate podatke od pre mesec dana ili sve podatke do dana kada ih analizirate. U početku svog rada sa Hadoop-om nisam previše obraćao pažnju na ovo, ali kada sam dobio pristup i nekim podacima koji stalno rastu, onda sam uvideo da treba da poboljšavam načine transfera podataka u HDFS i da je jedan od prvih koraka plan na osnovu brzine podataka.

Količina podataka

Još jedna stvar koju treba uzeti u obzir jeste količina podataka. Bitno je da osim inicijalnog unosa podatak u HDFS pokušate da predvidite koliki će priliv biti ubuduće i na koje vreme. Ovo je bitno ako npr. imate podatke koje unesete u HDFS danas, pa tek za mesec dana, razmislićete da li želite da trošite vreme na pisanje složenih skripti koje sve to automatizuju. Ako sa druge strane imate priliv podataka svakog dana još kako je pametnije uložiti vreme da sve automatizujete. Količina je bitna iz razloga planiranja kanala prenosa. Naime, neki alati daju mogućnost odabira propusnog opsega. Ako vam pristižu male količine podataka, onda definišite parametre prema tome kako ne biste opteretili sistem. Verujte mi, ovo je jako bitno! Imao sam iskustva sa ovim i zna da zada glavobolju ako sve lepo ne izdefinišete.

Alati

Postoji nekoliko načina za prenos podataka u Hadoop klaster, odnosno u HDFS. Ako testirate nešto na početnom nivou, možete koristiti HUE i njegov interfejs, ali naravno to nije opcija, pogotovo ako imate jako nestatične podatke. Ostali načini su:

  • WEB HDFS
  • HDFS NFS Gateway
  • Apache Flume
  • Apache Sqoop
  • Korišćenje HDFS komandi

Naravno, ovo su samo neki načini koje sam ja testirao. Postoji još nekoliko alata, ali kako ih nisam testirao ne želim sa sigurnošću da tvrdim koji su i kako rade.

Što se tiče Flume-a i Sqoop-a slede tekstovi sa primerima, tako da će ovaj tekst biti siromašniji za ova dva alata. Pokušaću da opišem ostale ukratko.

WEB HDFS – ovo je klasičan REST API za HDFS, npr. HUE koristi ovaj API za unos podataka u HDFS. Nije preterano teško koristiti ovaj način, još ako ste upoznati sa REST-om, mislim da ćete preferirati ovaj način. Primetio sam da se u realnim modelima dosta potencira. Moje mišljenje je da je ovaj način jako fleksibilan i možete prilično da prilagodite sebi sistem unosa podataka u Hadoop klaster. Ne želim da pišem ovde kako izgleda koristiti WEB HDFS, jer je zvanična dokumentacija jako dobra i preporučujem je.

HDFS NFS Gateway

Jedna jako zanimljiva mogućnost HDFS-a, NFS Gateway vam omogućava da pristupite HDFS-u sa vašeg lokalnog fajl sistma. Zamislite da vam je Hadoop klaster jedna fleš memorija i da je utaknete u vaš računar. Ako omogućite ovo na Hadoop klasteru, dobijate mogućnost da prenosite podatke iz HDFS-a i u HDFS, možete da strem-ujete podatke direktno na HDFS. Ako se sve pravilno podesili na klasteru, dovoljno je da uradite sledeće ne lokalnoj mašini:

       mount -t nfs -o vers=3,proto=tcp,nolock $server:/ $mount_point

Ovo može da bude prilično zgodno ako imate neke podatke na odvojenom serveru i želite da ih brzo prebacite u HDFS.

HDFS ima svoje ugrađene komande koje su unix like, odnosno ako ste upoznati sa Linux-om, jako lako ćete da ih savladate. Iskreno, ja nisam prviše koristio ove komande iz prostog razloga, Hadoop je instaliran na tri odovojene mašine, a podaci su vam na četvrtoj i nisam hteo tradicionalno da ih prebacim na jednu od mašina, pa zatim da koristim ove komande. Ovo može da bude odlično rešenje za one koji pored Hadoop-a te iste mašine koriste i za prikupljanje podatka. Dovoljno je da uradite sledeće :

hdfs dfs -put localfile /user/hadoop/hadoopfile.

Ova komanda služi da neki fajl prebacite u HDFS, a da se nalazi na istoj mašini.

Ovo su neke mogućnosti transfera podataka u HDFS, koje podržavaju bilo koji tip podataka i naravno ako ste vešti možete odlično da ih iskoristite. Posebno interesantni alati su Flume i Sqoop, koji su baš namenjeni specifičnim podacima koji se verovatno i najčešće obrađuju uz pomoć Hadoop-a. Dosta pažnje treba posvetiti tome kako da unesete podatke u Hadoop klaster, jer ako nemate podatke nemate ni na čemu da radite. Spremite se za Flume i Sqoop i kodove koje sam ja pisao. Naravno, nastavljamo da hadupujemo zajedno!