# Apache Hadoop

Apatxe Hadoop és un entorn de treball per a programari, baix llicència lliure, per a programar aplicacions distribuïdes que manegin grans volums de dades (big data). Permet a les aplicacions treballar amb milers de nodes en xarxa i petabytes de dades. Hadoop es va inspirar en els documents de Google sobre MapReduce i Google File System (GFS).
Hadoop és un projecte de l'organització Apatxe que està sent construït i usat per una comunitat global de contribuents, mitjançant el llenguatge de programació Java. Yahoo! ha estat el major contribuent al projecte, i usa Hadoop extensivament en el seu negoci.

## Característiques
### Arquitectura

Hadoop consisteix bàsicament en el Hadoop Common, que proporciona accés als sistemes d'arxius suportats per Hadoop. El paquet de programari The Hadoop Common conté els arxius .jar i els scripts necessaris per a executar Hadoop. El paquet també proporciona codi font, documentació, i una secció de contribució que inclou projectes de la Comunitat Hadoop.
Una funcionalitat clau és que per a la programació efectiva de treball, cada sistema d'arxius ha de conèixer i proporcionar la seva ubicació: el nom del rack (més precisament, del *switch) on està el node treballador. Les aplicacions Hadoop poden usar aquesta informació per a executar treball en el node on estan les dades i, en defecte d'això, en el mateix rack/switch, reduint així el trànsit de xarxa troncal (backbone traffic). El sistema d'arxius HDFS usa això quan replica dades, per a intentar conservar còpies diferents de les dades en racks diferents. L'objectiu és reduir l'impacte d'un tall d'energia de rack o de fallada d'interruptor de manera que fins i tot si es produeixen aquests esdeveniments, les dades encara puguin ser llegibles.
Un clúster típic Hadoop inclou un node mestre i múltiples nodes esclau. El node mestre consisteix en jobtracker (rastrejador de treball), tasktracker (rastrejador de tasques), namenode (node de noms), i datanode (node de dades). Un esclau o computi node (node de còmput) consisteixen en un node de dades i un rastrejador de tasques. Hadoop requereix tenir instal·lats entre nodes en el clúster JRE 1.6 o superior, i SSH.

### Sistemes d'arxius

Hadoop Distributed File System
El Hadoop Distributed File System (HDFS) és un sistema d'arxius distribuït, escalable i portàtil escrit en Java per al framework Hadoop. Cada node en una instància Hadoop típicament té un únic node de dades; un clúster de dades forma el clúster HDFS. La situació és típica perquè cada node no requereix un node de dades per a ser present. Cada node serveix blocs de dades sobre la xarxa usant un protocol de bloqueig específic per a HDFS. El sistema d'arxius usa la capa TCP/IP per a la comunicació; els clients usen RPC per a comunicar-se entre ells. El HDFS emmagatzema arxius grans (la grandària ideal d'arxiu és de 128 MB9), a través de múltiples màquines. Aconsegueix fiabilitat mitjançant replicat de dades a través de múltiples hosts, i no requereix emmagatzematge RAID en ells. Amb el valor de replicació per defecte, 3, les dades s'emmagatzemen en 3 nodes: dos en el mateix rack, i un altre en un rack diferent. Els nodes de dades poden parlar entre ells per a reequilibrar dades, moure còpies, i conservar alta la replicació de dades. HDFS no compleix totalment amb POSIX perquè els requeriments d'un sistema d'arxius POSIX difereixen dels objectius d'una aplicació Hadoop, perquè l'objectiu no és tant complir els estàndards POSIX sinó la màxima eficàcia i rendiment de dades. HDFS va ser dissenyat per a gestionar arxius molt grans.9 HDFS no proporciona Alta disponibilitat.

## Usuaris prominents

El 19 de febrer de 2008, Yahoo! Inc. va llançar el que pretenia era la més gran aplicació de producció Hadoop. El Yahoo! Search Webmap és una aplicació de Hadoop que s'executa en més de 10 000 nuclis Linux Clústers de ram i produeix dades que s'utilitzen actualment en tots els resultats de cerca de Yahoo!. El juny de 2009, Yahoo! va fer disponible el codi font de la versió de Hadoop que usa en producció.
A part de Yahoo!, altres organitzacions usen Hadoop per a executar còmputs enormes distribuïts. Algunes d'aquestes empreses inclouen
* A9.com
* AOL
* Booz Allen Hamilton
* EHarmony
* eBay
* Facebook
* Fox Interactive Media
* Freebase
* IBM
* ImageShack
* ISI
* Joost
* Last.fm
* LinkedIn
* Meebo
* Metaweb
* Mitula
* The New York Times
* Ning
* Powerset (ahora parte de Microsoft)
* Rackspace
* StumbleUpon
* Tuenti
* Twitter
* Veoh
* Zoosk
* 1&1
* MercadoLibre

## Amb Sun Grid Engine i Nutanix

Hadoop pot usar-se també en granges de computadores i entorns d'alt rendiment. La integració amb Sun Grid Engine va ser llançada, i executar Hadoop en Sun Grid (el servei sota demanda de utility computing) és possible. En la implementació inicial de la integració, el programador de temps de CPU no sap la localització de les dades. Desafortunadament, això significa que el processament no és fet sempre en el mateix rack on estan les dades; això era una característica principal de la Rutin Hadoop. Una millor integració amb localització de dades es va anunciar durant la Sun HPC Programari Workshop '09.
Sun també té el projecte Hadoop Live CD OpenSolaris, que permet executar un clúster Hadoop completament funcional usant un live CD.
Per part seva, la tecnologia de Nutanix, també és capaç de suportar plataformes Hadoop, aportant els grans avantatges de la seva arquitectura (redundància, rendiments, enorme facilitat de gestió, etc), sense les dependències de storage habituals en aquestes infraestructures Cloud.

## Beneficis

* Capacitat d'emmagatzemar i processar enormes quantitats de qualsevol mena de dades, a l'instant. Amb l'increment constant dels volums i varietats de dades, especialment provinents de mitjans socials i la Internet de les Coses (IoT), aquesta és una consideració important.
* Poder de còmput. El model de còmput distribuït de Hadoop processa big data a gran velocitat. Quants més nodes de còmput utilitza vostè, major poder de processament té.
* Tolerància a fallades. El processament de dades i aplicacions està protegit contra fallades del maquinari. Si falla un node, els treballs són redirigits automàticament a altres maneres per a assegurar-se que no falli el processament distribuït. S'emmagatzemen múltiples còpies de totes les dades de manera automàtica.
* Flexibilitat. A diferència de les bases de dades relacionals, no ha de processar prèviament les dades abans d'emmagatzemar-los. Pot emmagatzemar tantes dades com desitgi i decidir com utilitzar-los més tard. Això inclou dades no estructurades com a text, imatges i vídeos.
* Sota cost. L'estructura de codi obert és gratuïta i empra maquinari comercial per a emmagatzemar grans quantitats de dades.
* Escalabilitat. Pot fer créixer fàcilment el seu sistema perquè processi més dades són només agregar nodes. Cal poca administració

## Limitants

* La programació MapReduce no és una opció adequada per a tots els problemes. stepEs adequada per a simples sol·licituds d'informació i problemes que es poden dividir en unitats independents, però no és eficient per a fer tasques analítiques iteratives i interactives.
* Existeix una bretxa de talent àmpliament reconeguda. Pot ser difícil aconseguir programadors principiants amb suficients coneixements de Java perquè siguin productius amb MapReduce. Aquesta és una raó per la qual els proveïdors de distribució s'afanyen per a col·locar tecnologia relacional (SQL) sobre Hadoop.
* Seguretat de dades. Un altre repte se centra al voltant d'aspectes de seguretat de dades fragmentades, encara que estan sorgint noves eines i tecnologies. El protocol d'autenticació Kerberos és un pas important per a tornar assegurances els entorns Hadoop.
* Gestió i govern de dades complet. Hadoop no té eines fàcils d'usar i repletes de característiques per a la gestió de dades, depuració de dades.

## Projectes basats en Hadoop

* Ambari™: una eina basada en web per a provisionar, gestionar i monotoritzar l'Apache Hadoop, que inclo suport per a Hadoop HDFS, Hadoop MapReduce, Hive, HCatalog, HBase, ZooKeeper, Oozie, Pig i Sqoop.
* Avro™: un sistema de serialització de dades.
* Cassandra™: una base de dades multimáster escalable sense punts de fallida.
* Chukwa™: un sistema de col·lecta de dades per a gestionar grans sistemes distribuïts.
* HBase™: una base de dades distribuïda que suporta emmagatzemament de dades estructurades per a garns taules.
* Hive™: una inaestructura de dipòsits de dades.
* Mahout™: una biblioteca d'escaneig de dades i aprenentatge automètic.
* Pig™: un llenguatge de flux de dades d'alt nivell i entorn de programació en paral·lel.
* Spark™: una màquina de càlcul ràpid i general per a les dades Hadoop.
* Tez™: un entorn de programació de flux de dades genèric, construït sobre Hadoop YARN.
* ZooKeeper™: un servei de coordinació d'altes prestacions per a aplicacions distribuïdes.

## Bibliografia

* Lam, Chuck (28 de juliol de 2010). Hadoop in Action (1st edició). Manning Publications. p. 325. ISBN 1935182196.
* Venner, Jason (22 de juny de 2009). Pro Hadoop (1st edició). Apress. p. 440. ISBN 1430219424. Arxivat des de l'original el 5 de desembre de 2010. Consultat el 16 de febrer de 2011.
* White, Tom (16 de juny de 2009). Hadoop: The Definitive Guide (1st edició). O'Reilly Mitjana. p. 524. ISBN 0596521979.
Programari similar: Google File System.