ABIS Infor - 2013-04

Tools voor "Big Data"

Peter Vanroose (ABIS) - 10 april 2013

Samenvatting

Hebt u massieve volumes "corporate" data verzameld die wacht om geanalyseerd te worden, en hebt u de smaak te pakken na ons vorige artikel over NoSQL? Dan wilt u wellicht aan de slag met software voor Big Data die eenvoudig (en gratis) te installeren is. Hier alvast een aanzet hiertoe, vooraleer u echt de stap zet!

Situering

Apache, een vrijwilligersorganisatie (type vzw) die "Open Source" software promoot, is zich de voorbije jaren steeds meer aan het profileren als koepel voor allerlei belangrijke Open Source-projecten, waaronder verschillende "Big Data" tools.

Het bekendste, maar ondertussen al lang niet meer enige project van de "Apache Software Foundation" is de "Apache web server" (http server) software. Recentelijk werd ook OpenOffice een Apache-merknaam, nadat Sun (de vorige "host") opging in Oracle, die daarna te veel de commerciële toer op wou met dit Open Source-alternatief voor Microsoft Office.

De de facto basis-software voor Big Data is Hadoop (1), een Apache-product. Veel Big Data software bouwt verder op Hadoop, meestal commerciële software; maar er zijn ook een aantal goede open source-pakketten, allemaal onder de Apache-paraplu, waarvan ik de volgende kort onder de loep wil nemen: HBase, Pig, ZooKeeper en Cassandra.

Hadoop

Als raamwerk voor data-intensieve gedistribueerde applicaties is Hadoop gebaseerd op het zgn. MapReduce model, waarbij een algoritme opgedeeld wordt in veel kleine stukjes werk die in parallel uitgevoerd kunnen worden. Dit gebeurt op verschillende computers (genaamd nodes) van een cluster. Voor de opslag en uitwisseling van data binnen de cluster wordt gebruik gemaakt van HDFS: het Hadoop gedistribueerde file-systeem.

Het framework zorgt op transparante wijze voor het herstarten van een job wanneer één van de nodes zou falen. Alles kan dus draaien op zgn. "commodity hardware": goedkope (Intel) processoren, mogelijk zelfs (zeer) oude computers. Maar wel mogelijk duizenden dergelijke computers voor een cluster! Hadoop zorgt dus voor het bijeenhouden van de cluster.

HDFS zorgt trouwens ook voor data-redundantie: alle gegevens worden herhaald bijgehouden en transparant gerepliceerd, zodat het uitvallen van een node ook voor data-beschikbaarheid geen probleem hoeft te zijn. Anderzijds probeert HDFS ook te zorgen dat de data-opslag gebeurt zo dicht bij de applicatie als mogelijk: zelfde node, of toch zeker zelfde "rack". Dit model is vooral geschikt voor read-only applicaties; massieve datawijzigingen vereisen veel meer inter-node datatrafiek, wat daardoor mogelijk een flessenhals wordt, zeker in geval van "commodity" netwerk-hardware.

Leuk om weten: de naam "Hadoop" werd door z'n ontwerper Doug Cutting in 2005 gekozen, naar de naam van het speelgoed-olifantje van z'n zoontje. Het logo van Hadoop is dan ook dit olifantje (1).

HBase

Hadoop kan, met HDFS, massieve hoeveelheden data opslaan in "flat files" (uiteraard eventueel gestructureerd; meestal JSON). Maar op een bepaald punt is een "echte" database nodig. Relationeel zijn er veel mogelijkheden, maar in een gedistribueerde context zoals Hadoop met HDFS is het zinvoller om ook de database gedistribueerd te laten opereren.

HBase (2) profileert zichzelf als de Hadoop-database: gedistribueerd, schaalbaar, modulair, versioned, en robuust bij het uitvallen van data-nodes doordat onderliggend HDFS gebruikt wordt. HBase gebruikt zgn. kolom-opslag. Dit is ideaal voor zeer grote tabellen: miljarden rijen met mogelijkerwijs miljoenen kolommen. Daar staat tegenover dat HBase niet relationeel is: het garandeert geen transactionele "ACID"ity (atomic, consistent, isolated, durable transacties): rollbacks zijn niet mogelijk, elke actie is een transactie. Maar in de context van Big Data is dit gebruikelijk, en ook goed voor performance.

De API bestaat uit een aantal Java-klasses, die dus vanuit een MapReduce-job kunnen opgeroepen worden. HBase (en de facto ook Hadoop) onderstellen dus het gebruik van de programmeertaal Java door de gebruiker.

Pig

Hadoop (en HBase) bieden een programmatorische API, en gaan er dus van uit dat de gebruiker de gegevens op een laag niveau benadert: er is geen "hogere" 4de-generatie programmeertaal voorzien, zoals SQL, ook niet met HBase.

Pig (3) probeert dit hiaat op te vullen (net als alternatieve pakketten zoals Hive): het biedt een SQL-achtige interface die door de Pig-compiler vertaald wordt naar een geparallelliseerde implementatie, geschikt om als MapReduce-algoritme in Hadoop uitgevoerd te worden. Hier een voorbeeld van een Pig Latin "programma" (overgenomen uit (4)), equivalent met de SQL-query SELECT word, COUNT(*) FROM woordenlijst GROUP BY word ORDER BY 2 DESC :

-- eerst de data inlezen uit één of meerdere HDFS-bestanden; daarna:
words = GROUP woordenlijst BY word;
word_count = FOREACH word_groups GENERATE COUNT(words) AS count, group AS word;
ordered_word_count = ORDER word_count BY count DESC;
-- en hierna de woordenlijst wegschrijven naar een HDFS-bestand ...

ZooKeeper

Een gedistribueerd systeem zoals Hadoop met HDFS houdt intern bij wat de "status" is van de verschillende nodes: welk deel van het MapReduce-algoritme op welke node draait, waar welke data staat, welke nodes niet meer reageren, ...

Om op een hoger (applicatie)niveau gelijkaardige node-informatie bij te houden en te configureren, kan Zookeeper (5) gebruikt worden. Opmerkelijk aan deze configuratie- en synchronisatie- software is het feit dat het zelf z'n configuratie-informatie gedistribueerd bijhoudt (met de nodige redundantie)! Dus uitvallende nodes hoeven ook voor Zookeeper geen probleem te zijn.

Vooral de interface is zeer gebruiksvriendelijk: applicaties gebruiken de (Java-)API om alles wat met groep-management, beschikbaarheid, ... te maken heeft, te delegeren en dus buiten de eigenlijke programma-logica te houden.

Cassandra

HBase biedt, zoals gezegd, een kolom-gebaseerde "NoSQL"-database bovenop Hadoop. Cassandra (6) is gelijkaardig in opzet --een gedistribueerde NoSQL-database-- maar in tegenstelling tot HBase is het een key-value store. Omdat dit een natuurlijker datastructuur is dan een column-store, is Cassandra populairder dan HBase. Cassandra biedt ook een commandolijn-interface (CLI) met een syntax die wat weg heeft van Pig (of eigenlijk: van XQuery).

Cassandra werd oorspronkelijk ontwikkeld door Facebook, maar zit dus nu eveneens onder de Apache-vleugels.

Besluit

Klaar om met Big Data aan de slag te gaan? Dan wilt u vermoedelijk minstens met de genoemde tools aan de slag. Voelt u zich toch nog niet helemaal zeker? Bekijk dan eens ons cursusaanbod op www.abis.be/html/nlDWCalendar.html .

Referenties:

  1. http://hadoop.apache.org/
  2. http://hbase.apache.org/
  3. http://pig.apache.org/
  4. http://en.wikipedia.org/wiki/Pig_(programming_tool)
  5. http://zookeeper.apache.org/
  6. http://cassandra.apache.org/