Jag tänkte jag skulle skriva ner de första stegen för att komma igång med Hadoop på en windows-dator. Enklast är att köra ett Hadoop-kluster i molnet med hjälp av Amazons Elastic Map Reduce som sköter mycket av det tekniska med att starta upp och administrera ett Hadoop-kluster och låter användaren fokusera på nyttjandet av Hadoop. Ett annat alternativ är att köra exempelvis Clouderas distribution via VM-ware, men det kräver en del hårdvaruprestanda (läs mer). Så jag tänkte fokusera det förstnämnda alternativet och visa hur man startar igång ett interaktivt Pig job på Amazon Elastic Map Reduce. Vill du veta mer om Pig så läs här men kortfattat/förenklat är det ett slags skript-språk som låter användaren fokusera på processandet av data utan att behöva skriva kod för mapreduce.
1. Skaffa ett konto hos Amazon.
2. Sätt upp SSH antingen med Cygwin eller PuTTY (jag föredrar PuTTY). Du måste ladda ner PuTTY och PuTTYgen. Gå därefeter in på http://console.aws.amazon.com/ec2/home och logga in. Klicka på "Amazon Elastic EC2" i huvudmenyn. Välj region (antagligen Europa om du läser detta). Klicka därefter på länken "Key Pairs" och sedan på knappen "Create Key Pair". Spara filen. Starta PuTTYgen, välj "Load" och leta upp filen du precis sparade (PuTTY visar bara filer av typen *.ppk default så välj "All Files" för att se din .pem-fil). Välj din fil och klicka på "Open" och du bör få ett meddelande att PuTTYgen lyckats importera nyckeln men att du måste spara nyckeln i PuTTYs egna format. Så välj "Save private key" och PuTTY kommer fråga om du vill spara nyckeln utan passphrase, välj "Yes". Spara filen med samma namn på .pem-filen och PuTTY kommer automatiskt lägga till filändelsen .ppk. Nu har din nyckel rätt format för att kunna använda PuTTYs SSH-klient för koppla upp dig mot Amazon EMR.
3. Gå till http://console.aws.amazon.com/elasticmapreduce/home (logga in om du behöver det). Klicka på MapReduce i huvudmenyn och välj "Create New Job Flow". Skriv in ett namn på ditt job flow och välj "Pig Program" som typ av job. "Continue". Välj "Start an Interactive Pig Session". En interaktiv Pig session är lämpligast om man vill köra analys ad-hoc, utforma skript eller köra flera olika jobb utan att stänga ner Hadoop-klustret däremellan. "Continue". I nästa steg väljer du hur många noder/instanser du vill starta upp i klustret. Välj small som master, 1 small core och 0 task. "Continue". Här väljer du det EC2-nyckelpar du precis skapat och strunta i VPC subnet och loggningen denna gång. "Continue". I det här steget kan du välja att köra Bootstrap Actions för att anpassa konfigurationen eller installera särskild mjukvara innan du startar ditt jobflow. Men det ska vi inte göra denna gång. "Continue". Kolla igenom att dina val stämmer. "Continue". Nu tar det några minuter innan ditt Hadoop-kluster är redo för att köra dina jobb. Kom ihåg att manuellt avsluta ditt kluster när du är klar, annars kommer Amazon debitera dig för varje maskintimme som klustret är uppe, oavsett om det kör några jobb eller inte. Du avslutar klustret genom att markera aktuellt jobb i managementkonsolen och välja "Terminate".
4. När det gått några minuter kan du klicka på ditt job flow i managementkonsolen och skrolla ner i det nedre detaljfönstret tills du ser Master Public DNS Name. Kopiera det. Starta PuTTY, klistra in ditt Master Public DNS Name som Host Name, välj SSH>Auth, klicka på "Browse" och leta upp och välj din ppk-fil du skapade tidigare m.h.a. PuTTYgen. Välj "Open" och det startar en kommando-promt samt en alertruta som frågar om du litar på den host du kopplar upp dig mot, välj "Yes". Kommando-prompten kommer be dig att logga in, använd användarnamnet "hadoop". Du är nu uppkopplad mot masternoden i ditt Hadoop-kluster.
5. För att köra en interaktiv Pig-session så startar du kommandoprompten (heter passande nog Grunt) genom att helt enkelt skriva "Pig".
grunt>
Pig stödjer kommandona "pwd", "cd", "ls" and "cp" för att interagera med filsystemet. Du kan enkelt byta katalog till en av dina buckets på S3 där du kanske sparat upp de datafiler du önskar bearbeta eller analysera.
grunt> cd s3://<bucket>/<folder> grunt> ls
Hur du laddar upp filer till S3 lämnar jag utanför den här guiden. Den finns tonvis med guider och verktyg för att underlätta det arbetet.
Ofta när man arbetar med Pig så vill man använda funktioner som finns i ett tilläggsbibliotek av öppen källkod för Pig som kalla Piggybank. Elastic MapReduce kopierar Piggybank till noderna när den sätter upp Pig. För att kunna använda de funktionerna så måste du för registrera jar-filen genom att skriva:
grunt> register file:/home/hadoop/lib/pig/piggybank.jar
För att ladda in data rad för rad som egna element så kan man använda TextLoader.
grunt> RAW_DATA = LOAD 's3://<bucket>/<folder>/<file>' USING TextLoader as (line:chararray);
Vill du ladda in alla filer under en viss folder så utelämnar du bara <file>.
Nu har du startat upp ett Hadoop-kluster i ett interaktivt Pig-läge och du har laddat upp data som du kan börja analysera, men det låter jag dig själv experimentera med.
Användbart på vägen är Amazons egna guider, Clouderas instruktionsvideos, wiki för Apache Pig samt O'Reillys ofps Programming Pig.
Lycka till!