Internet-raamwerk voor de grote jongens
Het zijn gouden tijden voor techneuten. Iedereen met veel voldoende kennis en vaardigheden, genoeg ambitie en niet te veel scrupules kan een prachtige internet-onderneming van de grond trekken. Voor wie groot denkt, is een standaard serverpark echter niet toereikend. Bedrijven als Google, Twitter en Facebook bewaren en bewerken enorme hoeveelheden gegevens. Zij gebruiken daarvoor meestal een parallel platform als Hadoop.
Hadoop is een opensourceproject van de Apache Foundation. Het is ontwikkeld voor distributed computing en biedt onder meer een eigen bestandssysteem dat het mogelijk maakt om gegevens gedistribueerd over een netwerk op te slaan. Ook zijn er subprojecten voor het verwerken van data, zoals Hive en MapReduce, en er is een tool voor het uitvoeren van parallelle bewerkingen die Pig is genoemd. Hadoop maakt gebruik van Java en wordt onder meer ontwikkeld door medewerkers van Facebook, Yahoo, LinkedIn en Twitter.
Net voor de jaarwisseling verscheen versie 1.0, maar begin vorig jaar won het platform al de eerste prijs bij de MediaGuardian Innovation Awards. De jury legde daarbij vooral de nadruk op het belang voor innovatieve bedrijven als Twitter en Facebook.

Wat is Hadoop?
De eerste code voor Hadoop werd meer dan tien jaar geleden geschreven door Doug Cutting. Hij werkte destijds aan twee projecten voor een opensource zoekmachine op basis van Java: Nutch verzorgde het crawler-gedeelte, Lucene de indexering en search-afhandeling. Toen Google in 2004 op de Usenix-conferentie een paper over het MapReduce-algoritme publiceerde, gebruikte Cutting dat om de schaalbaarheid van Lucene te verbeteren. Het resultaat was Hadoop, dat inmiddels, net als Lucene en Nutch, is ondergebracht bij de Apache Software Foundation (ASF), waar Cutting op dit moment voorzitter van is.
Hadoop is het platform voor de internetondernemer die in het groot denkt. Wie aan de volgende Google, Twitter of Facebook werkt, heeft heel veel verwerkingskracht, geheugen en opslag nodig - veel meer dan een batterij grote servers je kan bieden. Gelukkig hebben de meeste internetdiensten genoeg aan horizontale schaalbaarheid. Dat wil zeggen dat de prestaties en de capaciteit min of meer lineair toenemen met het aantal servers dat je neerzet. Daardoor kan commodity hardware worden gebruikt: kleine, goedkope systemen die makkelijk en snel vervangen kunnen worden.
Zo gebruikt Google in zijn datacenters losse moederborden en harddisks, die in zelf ontworpen rekken worden geschoven. Als je kijkt naar de omvang van Googles infrastructuur - naar verluidt heeft het bedrijf met ongeveer een miljoen systemen twee procent van alle servers ter wereld in bezit - dan betaalt die eigen ontwikkeling zich dubbel en dwars terug. Andere grootverbruikers zijn bedrijven als Akamai, Amazon, Intel, Microsoft en Rackspace, al is hun infrastructuur een orde van grootte kleiner.
Google-technologie
Niet voor niets hebben de ontwikkelaars van Hadoop zich laten leiden door dezelfde technologieën die ook aan de basis van Google stonden: MapReduce en het Google File System. Die eerste is een methode om parallelle problemen over een heterogene cluster te verdelen. Voor de liefhebbers: MapReduce lijkt op een gedistribueerde, functionele vorm van backtracking en recursie.
GFS is het bijbehorende, gedistribueerde bestandssysteem. Bestanden worden in stukken geknipt en over verschillende systemen verdeeld. Door die stukken ook nog eens te kopiëren wordt voor redundancy gezorgd, en bovendien kan een bestand zo geparallelliseerd worden opgevraagd.
/i/1328523617.png?f=imagenormal)
Location awareness
Hoewel Hadoop in eerste instantie is ontwikkeld voor de Nutch/Lucene-zoekmachine, is het een algemeen raamwerk voor het beheer van een netwerk van nodes en het daarmee uitvoeren van gedistribueerde opdrachten. Om de infrastructuur zowel robuust als efficiënt te maken, moet de software weten welke nodes zich in welke rekken bevinden en welke nodes daar netwerktechnisch bij in de buurt zijn.
Deze vorm van location awareness zorgt ervoor dat redundante stukken data over verschillende rekken kunnen worden verspreid, zodat gegevens beschikbaar blijven als de stroomvoorziening of een netwerkswitch uitvalt. Tegelijkertijd wil je de worker nodes gegevens laten bewerken die zich al op hetzelfde systeem bevinden of anders op een data node die op dezelfde switch is aangesloten. De informatie over de onderlinge onafhankelijkheid van nodes is dus van belang voor het opslaggedeelte, terwijl de nabijheid belangrijk is bij het uitvoeren van de opdrachten.
Hadoop gebruikt daarvoor verschillende soorten nodes. Er is minstens één master node of NameNode. Deze fungeert als ingang voor het file system, dat uit een heleboel DataNodes bestaat. De JobTracker is verantwoordelijk voor de distributie van opdrachten over de compute nodes oftewel de TaskTrackers. Meestal zijn de data nodes met een compute node gecombineerd in één worker node. De nodes communiceren ten slotte met elkaar via rpc over ssh-verbindingen.

Bestandssysteem HDFS
Hadoop omvat ook het Hadoop Distributed File System, dat bestanden in blokken van 64MB over de data-nodes verdeelt. Snapshots en backups van de cluster kunnen worden gemaakt door de indextabellen van de master node naar een Checkpoint of Backup-node te schrijven.
Met Federation kan een uitgevallen master-node worden opgevangen. Deze recente uitbreiding van HDFS creëert een aantal alternatieve ingangen voor het file system. Met deze extra NameNodes is een veelbesproken single-point-of-failure verholpen. Checkpoints doen hetzelfde voor de JobTracker, zodat niet al het werk verloren is als die crasht.
Om gegevens voor een bewerking op te vragen en de uitkomsten daarna weer terug te sturen, vragen clients eerst bij de NameNode op waar bepaalde gegevens zich in het bestandssysteem bevinden. De informatie zelf wordt vervolgens rechtstreeks met de DataNodes uitgewisseld.
Er kunnen overigens ook virtuele bestandssystemen worden gebruikt. Andere toegangsmogelijkheden zijn ftp en http.
/i/1328524583.gif?f=imagenormal)
Andere bestandssystemen
Hadoop kan ook overweg met andere gedistribueerde bestandssystemen dan HDFS: de scheduler is in principe onafhankelijk van het onderliggende file system. De software bevat een api om drivers voor alternatieve bestandssystemen te kunnen ontwikkelen. Wel is het voor de prestaties en efficiëntie van belang dat een dergelijk alternatief bestandssysteem location awareness ondersteunt.
Een van die alternatieven is CloudStore, een in C++ geschreven pakket dat vergelijkbare functionaliteit biedt. Hadoop kan ook worden gekoppeld met Amazon S3. Andere ondersteunde bestandssystemen zijn IBM's General Parallel File System, Ibrix Fusion van HP, en MapR.
Big Data
Hadoop schaalt op tot duizenden nodes en tientallen petabytes aan data. Voor dergelijke omgevingen, waarin de hoeveelheid informatie zo groot wordt dat deze niet meer op de traditionele manier te behappen is, wordt de term Big Data gebruikt. Al die gegevens kunnen niet meer in een (relationele) database worden opgeslagen; ze vereisen systemen en toolsets die parallel en horizontaal enorm schaalbaar zijn. Toepassingen liggen in de wetenschap en in de zakelijke en financiële wereld, maar vooral aan de achterkant van die grote, wereldwijde internetportals.
Inmiddels is er dan ook een hele zwik uitbreidingen voor Hadoop/HDFS beschikbaar, zoals:
- Cassandra: gedistribueerde database met replicatie;
- Chukwa: log-analyse;
- Dumbo: een Python-api;
- Hama: Bulk Synchronous Parallel-library voor grootschalige parallelle, wetenschappelijke berekeningen;
- HBase: gedistribueerde database, vergelijkbaar met Google's Bigtable; ook geschikt voor het schrijven van records, in tegenstelling tot het voor lezen geoptimaliseerde HDFS;
- Hive: datawarehousing, analyses en query's met behulp van een eigen sql-taal;
- Hypertable: een gedistribueerde database die in C++ is geschreven;
- Mahout: aanbevelingen, groeperen, classificeren en datamining;
- Pig: data-analyse met behulp van een eigen specificatie-taal en
- Zookeeper: configuratie-management voor clusters.
Aan de slag
Installatie
Hadoop is gepubliceerd onder de Apache-licentie. Voor de installatie zijn Java versie 1.6 en ssh nodig. Hoewel meestal Linux wordt gebruikt, kan Hadoop met Cygwin ook onder Windows worden gedraaid. Voor productiesystemen wordt dat echter afgeraden. Hadoop is ook werkend te krijgen onder BSD, OpenSolaris en OS/X.
Hadoop kan in drie verschillende modes draaien: Standalone, Pseudo-Distributed voor het draaien van een compleet netwerk op een enkel systeem, en Fully Distributed voor een volledig gedistribueerd cluster. Installatie en configuratie van de eerste twee is eenvoudig: een kwestie van de software neerzetten en wat xml-bestanden aanmaken.
De clustersetup is ingewikkelder. Daarvoor moet om te beginnen op elke node de Hadoop-stack worden geïnstalleerd. Daarnaast zijn er veel configuratiemogelijkheden. Ten slotte moet natuurlijk een lijst met adressen en rack-nummers van de slave nodes worden aangemaakt. Een dergelijke installatie heeft meer voeten in de aarde dan een testopstelling, maar is toch niet overdreven ingewikkeld; ook voor een gevorderde hobbyist is het prima te doen.
MapReduce
De waarde van de cluster zit natuurlijk in de bewerkingen op de gegevens die zich op het gedistribueerde bestandssysteem bevinden. Die bewerkingen worden vastgelegd in twee Java functies: Map en Reduce. De eerste voert een opdracht uit op alle data-blokken op een systeem, en dat tegelijkertijd op alle worker nodes. De JobTracker op de master node verzamelt vervolgens de deelresultaten van de TaskTrackers op de afzonderlijke nodes, terwijl de Reduce-functie die verwerkt tot een eindresultaat.
Hoewel het Hadoop-framework in Java is geschreven, is dat niet per definitie ook het geval voor de Map- en Reduce-functies. De slave nodes kunnen ook C++-functies of shell-commando's uitvoeren, respectievelijk met pipes en streaming. Verder is er een plug-in voor Eclipse beschikbaar, die zowel in Linux- als in Windows-omgevingen bruikbaar is.
Van start
Om snel van start te gaan, kun je de Hadoop Demo VM van Cloudera proberen; dat is een VMware-image met daarop CentOS, Hadoop, Hive en Pig. Een andere mogelijkheid is de OpenSolaris Hadoop LiveCD van Sun. Deze image is nog steeds te downloaden, ook al wordt OpenSolaris al tijden niet meer door Sun-eigenaar Oracle onderhouden. Hadoop heeft verder nog op de Sun Cloud gedraaid, maar ook die is niet meer beschikbaar.
Voor een eerste productiesysteem lijkt de Hadoop-dienst van Amazon een goede keus. Amazon Elastic MapReduce is gebaseerd op EC2 en S3, waarmee de volledige flexibiliteit en schaalbaarheid van een cloudoplossing beschikbaar is. Bovendien voorkom je hiermee de afstand tussen de compute nodes en de data nodes die ontstaat als een eigen Hadoop-systeem wordt gecombineerd met alleen S3-opslag. In dat geval is het dus beter om de complete dienst af te nemen.
Hadoop-leveranciers
Voor grotere systemen is een eigen infrastructuur natuurlijk goedkoper. Cloudera's Distribution Including Apache Hadoop biedt kant-en-klare installatiepakketten voor Debian/Ubuntu, RHEL/CentOS/Fedora en SuSE. Ook MapR levert distributies voor RHEL/CentOS en Ubuntu en werkt hierbij samen met EMC, dat deze software stack weer onder de naam Greenplum HD Enterprise Edition verkoopt.
Deze bedrijven leveren allemaal professionele ondersteuning, net als Hortonworks en traditionele leveranciers als Google, HP, IBM, Oracle en SGI. De laatste twee werken weer samen met Cloudera. Daarnaast zijn er nog diverse leveranciers die zich hebben gespecialiseerd in bepaalde toepassingen of specifieke markten.
Inspiratie
Inspiratie
De twee grootste gebruikers van Hadoop zijn Facebook en Yahoo. De eerste gebruikt een cluster met tientallen petabytes aan data onder andere voor het draaien van analyses. Yahoo gebruikt Hadoop voor de indexering voor zijn search engine. Daarnaast levert dit bedrijf de meeste code en is het ook nog eens voormalige werkgever van Cutting. Er zijn echter talloze andere bekende namen op de lijst van Hadoop-gebruikers; zij zetten het platform onder meer in voor data-analyse en log-processing, zoekmachines en beeldbewerking. IBM gebruikt het voor zijn Blue Cloud-dienst, LinkedIn zoekt ermee naar People You May Know, en Twitter zet het in voor de opslag en de verwerking van tweets. Ook de talloze Wikipedia-linkjes in dit artikel worden trouwens met behulp van een Hadoop-systeem uitgeleverd.
Ten slotte nog een laatste alternatief voor wie met Hadoop aan de slag wil gaan: Sector/Sphere. Waar HDFS de bestanden ophakt in blokken, werkt dit platform met de complete, originele files. Bovendien is Sector gemaakt voor wan-verbindingen. Daarvoor is een eigen netwerkprotocol op basis van udp ontwikkeld: UDT. Sector/Sphere is geschreven in C++ en is beschikbaar voor Linux en Windows. De parallelle engine van Sphere lijkt flexibeler dan die MapReduce, en is volgens de ontwikkelaars ook nog eens twee tot vier keer sneller dan Hadoop.