SlideShare une entreprise Scribd logo
n(ot) o(nly) SQLDes alternatives aux bases de données relationnellesOlivier Mallassi(27 Janvier 2011)http://www.flickr.com/photos/fabbriciuse/2093103013/sizes/l/
@omallassiArchitecte @OCTOhttp://blog.octo.comnoSQL User Group @Paris#nosqlfr2
noSQL, kezako?La fin du langage SQL?La fin des transactions ACID?La fin des SGBDR?Non, Juste un sigle qui regroupe des alternatives aux SGBDRObjectifs Proposer une vision synthétique du monde NoSQLFournir un premier guide de lecture3http://www.flickr.com/photos/nuagedenuit/155699074/sizes/o/
Au commencement était…4
Au commencement était……le fichier séquentiel (indexé)…… et COBOLUne interrogation (limitée) séquentielle ou par index5SELECT BookFile ASSIGN TO "BOOKS.DAT" ORGANIZATION IS INDEXED ACCESS MODE IS DYNAMIC RECORD KEY IS BookNumberALTERNATE RECORD KEY IS AuthorNumber WITH DUPLICATESFILE STATUS IS BookErrorStatus.…© OCTO 2011
Vers 1970les premiers modèles relationnels6 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© OCTO 2011
Puis vinrent…7Objectif : stocker et rechercher dans le web en temps réelObjectif : vendre la plus grande variétéd’articles (livres, bricolage…)Des enjeux communs Performance (malgré les volumétries)Disponibilité (>99,99%)Résilience Scalabilité horizontaleEnjeux :
Agréger de gros volumes de données BigTable + Map/ReduceEnjeux
Débit important en écriture tout en assurant la disponibilité
Derniers incidents majeurs : 2004
<40 minutes d’indisponibilité par an Dynamo© OCTO 2011
NoSQL aujourd’huiUn foisonnement de solutions…© OCTO 20118Key/ValueGraphDocumentColumnOriented
Hadoople modèle Google9
Hadoopun écosystème riche et complexe© OCTO 201110Un « stack » complexe Le cauchemar de la compatibilité des versionsDes « leaders » différents : Cloudera, Apache…Des équipes distinctes : Hadoop, Hive, Sqoop…PigDataflowlanguage & compilerHiveSQL LikequeriesDSLOozieWorkflow for interdependentHadoop JobsMapReduceFramework permettant de « cruncher » des données en parallèleSqoopIntégration RDBMS & HadoopHbaseBase de données pour des accès aléatoires read/writeZookeeperService de coordinationHDFSUn système de fichiers distribuésWrite-once, readmanyFlume, Chukwa, ScribeCollection de données fiable et résiliente
HadoopDistributed File SystemUn système de fichier distribuéPermet de stocker des fichiers plus volumineux que ce que peut contenir un disque dur…Répartir les données sur plusieurs machines physiquesRépliquer ces données pour assurer le « fail-over »  N * le volume de données11core-site.xmlhdfs-site.xmlmasters, slavesTaille des blocs : dfs.block.size (64MB par défaut)Config. des réplicas (par défaut 3)dfs.replication : le nombre de réplicadfs.replication.min : le nombre de réplica à assurer pour valider une écriture© OCTO 2011
Opérations sur HDFSDes opérations standards (via CLI, Java…)Manipulation de fichiers/répertoiresCopie de fichierCopie de fichiers « locaux » sur le HDFS…Une gestion des permissionsdfs.permissions = trueIntégration possible avec Kerberos© OCTO 201112$HADOOP_HOME/bin/hadoopfs -rm /chukwa/logs/*.*$HADOOP_HOME/bin/hadoopfs -mkdir /tmp/myfolder/bin/hadoopfs -put /home/user/cash-flow/cashflow-clean.txt /data/bin/bin/hadoopfs –copyFromLocal /myfile.txt /user/myfile.txt/bin/bin/hadoopfs –copyToLocal /myfile.txt /user/myfile.txt
HDFSFailover & résilience de l’infrastructureLa résilience de la donnée est assurée par réplication de blocdfs.replication & dfs.replication.minEn cas de perte d’un nœud, une re-replicationest programméeQuid de la résilience à la panne matérielle?La réplication utilise la notion de « distance »À l’écriture, on cherche le datanode le « plus proche »La notion de distance est en fait lié à la topologie réseau© OCTO 201113Hdfs-site.xml<configuration>  <property>    <name>dfs.replication</name>    <value>1</value>  </property>
MapReduceLe système de requêtage : MapReduceTraiter des volumes de données plus faiblesParalléliser ces traitements « plus » unitairesCo-localiser traitements / données© OCTO 201114mastersslavescore-site.xmlhdfs-site.xmlmapred-site.xmlhadoop-metrics.propertieslog4j.propertieshadoop-env.sh
HadoopfilesystemUn niveau d’abstraction sur le stockage physique© OCTO 201115HadoopLocal File SystemHDFSS3FTPCore-site.xml<property>  <name>fs.default.name</name>  <value>file:///</value></property>core-site.xml…<configuration>  <property>    <name>fs.default.name</name>    <value>hdfs://localhost:9000</value>  </property></configuration>core-site.xml<property> <name>fs.default.name</name><value>s3://BUCKET</value></property><property><name>fs.s3.awsAccessKeyId</name><value>ID</value> </property> <property><name>fs.s3.awsSecretAccessKey</name><value>SECRET</value>
MapReduceOverview© OCTO 201116
MapReducePrincipes de l’algorithme© OCTO 201117Objectif : réaliser la somme des deals sur un axe d’agrégationGEDEQSWAP   John   15/09/2010  EUR    10200 CreditSGGEDSWAPTION  John    14/09/2010  EUR    11000 CreditHSBC…GEDSWAPTION  John    17/09/2010  EUR    5500   CreditHSBCIRDIRS       Simon 13/09/2010  USD   10000 DebitSGIRDIRS       Simon 14/09/2010  USD   11000 CreditBankofAmerica(K1, V1)Mapagrégation par deviseEUR    10200USD    -10000EUR     11000EUR     5500USD     11000List(K2, V2)Shuffle & SortEUR     10200,11000, 5500USD      -10000,11000K2,list(V2)Reducesomme sur l’axe d’agrégationItération sur l’ensemble des K2EUR    26700USD    1000List(K3, V3)
MapReduceImplémentation en Java© OCTO 201118Objectif : réaliser la somme des deals sur un axe d’agrégationimport 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);        }      }OutputCollector<K2,V2>Key = K1Value = V1Mapagrégation par deviseShuffle & Sort/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));      }}Reducesomme sur l’axe d’agrégationItération sur l’ensemble des K2
Détail du main()Script de lancement Dd	ddMapReduceLancement© OCTO 201119public class CurrencyAggregateextendsConfiguredimplementsTool {@Overridepublic intrun(String[] args) throws Exception{JobConfconf = new JobConf(CurrencyAggregate.class);conf.setJobName("CurrencyAggregate");	//output of the Mapperconf.setOutputKeyClass(Text.class);conf.setOutputValueClass(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);}$HADOOP_HOME/bin/hadoop jar ./Currency.jar org.CurrencyAggregate /tmp/cashflow-clean.txt /tmp/output10
DSL, DSL…© OCTO 201120
Hadoopun écosystème riche et complexe© OCTO 201121PigDataflowlanguage & compilerHiveSQL LikequeriesDSLOozieWorkflow for interdependentHadoop JobsMapReduceFramework permettant de « cruncher » des données en parallèleSqoopIntégration RDBMS & HadoopHbaseBase de données pour des accès aléatoires read/writeZookeeperService de coordinationHDFSUn système de fichiers distribuésWrite-once, readmanyFlume, Chukwa, ScribeCollection de données fiable et résiliente
Pig, HiveGénéralités© OCTO 201122
Pig, HiveStructuration des donnéesPig ne gère pas de schémas En dehors d’une requête© OCTO 201123Hive organise les données en table……un schéma est donc maintenumetastoreCe metastore peut être stocké dans MySQL (par défaut Derby)« Table » ou « External Table »External Table : hive de gère pas la donnéesIntéressant siMultiple schémas sur les même données, Modification des données indépendamment de Hive (ajout, drop…)records = LOAD ‘input/sample.txt’AS (year:character, temperature:int, quality:int);CREATE TABLE cash_flow (BookID STRING, ProductID STRING, TraderID STRING, DueDateBIGINT, Currency STRING, Amount DOUBLE, Direction STRING, Counterparty STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '' LINES TERMINATED BY '' STORED AS TEXTFILE;LOAD DATA INPATH '/data/cashflow-clean.txt'OVERWRITE INTO TABLE cash_flow;CREATE TABLE…PARTITIONED BY (date STRING, country, STRING);CREATE TABLE…. CLUSTERED BY (id) INTO 4 BUCKETS;
Pig, Hive	Accès© OCTO 201124grunt> A = load 'passwd' using PigStorage(':');hive> CREATE TABLE pokes (fooINT, bar STRING); $HIVE_HOME/bin/hive -e 'select a.col from tab1 a' -hiveconfhive.exec.scratchdir=/home/my/hive_scratch -hiveconfmapred.reduce.tasks=32 $PIG_HOME/pig –x mapreduce script.pig HIVE_HOME/bin/hive -f /home/my/hive-script.sql PigServerpigServer = new PigServer("mapreduce");pigServer.registerQuery("A = load '" + inputFile + "' usingPigStorage(':');");pigServer.registerQuery("B = foreach A generate $0 as id;");//runpigServer.store("B", "id.out");Connection con = DriverManager.getConnection("jdbc:hive://localhost:10000/default", "", "");Statementstmt = con.createStatement();String sql = "select * from " + tableName;ResultSetres = stmt.executeQuery(sql);while (res.next()) {  System.out.println(String.valueOf(res.getInt(1)) + "" + res.getString(2));}
Pig, Hiverequêtage© OCTO 201125select Currency, sum(Amount) from cash_flow where Direction='Credit' AND DueDate &lt; = unix_timestamp('2010-09-15 00:00:00') group by CurrencyOuSELECT cash_flow_simple.*,user_simple.*FROM cash_flow_simpleJOIN user_simple ON (cash_flow_simple.TraderID=user_simple.UserID);records = LOAD ‘input/sample.txt’AS (year:character, temperature:int, quality:int);filtered_records = FILTER records BY temperature != 9999 AND (quality = 0 OR quality == 1);grouped_records = GROUP filtered_records  BY years;max_temp = FOREACHgrouped_recordsGENERATE group, MAX(filtered_records.temperature);STORE max_tempINTO ‘/output/file’//créé une table avec 2 colonnes.CREATE TABLE targetASSELECT col1, col2 FROM source;
Alimentation du HDFS© OCTO 201126
Un fonctionnement similaire Quelques limitationsIntégration Scribe / HDFS complexe (compilation)Flume, Chukwa proposent plus de connecteurs (fichiers…) que Scribe (Thrift)Flume, Scribe, Chukwale même principe© OCTO 201127
Exemple de configurations ScribeFlume, Scribe, Chukwale même principe© OCTO 201128port=1464max_msg_per_second=2000000check_interval=3# DEFAULT - forward all messages to Scribe on port 1463<store>category=defaulttype=buffertarget_write_size=20480max_write_interval=1buffer_send_rate=1retry_interval=30retry_interval_range=10<primary>type=networkremote_host=localhostremote_port=1463</primary><secondary>type=filefs_type=stdfile_path=/tmp/scribetest2base_filename=thisisoverwrittenmax_size=3000000</secondary></store>port=1463max_msg_per_second=2000000check_interval=1max_queue_size=100000000num_thrift_server_threads=2# DEFAULT - write all messages to hadoophdfs<store>category=defaulttype=buffertarget_write_size=20480max_write_interval=1buffer_send_rate=1retry_interval=30retry_interval_range=10<primary>type=filefs_type=hdfsfile_path=hdfs://localhost:9000/scribedatacreate_symlink=nouse_hostname_sub_directory=yesbase_filename=thisisoverwrittenmax_size=1000000000rotate_period=dailyrotate_hour=0rotate_minute=5add_newlines=1</primary><secondary>type=filefs_type=stdfile_path=/tmp/scribe-central-hdfs...</store>
Sqoopde RDBMS vers HDFS et vice-versaUne brique visant à Importer de la donnée d’un RDBMS vers Hadoop (voire Hive)Exporter de la donnée du HDFS vers RDBMS© OCTO 201129HiveHadoopMapReduceHDFS
SqoopImport / ExportImportExport Fonctionne selon la même logique que l’importLes données sont mappées dans l’ordre naturel© OCTO 201130$ sqoop import --connectjdbc:mysql://localhost/hadoopguide --table comments -m 1$ sqoop import –-connectjdbc:mysql://localhost/hadoopguide --table comments -m 1 –hive-import$ sqoop export --connectjdbc:mysql://localhost/hadoopguide --table comments -m 1 –table comments –export-dir /user/omallassi/comments –input-fields-terminated-by ‘001’
HBaseet Zookeeper© OCTO 201131
HBaseLe modèle de donnéesUne base de données distribuée « column-oriented »……Permettant des accès temps réel et aléatoire en lecture et en écritureEn somme, permettant de gérer de la donnée « mutable » contrairement au HDFS© OCTO 201132Séparation entre « columnfamiliy » et « columnfamilu qualifier » est :
HBaseLe modèle de donnéesUne base de données distribuée « column-oriented »…33ColumnfamilyRowCell© OCTO 2011
HBaseVue d’ensemble de l’architectureUn modèle Master/Slave HMasterGère la localisation des données (HRegion)HRegionServerLes tables sont splittées en HRegionAutomatiquement au fur et à mesure de l’insertion de donnéesLes « splits » sont gérés dans Zookeeper. Un accès est réalisé lorsqu’un client se connecte pour localiser la donnée (le « split »)Gestion des écritures par HLog et memstore© OCTO 201134hbase-default.xmlhbase-site.xmlregionservershttp://www.larsgeorge.com/2009/10/hbase-architecture-101-storage.html
HBasemanipuler les schémas, données…Via CLI© OCTO 201135Les objets existent dans l’API JAvaIl est possible de définir des propriétés (TTL, versions #create 'cash_flow', {NAME => 'bookid', TTL => '10'}…HTableDescriptorHColumnDescriptorHtable…create 'cash_flow', 'bookId', 'productId', 'traderId', 'DueDate', 'currency', 'amount', 'direction', 'counterparty‘Lecture de la donnée « 5 »
HBasemanipuler les schémas, données…© OCTO 201136Les objets existent dans l’API JAva…conf = new HBaseConfiguration(); admin = new HBaseAdmin(conf); tableDesc = new HTableDescriptor(GRADES_TABLE_NAME); tableDesc.addFamily(new HColumnDescriptor(COURSE_FAMILY)); admin.createTable(tableDesc); HTable table = new HTable(conf, “tableName”); table.put(writeid, courseColumn, new IntWritable(grade)); Get g = new Get(row1);Resultsres = table.get(g);…Créer une HTableInsert une donnéeLecture de la donnée « 5 »
Hashmap distribuéele modèle Amazon : Dynamo, S3, SimpleDB, Cassandra, Riak, Voldemort…© OCTO 201137
Rappelez vous…38Objectif : stocker et rechercher dans le web en temps réelObjectif : vendre la plus grande variétéd’articles (livres, bricolage…)Des enjeux communs Performance (malgré les volumétries)Disponibilité (>99,99%)Résilience Scalabilité horizontaleEnjeux :
Agréger de gros volumes de données BigTable + Map/ReduceEnjeux
Débit important en écriture tout en assurant la disponibilité
Derniers incidents majeurs : 2004
<40 minutes d’indisponibilité par an Dynamo© OCTO 2010
Des enjeux différents de ceux de GoogleUn objectif « simple » : être capable d’accepter une demande d’achat……quelque soit la panne !© OCTO 201139Enjeux: reporting(induit une modélisation riche), Indisponibilité temporaire acceptableEnjeux: disponibilité en écriture, tolérance à la panneLe modèle RDBMS atteint ces limites en terme de Débit en écriture
Disponibilité
Gestion du « capacity planning » Le modèle RDBMS est adaptéMassivement en lecture
Besoin de reporting
…Des gènes différents, centrés sur la disponibilité qui imposent des « trade-offs »40© OCTO 2011Trade-off : « weforfeit ‘C’ and ‘I’ for availibility, gracefuldegradation and performance »De ACID vers BASE (WeakConsistency, Best Effort, Stale State…)« Event Sourcing »Le pattern…vision « stock » ou « mouvements »?4109/2010		400	Credit13/09/2010	10000	Debit15/09/2010	10200	Credit14/09/2010	11000	Credit15/09/2010	5500 	Debit16/09/2010 	5500	Debit15/09/2010	11000 	Debit16/09/2010 	5500	Credit17/09/2010 	5500 	Credit13/09/2010 	10000 	Debit15/09/2010 	10200 	Credit13/09/2010	20000	Debit14/09/2010	11000	Credit15/09/2010	3900	Credit16/09/2010 	0	Credit17/09/2010 	5500 	Credit© OCTO 2011
« Event Sourcing »Le pattern…Des enjeux distincts en écriture et en lecture42Source d’évènements, collecteDurable
Hautement disponible-…Des représentations adaptées aux usages, restitutionRDBMS
Graph
…© OCTO 2011
Hashmap distribuéeModèle de donnéesModèle de données : une MapCassandra offre un modèle de données « plus riche » en reprenant le modèle « column-oriented » de BigTable : un Map de MapSans aller jusqu’au stockage physique en colonnePropose des index secondaires (v.0.7) : 43get users where state = 'UT' and birth_date > 1970;© OCTO 2011
Hashmap distribuéeen termes d’API© OCTO 201044VoldemortStoreClientFactoryfactory = new SocketStoreClientFactory(numThreads,numThreads, maxQueuedRequests, maxConnectionsPerNode,maxTotalConnections, bootstrapUrl);try {StoreClient<String, Object> client = factory.getStoreClient("author");Map<String, Object> authorMap = new HashMap<String, Object>();authorMap.put("key", "key" + i);authorMap.put("firstName", "firstName" + i);authorMap.put("lastName", "lastName" + i);client.put("key" + i, authorMap);
Hashmap distribuée Un peu de configuration…© OCTO 201045Voldemort<store><name>author</name>    <persistence>bdb</persistence>    <routing>client</routing><replication-factor>2</replication-factor><required-reads>1</required-reads>    <required-writes>1</required-writes>    <key-serializer><type>json</type>      <schema-info>"string"</schema-info>    </key-serializer>    <value-serializer>      <type>json</type>      <schema-info version="0">{"key":"string", "firstName":"string", "lastName":"string"}</schem..    </value-serializer>  </store>~ une table dans le monde relationnelVoldemort : un paramétrage fin par type de donnée- Nombre de nœud en réplication- Nombre de nœud en écriture- Nombre de nœud en lectureFormat de la valeur : json, java-serialization, protobuf, thrift…
Hashmap distribuée en termes d’API© OCTO 201046Cassandra (0.6.x)TTransporttr = new TSocket("192.168.216.128", 9160);TProtocol proto = new TBinaryProtocol(tr);tr.open();Cassandra.ClientcassandraClient = new Cassandra.Client(proto);Map<String, List<ColumnOrSuperColumn>> insertClientDataMap = new HashMap<String, List<ColumnOrSuperColumn>>();List<ColumnOrSuperColumn> clientRowData = new ArrayList<ColumnOrSuperColumn>();ColumnOrSuperColumncolumnOrSuperColumn = new ColumnOrSuperColumn();columnOrSuperColumn.setColumn(new Column("fullName".getBytes(UTF8),	aCustomer.getName().getBytes(UTF8), 	 	timestamp));clientRowData.add(columnOrSuperColumn);insertClientDataMap.put("customers", clientRowData);cassandraClient.batch_insert("myBank", aCustomer.getName(),insertClientDataMap, 			ConsistencyLevel.DCQUORUM);Il existe des APIs proposant des services de plus haut niveau : Hector, Pelops, HectorSharp, Fauna…Mécanismes de pool, client fail over…
Hashmap distribuée Un peu de configuration…© OCTO 201047Cassandra (0.6.x)<Storage>  <ClusterName>Test Cluster</ClusterName>  <Keyspaces><Keyspace Name="users">		<ColumnFamilyCompareWith="UTF8Type" Name="info"/></Keyspace>  </Keyspaces>  <Partitioner>org.apache.cassandra.dht.RandomPartitioner</Partitioner><Seeds>      <Seed>10.1.112.252</Seed>      <Seed…  </Seeds>  <!-- ~ Address to bind to and tell othernodes to connect to.-->  <ListenAddress>10.1.123.119</ListenAddress>  <!-- TCP port, for commands and data -->  <StoragePort>7000</StoragePort>  <!-- UDP port, for membership communications (gossip) -->  <ControlPort>7001</ControlPort>  <!--  The address to bind the Thrift RPC service to. -->  <ThriftAddress>10.1.123.119</ThriftAddress>  <!-- Thrift RPC port (the port clients connect to). -->  <ThriftPort>9160</ThriftPort>Définition du cluster~Database / schéma dans le monde relationnel~Table dans le monde relationnelListe des serveurs faisant partis du cluster (gestion du « gossipprotocol »)Paramètres d’accès pour les clients Thrift
Hashmap distribuée PartitionnementLe partitionnement et l’association clé/serveur sont assurés via « consistent hashing »48Clientmd5(key) = 3#2«3»© OCTO 2011
Hashmap distribuée Gestion de la consistence49© OCTO 2011Consistence faibleConsistance forteClient(Write)Client(Read)Client(Write)Client(Read)Quorum basedprotocol : N/2 + 1 ou  W + R > NTrade off entre consistance, latence, tolérance à la panne en fonction de la donnée#2«3»#2«3»
Pendant l’écriture, le coordinateur envoie un « hintedhandoff » à un des réplicas en ligneQuand le nœud est de nouveau disponible, le nœud #3 dépile ses « hintedhandoffs »Tolérance à la panne, disponibilité en écritureHintedHandoff50© OCTO 2011Client(Write)#2«3»#4<=8Envoyer « 3 » à #4 dès que « up »

Contenu connexe

Tendances

Casablanca Hadoop & Big Data Meetup - Introduction à Hadoop
Casablanca Hadoop & Big Data Meetup - Introduction à HadoopCasablanca Hadoop & Big Data Meetup - Introduction à Hadoop
Casablanca Hadoop & Big Data Meetup - Introduction à Hadoop
Benoît de CHATEAUVIEUX
 
Tech day hadoop, Spark
Tech day hadoop, SparkTech day hadoop, Spark
Tech day hadoop, Spark
Arrow-Institute
 
Chapitre 3 spark
Chapitre 3 sparkChapitre 3 spark
Chapitre 3 spark
Mouna Torjmen
 
Stats web avec Hive chez Scoop.it
Stats web avec Hive chez Scoop.itStats web avec Hive chez Scoop.it
Stats web avec Hive chez Scoop.it
hibnico
 
Big Data: Hadoop Map / Reduce sur Windows et Windows Azure
Big Data: Hadoop Map / Reduce sur Windows et Windows AzureBig Data: Hadoop Map / Reduce sur Windows et Windows Azure
Big Data: Hadoop Map / Reduce sur Windows et Windows Azure
Microsoft
 
Hadoop Introduction in Paris
Hadoop Introduction in ParisHadoop Introduction in Paris
Hadoop Introduction in Paris
Ted Drake
 
Hadoop et son écosystème
Hadoop et son écosystèmeHadoop et son écosystème
Hadoop et son écosystème
Khanh Maudoux
 
Annexe Big Data
Annexe Big DataAnnexe Big Data
Annexe Big Data
Amal Abid
 
Petit-déjeuner MapReduce-La révolution dans l’analyse des BigData
Petit-déjeuner MapReduce-La révolution dans l’analyse des BigDataPetit-déjeuner MapReduce-La révolution dans l’analyse des BigData
Petit-déjeuner MapReduce-La révolution dans l’analyse des BigData
Marc Bojoly
 
Big Data, Hadoop & Spark
Big Data, Hadoop & SparkBig Data, Hadoop & Spark
Big Data, Hadoop & Spark
Alexia Audevart
 
Chapitre 4 no sql
Chapitre 4 no sqlChapitre 4 no sql
Chapitre 4 no sql
Mouna Torjmen
 
BigData_Chp4: NOSQL
BigData_Chp4: NOSQLBigData_Chp4: NOSQL
BigData_Chp4: NOSQL
Lilia Sfaxi
 
NoSQL et Big Data
NoSQL et Big DataNoSQL et Big Data
NoSQL et Big Data
acogoluegnes
 
HADOOP + R
HADOOP + RHADOOP + R
HADOOP + R
Cdiscount
 
Bases de données NoSQL
Bases de données NoSQLBases de données NoSQL
Bases de données NoSQL
Samy Dindane
 
Cours Big Data Chap3
Cours Big Data Chap3Cours Big Data Chap3
Cours Big Data Chap3
Amal Abid
 
Bases de Données non relationnelles, NoSQL (Introduction) 1er cours
Bases de Données non relationnelles, NoSQL (Introduction) 1er coursBases de Données non relationnelles, NoSQL (Introduction) 1er cours
Bases de Données non relationnelles, NoSQL (Introduction) 1er cours
Hatim CHAHDI
 
BigData_Chp5: Putting it all together
BigData_Chp5: Putting it all togetherBigData_Chp5: Putting it all together
BigData_Chp5: Putting it all together
Lilia Sfaxi
 
Hadoop MapReduce - OSDC FR 2009
Hadoop MapReduce - OSDC FR 2009Hadoop MapReduce - OSDC FR 2009
Hadoop MapReduce - OSDC FR 2009
Olivier Grisel
 
Une introduction à HBase
Une introduction à HBaseUne introduction à HBase
Une introduction à HBase
Modern Data Stack France
 

Tendances (20)

Casablanca Hadoop & Big Data Meetup - Introduction à Hadoop
Casablanca Hadoop & Big Data Meetup - Introduction à HadoopCasablanca Hadoop & Big Data Meetup - Introduction à Hadoop
Casablanca Hadoop & Big Data Meetup - Introduction à Hadoop
 
Tech day hadoop, Spark
Tech day hadoop, SparkTech day hadoop, Spark
Tech day hadoop, Spark
 
Chapitre 3 spark
Chapitre 3 sparkChapitre 3 spark
Chapitre 3 spark
 
Stats web avec Hive chez Scoop.it
Stats web avec Hive chez Scoop.itStats web avec Hive chez Scoop.it
Stats web avec Hive chez Scoop.it
 
Big Data: Hadoop Map / Reduce sur Windows et Windows Azure
Big Data: Hadoop Map / Reduce sur Windows et Windows AzureBig Data: Hadoop Map / Reduce sur Windows et Windows Azure
Big Data: Hadoop Map / Reduce sur Windows et Windows Azure
 
Hadoop Introduction in Paris
Hadoop Introduction in ParisHadoop Introduction in Paris
Hadoop Introduction in Paris
 
Hadoop et son écosystème
Hadoop et son écosystèmeHadoop et son écosystème
Hadoop et son écosystème
 
Annexe Big Data
Annexe Big DataAnnexe Big Data
Annexe Big Data
 
Petit-déjeuner MapReduce-La révolution dans l’analyse des BigData
Petit-déjeuner MapReduce-La révolution dans l’analyse des BigDataPetit-déjeuner MapReduce-La révolution dans l’analyse des BigData
Petit-déjeuner MapReduce-La révolution dans l’analyse des BigData
 
Big Data, Hadoop & Spark
Big Data, Hadoop & SparkBig Data, Hadoop & Spark
Big Data, Hadoop & Spark
 
Chapitre 4 no sql
Chapitre 4 no sqlChapitre 4 no sql
Chapitre 4 no sql
 
BigData_Chp4: NOSQL
BigData_Chp4: NOSQLBigData_Chp4: NOSQL
BigData_Chp4: NOSQL
 
NoSQL et Big Data
NoSQL et Big DataNoSQL et Big Data
NoSQL et Big Data
 
HADOOP + R
HADOOP + RHADOOP + R
HADOOP + R
 
Bases de données NoSQL
Bases de données NoSQLBases de données NoSQL
Bases de données NoSQL
 
Cours Big Data Chap3
Cours Big Data Chap3Cours Big Data Chap3
Cours Big Data Chap3
 
Bases de Données non relationnelles, NoSQL (Introduction) 1er cours
Bases de Données non relationnelles, NoSQL (Introduction) 1er coursBases de Données non relationnelles, NoSQL (Introduction) 1er cours
Bases de Données non relationnelles, NoSQL (Introduction) 1er cours
 
BigData_Chp5: Putting it all together
BigData_Chp5: Putting it all togetherBigData_Chp5: Putting it all together
BigData_Chp5: Putting it all together
 
Hadoop MapReduce - OSDC FR 2009
Hadoop MapReduce - OSDC FR 2009Hadoop MapReduce - OSDC FR 2009
Hadoop MapReduce - OSDC FR 2009
 
Une introduction à HBase
Une introduction à HBaseUne introduction à HBase
Une introduction à HBase
 

En vedette

Hadoop unit
Hadoop unitHadoop unit
Hadoop unit
Khanh Maudoux
 
Social Networks and the Richness of Data
Social Networks and the Richness of DataSocial Networks and the Richness of Data
Social Networks and the Richness of Data
larsgeorge
 
Ysance conference - cloud computing - aws - 3 mai 2010
Ysance   conference - cloud computing - aws - 3 mai 2010Ysance   conference - cloud computing - aws - 3 mai 2010
Ysance conference - cloud computing - aws - 3 mai 2010
Ysance
 
Hadoop is dead - long live Hadoop | BiDaTA 2013 Genoa
Hadoop is dead - long live Hadoop | BiDaTA 2013 GenoaHadoop is dead - long live Hadoop | BiDaTA 2013 Genoa
Hadoop is dead - long live Hadoop | BiDaTA 2013 Genoa
larsgeorge
 
Introduction sur les problématiques d'une architecture distribuée
Introduction sur les problématiques d'une architecture distribuéeIntroduction sur les problématiques d'une architecture distribuée
Introduction sur les problématiques d'une architecture distribuée
Khanh Maudoux
 
From Batch to Realtime with Hadoop - Berlin Buzzwords - June 2012
From Batch to Realtime with Hadoop - Berlin Buzzwords - June 2012From Batch to Realtime with Hadoop - Berlin Buzzwords - June 2012
From Batch to Realtime with Hadoop - Berlin Buzzwords - June 2012
larsgeorge
 
Présentation Club STORM
Présentation Club STORMPrésentation Club STORM
Présentation Club STORM
Forum Education Science Culture
 
HBase Applications - Atlanta HUG - May 2014
HBase Applications - Atlanta HUG - May 2014HBase Applications - Atlanta HUG - May 2014
HBase Applications - Atlanta HUG - May 2014
larsgeorge
 
HBase Sizing Notes
HBase Sizing NotesHBase Sizing Notes
HBase Sizing Notes
larsgeorge
 
Big Data is not Rocket Science
Big Data is not Rocket ScienceBig Data is not Rocket Science
Big Data is not Rocket Science
larsgeorge
 
Hadoop and Voldemort @ LinkedIn
Hadoop and Voldemort @ LinkedInHadoop and Voldemort @ LinkedIn
Hadoop and Voldemort @ LinkedIn
Hadoop User Group
 
Phoenix - A High Performance Open Source SQL Layer over HBase
Phoenix - A High Performance Open Source SQL Layer over HBasePhoenix - A High Performance Open Source SQL Layer over HBase
Phoenix - A High Performance Open Source SQL Layer over HBase
Salesforce Developers
 
HBase and Impala Notes - Munich HUG - 20131017
HBase and Impala Notes - Munich HUG - 20131017HBase and Impala Notes - Munich HUG - 20131017
HBase and Impala Notes - Munich HUG - 20131017
larsgeorge
 
HBase Advanced Schema Design - Berlin Buzzwords - June 2012
HBase Advanced Schema Design - Berlin Buzzwords - June 2012HBase Advanced Schema Design - Berlin Buzzwords - June 2012
HBase Advanced Schema Design - Berlin Buzzwords - June 2012
larsgeorge
 
HBase Status Report - Hadoop Summit Europe 2014
HBase Status Report - Hadoop Summit Europe 2014HBase Status Report - Hadoop Summit Europe 2014
HBase Status Report - Hadoop Summit Europe 2014
larsgeorge
 
Sept 17 2013 - THUG - HBase a Technical Introduction
Sept 17 2013 - THUG - HBase a Technical IntroductionSept 17 2013 - THUG - HBase a Technical Introduction
Sept 17 2013 - THUG - HBase a Technical Introduction
Adam Muise
 
HBase Sizing Guide
HBase Sizing GuideHBase Sizing Guide
HBase Sizing Guide
larsgeorge
 
Near-realtime analytics with Kafka and HBase
Near-realtime analytics with Kafka and HBaseNear-realtime analytics with Kafka and HBase
Near-realtime analytics with Kafka and HBase
dave_revell
 
Data Pipelines in Hadoop - SAP Meetup in Tel Aviv
Data Pipelines in Hadoop - SAP Meetup in Tel Aviv Data Pipelines in Hadoop - SAP Meetup in Tel Aviv
Data Pipelines in Hadoop - SAP Meetup in Tel Aviv
larsgeorge
 

En vedette (20)

Hadoop unit
Hadoop unitHadoop unit
Hadoop unit
 
Social Networks and the Richness of Data
Social Networks and the Richness of DataSocial Networks and the Richness of Data
Social Networks and the Richness of Data
 
Ysance conference - cloud computing - aws - 3 mai 2010
Ysance   conference - cloud computing - aws - 3 mai 2010Ysance   conference - cloud computing - aws - 3 mai 2010
Ysance conference - cloud computing - aws - 3 mai 2010
 
Hadoop is dead - long live Hadoop | BiDaTA 2013 Genoa
Hadoop is dead - long live Hadoop | BiDaTA 2013 GenoaHadoop is dead - long live Hadoop | BiDaTA 2013 Genoa
Hadoop is dead - long live Hadoop | BiDaTA 2013 Genoa
 
Introduction sur les problématiques d'une architecture distribuée
Introduction sur les problématiques d'une architecture distribuéeIntroduction sur les problématiques d'une architecture distribuée
Introduction sur les problématiques d'une architecture distribuée
 
From Batch to Realtime with Hadoop - Berlin Buzzwords - June 2012
From Batch to Realtime with Hadoop - Berlin Buzzwords - June 2012From Batch to Realtime with Hadoop - Berlin Buzzwords - June 2012
From Batch to Realtime with Hadoop - Berlin Buzzwords - June 2012
 
Présentation Club STORM
Présentation Club STORMPrésentation Club STORM
Présentation Club STORM
 
HBase Applications - Atlanta HUG - May 2014
HBase Applications - Atlanta HUG - May 2014HBase Applications - Atlanta HUG - May 2014
HBase Applications - Atlanta HUG - May 2014
 
HBase Sizing Notes
HBase Sizing NotesHBase Sizing Notes
HBase Sizing Notes
 
Big Data is not Rocket Science
Big Data is not Rocket ScienceBig Data is not Rocket Science
Big Data is not Rocket Science
 
Hadoop and Voldemort @ LinkedIn
Hadoop and Voldemort @ LinkedInHadoop and Voldemort @ LinkedIn
Hadoop and Voldemort @ LinkedIn
 
Phoenix - A High Performance Open Source SQL Layer over HBase
Phoenix - A High Performance Open Source SQL Layer over HBasePhoenix - A High Performance Open Source SQL Layer over HBase
Phoenix - A High Performance Open Source SQL Layer over HBase
 
HBase and Impala Notes - Munich HUG - 20131017
HBase and Impala Notes - Munich HUG - 20131017HBase and Impala Notes - Munich HUG - 20131017
HBase and Impala Notes - Munich HUG - 20131017
 
HBase Advanced Schema Design - Berlin Buzzwords - June 2012
HBase Advanced Schema Design - Berlin Buzzwords - June 2012HBase Advanced Schema Design - Berlin Buzzwords - June 2012
HBase Advanced Schema Design - Berlin Buzzwords - June 2012
 
HBase Status Report - Hadoop Summit Europe 2014
HBase Status Report - Hadoop Summit Europe 2014HBase Status Report - Hadoop Summit Europe 2014
HBase Status Report - Hadoop Summit Europe 2014
 
Sept 17 2013 - THUG - HBase a Technical Introduction
Sept 17 2013 - THUG - HBase a Technical IntroductionSept 17 2013 - THUG - HBase a Technical Introduction
Sept 17 2013 - THUG - HBase a Technical Introduction
 
Soutenance ysance
Soutenance ysanceSoutenance ysance
Soutenance ysance
 
HBase Sizing Guide
HBase Sizing GuideHBase Sizing Guide
HBase Sizing Guide
 
Near-realtime analytics with Kafka and HBase
Near-realtime analytics with Kafka and HBaseNear-realtime analytics with Kafka and HBase
Near-realtime analytics with Kafka and HBase
 
Data Pipelines in Hadoop - SAP Meetup in Tel Aviv
Data Pipelines in Hadoop - SAP Meetup in Tel Aviv Data Pipelines in Hadoop - SAP Meetup in Tel Aviv
Data Pipelines in Hadoop - SAP Meetup in Tel Aviv
 

Similaire à Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro

SSL 2011 : Présentation de 2 bases noSQL
SSL 2011 : Présentation de 2 bases noSQLSSL 2011 : Présentation de 2 bases noSQL
SSL 2011 : Présentation de 2 bases noSQL
Hervé Leclerc
 
Présentation CoreOS
Présentation CoreOSPrésentation CoreOS
Présentation CoreOS
gcatt
 
HTML5 en projet
HTML5 en projetHTML5 en projet
HTML5 en projet
Normandy JUG
 
Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data
Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big DataJournées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data
Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data
David Joubert
 
Techday Arrow Group: Hadoop & le Big Data
Techday Arrow Group: Hadoop & le Big DataTechday Arrow Group: Hadoop & le Big Data
Techday Arrow Group: Hadoop & le Big Data
Arrow Group
 
10 big data hadoop
10 big data hadoop10 big data hadoop
10 big data hadoop
Patrick Bury
 
10 big data hadoop
10 big data hadoop10 big data hadoop
10 big data hadoop
Patrick Bury
 
Analyse et optimisation des performances du moteur SQL Serveur
Analyse et optimisation des performances du moteur SQL ServeurAnalyse et optimisation des performances du moteur SQL Serveur
Analyse et optimisation des performances du moteur SQL Serveur
Microsoft Technet France
 
Adopte une BDD
Adopte une BDDAdopte une BDD
Adopte une BDD
Aymeric Brisse
 
Spark (v1.3) - Présentation (Français)
Spark (v1.3) - Présentation (Français)Spark (v1.3) - Présentation (Français)
Spark (v1.3) - Présentation (Français)
Alexis Seigneurin
 
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017) Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
univalence
 
CHAPITRE3_Fondements_Big_Data_MR_YARN - converted (1).pdf
CHAPITRE3_Fondements_Big_Data_MR_YARN - converted (1).pdfCHAPITRE3_Fondements_Big_Data_MR_YARN - converted (1).pdf
CHAPITRE3_Fondements_Big_Data_MR_YARN - converted (1).pdf
YounesOuladSayad1
 
JSS2014 – Hive ou la convergence entre datawarehouse et Big Data
JSS2014 – Hive ou la convergence entre datawarehouse et Big DataJSS2014 – Hive ou la convergence entre datawarehouse et Big Data
JSS2014 – Hive ou la convergence entre datawarehouse et Big Data
GUSS
 
Implementing a key/value store
Implementing a key/value storeImplementing a key/value store
Implementing a key/value store
Benjamin Joyen-Conseil
 
Rich Desktop Applications
Rich Desktop ApplicationsRich Desktop Applications
Rich Desktop Applications
goldoraf
 
Java 7 - Fork/Join
Java 7 - Fork/JoinJava 7 - Fork/Join
Java 7 - Fork/Join
Zenika
 
REX Ansible
REX AnsibleREX Ansible
REX Ansible
Noël Bardelot
 

Similaire à Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro (20)

mix-it 2011
mix-it 2011mix-it 2011
mix-it 2011
 
SSL 2011 : Présentation de 2 bases noSQL
SSL 2011 : Présentation de 2 bases noSQLSSL 2011 : Présentation de 2 bases noSQL
SSL 2011 : Présentation de 2 bases noSQL
 
Présentation CoreOS
Présentation CoreOSPrésentation CoreOS
Présentation CoreOS
 
Spark - Ippevent 19-02-2015
Spark - Ippevent 19-02-2015Spark - Ippevent 19-02-2015
Spark - Ippevent 19-02-2015
 
HTML5 en projet
HTML5 en projetHTML5 en projet
HTML5 en projet
 
Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data
Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big DataJournées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data
Journées SQL 2014 - Hive ou la convergence entre datawarehouse et Big Data
 
Techday Arrow Group: Hadoop & le Big Data
Techday Arrow Group: Hadoop & le Big DataTechday Arrow Group: Hadoop & le Big Data
Techday Arrow Group: Hadoop & le Big Data
 
10 big data hadoop
10 big data hadoop10 big data hadoop
10 big data hadoop
 
10 big data hadoop
10 big data hadoop10 big data hadoop
10 big data hadoop
 
Analyse et optimisation des performances du moteur SQL Serveur
Analyse et optimisation des performances du moteur SQL ServeurAnalyse et optimisation des performances du moteur SQL Serveur
Analyse et optimisation des performances du moteur SQL Serveur
 
Adopte une BDD
Adopte une BDDAdopte une BDD
Adopte une BDD
 
Spark (v1.3) - Présentation (Français)
Spark (v1.3) - Présentation (Français)Spark (v1.3) - Présentation (Français)
Spark (v1.3) - Présentation (Français)
 
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017) Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
Spark-adabra, Comment Construire un DATALAKE ! (Devoxx 2017)
 
CHAPITRE3_Fondements_Big_Data_MR_YARN - converted (1).pdf
CHAPITRE3_Fondements_Big_Data_MR_YARN - converted (1).pdfCHAPITRE3_Fondements_Big_Data_MR_YARN - converted (1).pdf
CHAPITRE3_Fondements_Big_Data_MR_YARN - converted (1).pdf
 
JSS2014 – Hive ou la convergence entre datawarehouse et Big Data
JSS2014 – Hive ou la convergence entre datawarehouse et Big DataJSS2014 – Hive ou la convergence entre datawarehouse et Big Data
JSS2014 – Hive ou la convergence entre datawarehouse et Big Data
 
Implementing a key/value store
Implementing a key/value storeImplementing a key/value store
Implementing a key/value store
 
Rich Desktop Applications
Rich Desktop ApplicationsRich Desktop Applications
Rich Desktop Applications
 
Java 7 - Fork/Join
Java 7 - Fork/JoinJava 7 - Fork/Join
Java 7 - Fork/Join
 
REX Ansible
REX AnsibleREX Ansible
REX Ansible
 
Hello mongo
Hello mongoHello mongo
Hello mongo
 

Nosql, hadoop, map reduce, hbase, sqoop, voldemort, cassandra -intro

  • 1. n(ot) o(nly) SQLDes alternatives aux bases de données relationnellesOlivier Mallassi(27 Janvier 2011)http://www.flickr.com/photos/fabbriciuse/2093103013/sizes/l/
  • 3. noSQL, kezako?La fin du langage SQL?La fin des transactions ACID?La fin des SGBDR?Non, Juste un sigle qui regroupe des alternatives aux SGBDRObjectifs Proposer une vision synthétique du monde NoSQLFournir un premier guide de lecture3http://www.flickr.com/photos/nuagedenuit/155699074/sizes/o/
  • 5. Au commencement était……le fichier séquentiel (indexé)…… et COBOLUne interrogation (limitée) séquentielle ou par index5SELECT BookFile ASSIGN TO "BOOKS.DAT" ORGANIZATION IS INDEXED ACCESS MODE IS DYNAMIC RECORD KEY IS BookNumberALTERNATE RECORD KEY IS AuthorNumber WITH DUPLICATESFILE STATUS IS BookErrorStatus.…© OCTO 2011
  • 6. Vers 1970les premiers modèles relationnels6 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© OCTO 2011
  • 7. Puis vinrent…7Objectif : stocker et rechercher dans le web en temps réelObjectif : vendre la plus grande variétéd’articles (livres, bricolage…)Des enjeux communs Performance (malgré les volumétries)Disponibilité (>99,99%)Résilience Scalabilité horizontaleEnjeux :
  • 8. Agréger de gros volumes de données BigTable + Map/ReduceEnjeux
  • 9. Débit important en écriture tout en assurant la disponibilité
  • 11. <40 minutes d’indisponibilité par an Dynamo© OCTO 2011
  • 12. NoSQL aujourd’huiUn foisonnement de solutions…© OCTO 20118Key/ValueGraphDocumentColumnOriented
  • 14. Hadoopun écosystème riche et complexe© OCTO 201110Un « stack » complexe Le cauchemar de la compatibilité des versionsDes « leaders » différents : Cloudera, Apache…Des équipes distinctes : Hadoop, Hive, Sqoop…PigDataflowlanguage & compilerHiveSQL LikequeriesDSLOozieWorkflow for interdependentHadoop JobsMapReduceFramework permettant de « cruncher » des données en parallèleSqoopIntégration RDBMS & HadoopHbaseBase de données pour des accès aléatoires read/writeZookeeperService de coordinationHDFSUn système de fichiers distribuésWrite-once, readmanyFlume, Chukwa, ScribeCollection de données fiable et résiliente
  • 15. HadoopDistributed File SystemUn système de fichier distribuéPermet de stocker des fichiers plus volumineux que ce que peut contenir un disque dur…Répartir les données sur plusieurs machines physiquesRépliquer ces données pour assurer le « fail-over »  N * le volume de données11core-site.xmlhdfs-site.xmlmasters, slavesTaille des blocs : dfs.block.size (64MB par défaut)Config. des réplicas (par défaut 3)dfs.replication : le nombre de réplicadfs.replication.min : le nombre de réplica à assurer pour valider une écriture© OCTO 2011
  • 16. Opérations sur HDFSDes opérations standards (via CLI, Java…)Manipulation de fichiers/répertoiresCopie de fichierCopie de fichiers « locaux » sur le HDFS…Une gestion des permissionsdfs.permissions = trueIntégration possible avec Kerberos© OCTO 201112$HADOOP_HOME/bin/hadoopfs -rm /chukwa/logs/*.*$HADOOP_HOME/bin/hadoopfs -mkdir /tmp/myfolder/bin/hadoopfs -put /home/user/cash-flow/cashflow-clean.txt /data/bin/bin/hadoopfs –copyFromLocal /myfile.txt /user/myfile.txt/bin/bin/hadoopfs –copyToLocal /myfile.txt /user/myfile.txt
  • 17. HDFSFailover & résilience de l’infrastructureLa résilience de la donnée est assurée par réplication de blocdfs.replication & dfs.replication.minEn cas de perte d’un nœud, une re-replicationest programméeQuid de la résilience à la panne matérielle?La réplication utilise la notion de « distance »À l’écriture, on cherche le datanode le « plus proche »La notion de distance est en fait lié à la topologie réseau© OCTO 201113Hdfs-site.xml<configuration> <property> <name>dfs.replication</name> <value>1</value> </property>
  • 18. MapReduceLe système de requêtage : MapReduceTraiter des volumes de données plus faiblesParalléliser ces traitements « plus » unitairesCo-localiser traitements / données© OCTO 201114mastersslavescore-site.xmlhdfs-site.xmlmapred-site.xmlhadoop-metrics.propertieslog4j.propertieshadoop-env.sh
  • 19. HadoopfilesystemUn niveau d’abstraction sur le stockage physique© OCTO 201115HadoopLocal File SystemHDFSS3FTPCore-site.xml<property> <name>fs.default.name</name> <value>file:///</value></property>core-site.xml…<configuration> <property> <name>fs.default.name</name> <value>hdfs://localhost:9000</value> </property></configuration>core-site.xml<property> <name>fs.default.name</name><value>s3://BUCKET</value></property><property><name>fs.s3.awsAccessKeyId</name><value>ID</value> </property> <property><name>fs.s3.awsSecretAccessKey</name><value>SECRET</value>
  • 21. MapReducePrincipes de l’algorithme© OCTO 201117Objectif : réaliser la somme des deals sur un axe d’agrégationGEDEQSWAP John 15/09/2010 EUR 10200 CreditSGGEDSWAPTION John 14/09/2010 EUR 11000 CreditHSBC…GEDSWAPTION John 17/09/2010 EUR 5500 CreditHSBCIRDIRS Simon 13/09/2010 USD 10000 DebitSGIRDIRS Simon 14/09/2010 USD 11000 CreditBankofAmerica(K1, V1)Mapagrégation par deviseEUR 10200USD -10000EUR 11000EUR 5500USD 11000List(K2, V2)Shuffle & SortEUR 10200,11000, 5500USD -10000,11000K2,list(V2)Reducesomme sur l’axe d’agrégationItération sur l’ensemble des K2EUR 26700USD 1000List(K3, V3)
  • 22. MapReduceImplémentation en Java© OCTO 201118Objectif : réaliser la somme des deals sur un axe d’agrégationimport 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); } }OutputCollector<K2,V2>Key = K1Value = V1Mapagrégation par deviseShuffle & Sort/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)); }}Reducesomme sur l’axe d’agrégationItération sur l’ensemble des K2
  • 23. Détail du main()Script de lancement Dd ddMapReduceLancement© OCTO 201119public class CurrencyAggregateextendsConfiguredimplementsTool {@Overridepublic intrun(String[] args) throws Exception{JobConfconf = new JobConf(CurrencyAggregate.class);conf.setJobName("CurrencyAggregate"); //output of the Mapperconf.setOutputKeyClass(Text.class);conf.setOutputValueClass(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);}$HADOOP_HOME/bin/hadoop jar ./Currency.jar org.CurrencyAggregate /tmp/cashflow-clean.txt /tmp/output10
  • 25. Hadoopun écosystème riche et complexe© OCTO 201121PigDataflowlanguage & compilerHiveSQL LikequeriesDSLOozieWorkflow for interdependentHadoop JobsMapReduceFramework permettant de « cruncher » des données en parallèleSqoopIntégration RDBMS & HadoopHbaseBase de données pour des accès aléatoires read/writeZookeeperService de coordinationHDFSUn système de fichiers distribuésWrite-once, readmanyFlume, Chukwa, ScribeCollection de données fiable et résiliente
  • 27. Pig, HiveStructuration des donnéesPig ne gère pas de schémas En dehors d’une requête© OCTO 201123Hive organise les données en table……un schéma est donc maintenumetastoreCe metastore peut être stocké dans MySQL (par défaut Derby)« Table » ou « External Table »External Table : hive de gère pas la donnéesIntéressant siMultiple schémas sur les même données, Modification des données indépendamment de Hive (ajout, drop…)records = LOAD ‘input/sample.txt’AS (year:character, temperature:int, quality:int);CREATE TABLE cash_flow (BookID STRING, ProductID STRING, TraderID STRING, DueDateBIGINT, Currency STRING, Amount DOUBLE, Direction STRING, Counterparty STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '' LINES TERMINATED BY '' STORED AS TEXTFILE;LOAD DATA INPATH '/data/cashflow-clean.txt'OVERWRITE INTO TABLE cash_flow;CREATE TABLE…PARTITIONED BY (date STRING, country, STRING);CREATE TABLE…. CLUSTERED BY (id) INTO 4 BUCKETS;
  • 28. Pig, Hive Accès© OCTO 201124grunt> A = load 'passwd' using PigStorage(':');hive> CREATE TABLE pokes (fooINT, bar STRING); $HIVE_HOME/bin/hive -e 'select a.col from tab1 a' -hiveconfhive.exec.scratchdir=/home/my/hive_scratch -hiveconfmapred.reduce.tasks=32 $PIG_HOME/pig –x mapreduce script.pig HIVE_HOME/bin/hive -f /home/my/hive-script.sql PigServerpigServer = new PigServer("mapreduce");pigServer.registerQuery("A = load '" + inputFile + "' usingPigStorage(':');");pigServer.registerQuery("B = foreach A generate $0 as id;");//runpigServer.store("B", "id.out");Connection con = DriverManager.getConnection("jdbc:hive://localhost:10000/default", "", "");Statementstmt = con.createStatement();String sql = "select * from " + tableName;ResultSetres = stmt.executeQuery(sql);while (res.next()) { System.out.println(String.valueOf(res.getInt(1)) + "" + res.getString(2));}
  • 29. Pig, Hiverequêtage© OCTO 201125select Currency, sum(Amount) from cash_flow where Direction='Credit' AND DueDate &lt; = unix_timestamp('2010-09-15 00:00:00') group by CurrencyOuSELECT cash_flow_simple.*,user_simple.*FROM cash_flow_simpleJOIN user_simple ON (cash_flow_simple.TraderID=user_simple.UserID);records = LOAD ‘input/sample.txt’AS (year:character, temperature:int, quality:int);filtered_records = FILTER records BY temperature != 9999 AND (quality = 0 OR quality == 1);grouped_records = GROUP filtered_records BY years;max_temp = FOREACHgrouped_recordsGENERATE group, MAX(filtered_records.temperature);STORE max_tempINTO ‘/output/file’//créé une table avec 2 colonnes.CREATE TABLE targetASSELECT col1, col2 FROM source;
  • 31. Un fonctionnement similaire Quelques limitationsIntégration Scribe / HDFS complexe (compilation)Flume, Chukwa proposent plus de connecteurs (fichiers…) que Scribe (Thrift)Flume, Scribe, Chukwale même principe© OCTO 201127
  • 32. Exemple de configurations ScribeFlume, Scribe, Chukwale même principe© OCTO 201128port=1464max_msg_per_second=2000000check_interval=3# DEFAULT - forward all messages to Scribe on port 1463<store>category=defaulttype=buffertarget_write_size=20480max_write_interval=1buffer_send_rate=1retry_interval=30retry_interval_range=10<primary>type=networkremote_host=localhostremote_port=1463</primary><secondary>type=filefs_type=stdfile_path=/tmp/scribetest2base_filename=thisisoverwrittenmax_size=3000000</secondary></store>port=1463max_msg_per_second=2000000check_interval=1max_queue_size=100000000num_thrift_server_threads=2# DEFAULT - write all messages to hadoophdfs<store>category=defaulttype=buffertarget_write_size=20480max_write_interval=1buffer_send_rate=1retry_interval=30retry_interval_range=10<primary>type=filefs_type=hdfsfile_path=hdfs://localhost:9000/scribedatacreate_symlink=nouse_hostname_sub_directory=yesbase_filename=thisisoverwrittenmax_size=1000000000rotate_period=dailyrotate_hour=0rotate_minute=5add_newlines=1</primary><secondary>type=filefs_type=stdfile_path=/tmp/scribe-central-hdfs...</store>
  • 33. Sqoopde RDBMS vers HDFS et vice-versaUne brique visant à Importer de la donnée d’un RDBMS vers Hadoop (voire Hive)Exporter de la donnée du HDFS vers RDBMS© OCTO 201129HiveHadoopMapReduceHDFS
  • 34. SqoopImport / ExportImportExport Fonctionne selon la même logique que l’importLes données sont mappées dans l’ordre naturel© OCTO 201130$ sqoop import --connectjdbc:mysql://localhost/hadoopguide --table comments -m 1$ sqoop import –-connectjdbc:mysql://localhost/hadoopguide --table comments -m 1 –hive-import$ sqoop export --connectjdbc:mysql://localhost/hadoopguide --table comments -m 1 –table comments –export-dir /user/omallassi/comments –input-fields-terminated-by ‘001’
  • 36. HBaseLe modèle de donnéesUne base de données distribuée « column-oriented »……Permettant des accès temps réel et aléatoire en lecture et en écritureEn somme, permettant de gérer de la donnée « mutable » contrairement au HDFS© OCTO 201132Séparation entre « columnfamiliy » et « columnfamilu qualifier » est :
  • 37. HBaseLe modèle de donnéesUne base de données distribuée « column-oriented »…33ColumnfamilyRowCell© OCTO 2011
  • 38. HBaseVue d’ensemble de l’architectureUn modèle Master/Slave HMasterGère la localisation des données (HRegion)HRegionServerLes tables sont splittées en HRegionAutomatiquement au fur et à mesure de l’insertion de donnéesLes « splits » sont gérés dans Zookeeper. Un accès est réalisé lorsqu’un client se connecte pour localiser la donnée (le « split »)Gestion des écritures par HLog et memstore© OCTO 201134hbase-default.xmlhbase-site.xmlregionservershttp://www.larsgeorge.com/2009/10/hbase-architecture-101-storage.html
  • 39. HBasemanipuler les schémas, données…Via CLI© OCTO 201135Les objets existent dans l’API JAvaIl est possible de définir des propriétés (TTL, versions #create 'cash_flow', {NAME => 'bookid', TTL => '10'}…HTableDescriptorHColumnDescriptorHtable…create 'cash_flow', 'bookId', 'productId', 'traderId', 'DueDate', 'currency', 'amount', 'direction', 'counterparty‘Lecture de la donnée « 5 »
  • 40. HBasemanipuler les schémas, données…© OCTO 201136Les objets existent dans l’API JAva…conf = new HBaseConfiguration(); admin = new HBaseAdmin(conf); tableDesc = new HTableDescriptor(GRADES_TABLE_NAME); tableDesc.addFamily(new HColumnDescriptor(COURSE_FAMILY)); admin.createTable(tableDesc); HTable table = new HTable(conf, “tableName”); table.put(writeid, courseColumn, new IntWritable(grade)); Get g = new Get(row1);Resultsres = table.get(g);…Créer une HTableInsert une donnéeLecture de la donnée « 5 »
  • 41. Hashmap distribuéele modèle Amazon : Dynamo, S3, SimpleDB, Cassandra, Riak, Voldemort…© OCTO 201137
  • 42. Rappelez vous…38Objectif : stocker et rechercher dans le web en temps réelObjectif : vendre la plus grande variétéd’articles (livres, bricolage…)Des enjeux communs Performance (malgré les volumétries)Disponibilité (>99,99%)Résilience Scalabilité horizontaleEnjeux :
  • 43. Agréger de gros volumes de données BigTable + Map/ReduceEnjeux
  • 44. Débit important en écriture tout en assurant la disponibilité
  • 46. <40 minutes d’indisponibilité par an Dynamo© OCTO 2010
  • 47. Des enjeux différents de ceux de GoogleUn objectif « simple » : être capable d’accepter une demande d’achat……quelque soit la panne !© OCTO 201139Enjeux: reporting(induit une modélisation riche), Indisponibilité temporaire acceptableEnjeux: disponibilité en écriture, tolérance à la panneLe modèle RDBMS atteint ces limites en terme de Débit en écriture
  • 49. Gestion du « capacity planning » Le modèle RDBMS est adaptéMassivement en lecture
  • 51. …Des gènes différents, centrés sur la disponibilité qui imposent des « trade-offs »40© OCTO 2011Trade-off : « weforfeit ‘C’ and ‘I’ for availibility, gracefuldegradation and performance »De ACID vers BASE (WeakConsistency, Best Effort, Stale State…)« Event Sourcing »Le pattern…vision « stock » ou « mouvements »?4109/2010 400 Credit13/09/2010 10000 Debit15/09/2010 10200 Credit14/09/2010 11000 Credit15/09/2010 5500 Debit16/09/2010 5500 Debit15/09/2010 11000 Debit16/09/2010 5500 Credit17/09/2010 5500 Credit13/09/2010 10000 Debit15/09/2010 10200 Credit13/09/2010 20000 Debit14/09/2010 11000 Credit15/09/2010 3900 Credit16/09/2010 0 Credit17/09/2010 5500 Credit© OCTO 2011
  • 52. « Event Sourcing »Le pattern…Des enjeux distincts en écriture et en lecture42Source d’évènements, collecteDurable
  • 53. Hautement disponible-…Des représentations adaptées aux usages, restitutionRDBMS
  • 54. Graph
  • 56. Hashmap distribuéeModèle de donnéesModèle de données : une MapCassandra offre un modèle de données « plus riche » en reprenant le modèle « column-oriented » de BigTable : un Map de MapSans aller jusqu’au stockage physique en colonnePropose des index secondaires (v.0.7) : 43get users where state = 'UT' and birth_date > 1970;© OCTO 2011
  • 57. Hashmap distribuéeen termes d’API© OCTO 201044VoldemortStoreClientFactoryfactory = new SocketStoreClientFactory(numThreads,numThreads, maxQueuedRequests, maxConnectionsPerNode,maxTotalConnections, bootstrapUrl);try {StoreClient<String, Object> client = factory.getStoreClient("author");Map<String, Object> authorMap = new HashMap<String, Object>();authorMap.put("key", "key" + i);authorMap.put("firstName", "firstName" + i);authorMap.put("lastName", "lastName" + i);client.put("key" + i, authorMap);
  • 58. Hashmap distribuée Un peu de configuration…© OCTO 201045Voldemort<store><name>author</name> <persistence>bdb</persistence> <routing>client</routing><replication-factor>2</replication-factor><required-reads>1</required-reads> <required-writes>1</required-writes> <key-serializer><type>json</type> <schema-info>"string"</schema-info> </key-serializer> <value-serializer> <type>json</type> <schema-info version="0">{"key":"string", "firstName":"string", "lastName":"string"}</schem.. </value-serializer> </store>~ une table dans le monde relationnelVoldemort : un paramétrage fin par type de donnée- Nombre de nœud en réplication- Nombre de nœud en écriture- Nombre de nœud en lectureFormat de la valeur : json, java-serialization, protobuf, thrift…
  • 59. Hashmap distribuée en termes d’API© OCTO 201046Cassandra (0.6.x)TTransporttr = new TSocket("192.168.216.128", 9160);TProtocol proto = new TBinaryProtocol(tr);tr.open();Cassandra.ClientcassandraClient = new Cassandra.Client(proto);Map<String, List<ColumnOrSuperColumn>> insertClientDataMap = new HashMap<String, List<ColumnOrSuperColumn>>();List<ColumnOrSuperColumn> clientRowData = new ArrayList<ColumnOrSuperColumn>();ColumnOrSuperColumncolumnOrSuperColumn = new ColumnOrSuperColumn();columnOrSuperColumn.setColumn(new Column("fullName".getBytes(UTF8), aCustomer.getName().getBytes(UTF8), timestamp));clientRowData.add(columnOrSuperColumn);insertClientDataMap.put("customers", clientRowData);cassandraClient.batch_insert("myBank", aCustomer.getName(),insertClientDataMap, ConsistencyLevel.DCQUORUM);Il existe des APIs proposant des services de plus haut niveau : Hector, Pelops, HectorSharp, Fauna…Mécanismes de pool, client fail over…
  • 60. Hashmap distribuée Un peu de configuration…© OCTO 201047Cassandra (0.6.x)<Storage> <ClusterName>Test Cluster</ClusterName> <Keyspaces><Keyspace Name="users"> <ColumnFamilyCompareWith="UTF8Type" Name="info"/></Keyspace> </Keyspaces> <Partitioner>org.apache.cassandra.dht.RandomPartitioner</Partitioner><Seeds> <Seed>10.1.112.252</Seed> <Seed… </Seeds> <!-- ~ Address to bind to and tell othernodes to connect to.--> <ListenAddress>10.1.123.119</ListenAddress> <!-- TCP port, for commands and data --> <StoragePort>7000</StoragePort> <!-- UDP port, for membership communications (gossip) --> <ControlPort>7001</ControlPort> <!-- The address to bind the Thrift RPC service to. --> <ThriftAddress>10.1.123.119</ThriftAddress> <!-- Thrift RPC port (the port clients connect to). --> <ThriftPort>9160</ThriftPort>Définition du cluster~Database / schéma dans le monde relationnel~Table dans le monde relationnelListe des serveurs faisant partis du cluster (gestion du « gossipprotocol »)Paramètres d’accès pour les clients Thrift
  • 61. Hashmap distribuée PartitionnementLe partitionnement et l’association clé/serveur sont assurés via « consistent hashing »48Clientmd5(key) = 3#2«3»© OCTO 2011
  • 62. Hashmap distribuée Gestion de la consistence49© OCTO 2011Consistence faibleConsistance forteClient(Write)Client(Read)Client(Write)Client(Read)Quorum basedprotocol : N/2 + 1 ou W + R > NTrade off entre consistance, latence, tolérance à la panne en fonction de la donnée#2«3»#2«3»
  • 63. Pendant l’écriture, le coordinateur envoie un « hintedhandoff » à un des réplicas en ligneQuand le nœud est de nouveau disponible, le nœud #3 dépile ses « hintedhandoffs »Tolérance à la panne, disponibilité en écritureHintedHandoff50© OCTO 2011Client(Write)#2«3»#4<=8Envoyer « 3 » à #4 dès que « up »
  • 64. Quelques métriquesTemps de réponseBenchmark réalisé par Yahoo! Infrastructure : 6 boxes {2x4 core 2.5GHz, 8GB RAM, 6 HDD (SAS RAID1+0), GB eth}120M records (1K) ~ 20GB data per server100+ client threads © OCTO20115150/50 Read/update95/5 Read/updateSource : « Yahoo! Cloud Serving Benchmark », Brian F. Cooperhttp://www.brianfrankcooper.net/pubs/ycsb-v4.pdf
  • 65. Quelques métriquesElasticité© OCTO20115295/5 Read/updatePassage de 2 à 6 serveursBenchmark réalisé par Yahoo! Infrastructure : 6 boxes {2x4 core 2.5GHz, 8GB RAM, 6 HDD (SAS RAID1+0), GB eth}120M records (1K) ~ 20GB data per server
  • 66. 100+ client threads Source : « Yahoo! Cloud Serving Benchmark », Brian F. Cooperhttp://www.brianfrankcooper.net/pubs/ycsb-v4.pdf
  • 67. Quelques métriquesDifférence entre les versions© OCTO20115350/50 Read/update95/5 Read/updateBenchmark réalisé par Yahoo! Infrastructure : 6 boxes {2x4 core 2.5GHz, 8GB RAM, 6 HDD (SAS RAID1+0), GB eth}120M records (1K) ~ 20GB data per server100+ client threads Source : « Yahoo! Cloud Serving Benchmark », Brian F. Cooperhttp://www.brianfrankcooper.net/pubs/ycsb-v4.pdf
  • 68. Et enfin…Les bases graphes, géographiques…© OCTO 201154
  • 70. Les bases « graph »en termes d’API© OCTO201156Neo4jTransaction tx = myDb.beginTx();try{Nodearchitect = myDb.createNode();Nodesmith = myDb.createNode();smith.setProperty(« version », « 1.0 »); Relationship relation = smith.createRelationshipTo(architect, …relation.setProperty…tx.success();}finallytx.finish();Requêtage : algorithmes de parcours de graphesfor ( Nodeperson : persons.query( "name:*sson AND title:Hacker" ) ) { } RelationshipIndex friendships = graphDb.index().forRelationships( "friendships" );// "type" isn't a reserved key and isn't indexed automaticallyRelationship relationship = friendships.get( "type", "knows", morpheus, trinity ).getSingle();
  • 72. NoSQL aujourd’huiUn foisonnement de solutions…58Key/ValueGraphDocumentColumnOriented© OCTO 2011
  • 73. …Organisées en grandes catégoriesbasées sur la modélisation de la donnée59{attr1, …}Une classification qui a des limitesNe prend pas en compte les patterns précédents (Cassandra & HBase)Les trade-offs sur ACID (durabilité…)© OCTO 2011
  • 74. D’après le théorème de CAP…(1)© OCTO 201160Le théorème CAP  statue qu'il est impossible sur un système distribué de garantir en même temps les trois contraintes suivantes :- Cohérence : tous les nœuds du système voient exactement les mêmes données au même moment ;- Disponibilité (Availability en anglais) : le temps de réponse doit toujours être le plus court possible ;- Tolérance au partitionnement (Partition Tolerance en anglais) : aucune panne moins importante qu'une coupure totale du réseau ne doit empêcher le système de répondre correctement.D'après ce théorème, un système distribué ne peut garantir à un instant T que deux de ces contraintes mais pas les trois.ARéplication asynchroneDynamo & Amazon Dynamo derivatives : Cassandra, Voldemort, RiakRDBMS : MySQL, Postgres…Réplication synchroneCPNeo4j, BigTable & Bigtablederivatives : HBase…(1) Eric Brewer – 2000CAP Theorem
  • 75. Pour conclure…Des systèmes qui challengent les règles établies© OCTO201161Performance, débit en écriture
  • 76. Stockage et Manipulation de gros volume de données
  • 79. Souplessede modélisationPour conclure…Au-delà du buzzNoSQL reste un domaine d’innovation…même s’il existe des déploiements en production« le diable est dans le détail »NoSQL appliqué au monde de la « Business Intelligence »NoSQL nous demandera peut-être de penser différemment nos systèmes Event Sourcing…NoSQL nous rappelle qu’il est important de travailler sur l’utilisation qui est faite de la donnéeToutes les données n’ont pas besoin d’être consistantes dans tous les contextes d’utilisationNoSQL parle de collaboration :stockage « polyglote »Ce n’est pas un remplacement des SGBDRNoSQL parle d’alternatives et challenge 40 années de suprématie des bases relationnelles…© OCTO201162