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.
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.