code4lib 2011 : choses vues et entendues par l'ABES
mix-it 2011
1. N(ot) O(nly) SQL Des alternatives aux bases de données relationnelles MALLASSI Olivier OCTOTechnology Email : omallassi@octo.com Twitter : @omallassi LinkedIn : http://www.linkedin.com/pub/olivier-mallassi/1/46/21 Blog : http://blog.octo.com
2. Objectifs Proposer une vision synthétique du « monde NoSQL » Fournir un premier guide de lecture http://www.flickr.com/photos/nuagedenuit/155699074/sizes/o/
5. Au commencement était… …le fichier séquentiel (indexé)… … et COBOL Une interrogation « limitée », par index SELECT BookFile ASSIGN TO "BOOKS.DAT" ORGANIZATION IS INDEXED ACCESS MODE IS DYNAMIC RECORD KEY IS BookNumber ALTERNATE RECORD KEY IS AuthorNumber WITH DUPLICATES FILE STATUS IS BookErrorStatus. …
6. Vers 1970les premiers modèles relationnels Un référentiel unique de données structurées et couplées Un système centralisé Une donnée unique (structure, valeur, consistance…) pour toutes les utilisations On modélise les données puis on développe des applications
7. Puis vinrent… Objectif : stocker et rechercher dans le web en temps réel Objectif : vendre la plus grande variété d’articles (livres, bricolage…) Des enjeux communs Performance (malgré les volumétries) Disponibilité (>99,99%) Résilience Scalabilité horizontale Enjeux : Agréger de gros volumes de données BigTable + Map/Reduce Enjeux Débit important en écriture tout en assurant la disponibilité Derniers incidents majeurs : 2004 <40 minutes d’indisponibilité par an Dynamo
8. Et dans le même temps, Le secteur de la finance se lancent dans une course à la latence… Lowlatency messaging Grille de calcul …et aide au développement des « caches distribués » : Data Grid
11. HadoopUn écosystème riche et complexe Une « stack » complexe Le cauchemar de la compatibilité des versions Des leaders différents : Apache, Cloudera… Des équipes distinctes : Hive, Hadoop, Sqoop… Pig Dataflowlanguage & compiler Hive SQL LikequeriesDSL Oozie Workflow for interdependentHadoop Jobs MapReduce Framework permettant de « cruncher » des données en parallèle Sqoop Intégration RDBMS & Hadoop Hbase Base de données pour des accès aléatoires read/write Zookeeper Service de coordination HDFS Un système de fichiers distribués Write-once, readmany Flume, Chukwa, Scribe Collection de données fiable et résiliente
12.
13. MapReduce Le système de requêtage : MapReduce Traiter des volumes de données plus faibles Paralléliser ces traitements « plus » unitaires Co-localiser traitements / données masters slaves core-site.xml hdfs-site.xml mapred-site.xml hadoop-metrics.properties log4j.properties hadoop-env.sh
15. MapReducePrincipe de l’algorithme Objectif : réaliser la somme des deals sur un axe d’agrégation GEDEQSWAP John 15/09/2010 EUR10200 CreditSG GEDSWAPTION John 14/09/2010 EUR11000 CreditHSBC … GEDSWAPTION John 17/09/2010 EUR 5500 CreditHSBC IRDIRS Simon 13/09/2010 USD10000 DebitSG IRDIRS Simon 14/09/2010 USD11000 CreditBoF (K1, V1) Map agrégation par devise EUR 10200 USD -10000 EUR 11000 EUR 5500 USD 11000 List(K2, V2) Shuffle & Sort EUR 10200,11000, 5500 USD -10000,11000 K2,list(V2) Reduce somme sur l’axe d’agrégation Itération sur l’ensemble des K2 EUR 26700 USD 1000 List(K3, V3)
16. L’avantage d’un DSL import org.apache.hadoop.mapred; public static class MapextendsMapReduceBaseimplements Mapper { public voidmap(LongWritablekey, Text value, OutputCollector output, Reporter reporter) throwsIOException { String line = value.toString(); String[] lineAsArray = line.split(""); String currentCurrency = lineAsArray[4]; String amountAsString = lineAsArray[5]; String sens = lineAsArray[6]; DoubleWritable data = null; if("Debit".equals(sens)){ data = new DoubleWritable(Double.parseDouble("-" + amountAsString)); } else if("Credit".equals(sens)) { data = new DoubleWritable(Double.parseDouble(amountAsString)); } output.collect(new Text(currentCurrency), data); } } SELECT Currency, SUM(Amount) FROMcash_flow WHERE Direction='Credit' AND DueDate < = unix_timestamp('2010-09-15 00:00:00') GROUP BY Currency public class CurrencyAggregateextendsConfiguredimplementsTool { @Override public intrun(String[] args) throws Exception{ JobConfconf = new JobConf(CurrencyAggregate.class); conf.setJobName("CurrencyAggregate"); //output of the Mapper ); conf.setOutpconf.setOutputKeyClass(Text.classutValueClass(DoubleWritable.class); conf.setMapperClass(Map.class); conf.setReducerClass(Reduce.class); conf.setInputFormat(TextInputFormat.class); conf.setOutputFormat(TextOutputFormat.class); FileInputFormat.setInputPaths(conf, new Path(args[0])); FileOutputFormat.setOutputPath(conf, new Path(args[1])); JobClient.runJob(conf); return 0; } public staticvoid main(String[] args) throws Exception { intexitCode = ToolRunner.run(new CurrencyAggregate(), args); System.exit(exitCode); } /The reduce is called once per key in the output map of the map() function public static class Reduce extends MapReduceBase implements Reducer { public void reduce(Text key, Iterator values, OutputCollector output, Reporter reporter) throws IOException { double sum = 0; while (values.hasNext()) { double amount = values.next().get(); sum += amount; } output.collect(key, new DoubleWritable(sum)); } }
18. Rappelez vous… Objectif : stocker et rechercher dans le web en temps réel Objectif : vendre la plus grande variété d’articles (livres, bricolage…) Des enjeux communs Performance (malgré les volumétries) Disponibilité (>99,99%) Résilience Scalabilité horizontale Enjeux : Agréger de gros volumes de données BigTable + Map/Reduce Enjeux Débit important en écriture tout en assurant la disponibilité Derniers incidents majeurs : 2004 <40 minutes d’indisponibilité par an Dynamo
24. Hashmap distribuéeModèle de données Modèle de données : une Map Cassandra offre un modèle de données « plus riche » en reprenant le modèle « column-oriented » de BigTable : un Map de Map Sans aller jusqu’au stockage physique en colonne Propose des index secondaires (v.0.7) : get users where state = 'UT' and birth_date > 1970;
30. Hashmap distribuée Gestion de la consistance Consistance faible Consistance forte Client (Write) Client (Read) Client (Write) Client (Read) Quorum basedprotocol : N/2 + 1 ou W + R > N Trade off entre consistance, latence, tolérance à la panne en fonction de la donnée #2 «3» #2 «3»
32. NoSQL & DataGrids ont suivi des chemins différents NoSQL vient de besoins très ciblés Data Grid adresse des problématiques plus large « Write-through », « Writebehind »… Même si les mêmes principes s’appliquent
34. Des systèmes qui ouvrent de nouvelles voies Performance / débit en écriture stockage / manipulation de volumes importants de données Souplesse dans la modélisation, multi-version… Disponibilité / résilience des systèmes Sur des niveaux de pannes de plus en plus importants « Ops simplifié » Elasticité de l’infrastructure
35. Des systèmes qui challengent les règles établies « All data are not equals » Et c’est indépendant de NoSQL… La disponibilité est un des prochains challenges Depuis 1970, on gère des niveaux de pannes de plus en plus importants Sur des systèmes de plus en plus « commodities » « Workdone by Joule ». Cooperative Expendable Micro-Slice Servers (CEMS): Low Cost, Low Power Servers for Internet-Scale Service James Hamilton. « Big Data » ou l’analyse plus fine des données Des applications claires dans la BI Recherche, Machine Learning… La fin du cloisonnement OLTP, OLAP? NoSQL parle de collaboration : stockage « polyglotte » NoSQL parle d’alternatives et challenge 40 années de suprématie des bases relationnelles…
36. « BecauseRDBMSscanbebeaten by more than an order of magnitude on the standard OLTP benchmark, thenthereis no marketwherethey are competitive. As such, theyshouldbeconsidered as legacytechnology more than a quarter of a century in age, for which a completeredesign and re-architectingis the appropriatenextstep. » Michael Stonebraker The End Of an Architectural Era Et si il avait raison ? :o)