Skip to main content

Posts

Weave devient Apache Twill et entre en incubation

Ceux qui s'intéressent à YARN, le nouveau gestionnaire de ressources d'Hadoop, savent que son potentiel est énorme pour ceux qui font du BigData : spécifiez les ressources nécessaires à votre programme distribué (CPU, mémoires) et YARN se charge de trouver les nœuds de votre cluster possédant les ressources disponibles pour l’exécuter. Le tout bien entendu sur les pétaoctets hébergés par le système de fichier distribué d'Hadoop : HDFS. Emporté par la dynamique Hadoop YARN est en train de devenir le socle de nombreux projets de traitement de gros volumes données : on retrouve le traditionnel Map/Reduce mais aussi Storm porté par Yahoo ! ou Stinger d' Hortonworks pour faire du SQL à (très) grande échelle Cependant écrire un programme qui exploite les capacités de YARN n'est pas une sinécure, on se retrouve vite à copier / coller l'exemple du DistributedShell, à refaire les mêmes choses et à retomber dans les mêmes problématiques ... bref inu...

Zookeeper, Netflix Curator and ACLs

If you have one or more Zookeeper "multi-tenant" clusters you may want to protect znodes against unwanted modifications. Here is a very simple and short introduction to the ACL and custom authentication features. This post is not intended to give you best practices about security and Zookeeper, the only goal is to give you a complete example of a custom authentication handler. Complete source code with JUnit test is available here : https://github.com/barkbay/zookeeper-acl-sample/ Use case Let say that your Zookeeper cluster is used by several users. In order to restrict user actions you have decided that each user must prefix all paths with the first letter of his name. User foo is only allowed to create, read, delete and update znodes under the /f znode. User bar is only allowed to create, read, delete and update znodes under the /b znode. Get client authentication data on the server side Zookeeper client authentication can be easily customized , a...

Zookeeper watchers and events, a (very) short summary

Here is a summary of what events are expected if you set ChildrenWatcher , DataWatcher or ExistsWatcher on a znode : WARNING : none means that no event is triggered, do no confuse with EventType.None Do not forget this basic rule : Watches are one time trigger, once a watch has been triggered you must register it once again if you want to be notified. Moreover due to network latency you can miss one or several changes that happen just before the watch is re-registered. An expired zookeeper session also means that all your watches are gone, you have to create them once again. More informations here. Hope it helps...

Orientée colonnes ?

Les bases NoSQL sont arrivées avec leur cortège de nouveautés et pour certaines d'entre elles une notion héritée de BigTable : celle de base de donnée orientée colonne. Cependant faire le lien entre l'article de Wikipedia et comprendre ce que permet réellement un base de donnée comme HBase n'est pas une chose évidente. En effet le simple fait de définir cette notion ne suffit pas toujours a bien comprendre quels sont les principes de conception du monde SQL qui peuvent être oubliés et ceux qui doivent être appris. Colonne or not colonne ? Prenons un modèle très simple de donnée et essayons de le transposer dans un modèle "orienté colonne": Comme on peut le voir on est passé d'un modèle à 2 dimensions (ligne x colonne) vers un modèle où une valeur est accédée au travers de 2  coordonnées qui sont ici (ligne, colonne) Cette notion de coordonnées est  importante  (c'est pour ça que je la met en gras 2 fois de suite) si l'on veut c...

HBase 0.96 + Eclipse + Maven

Since HBase-4336 (and HBase 0.96) the HBase source code has been split into multiple maven modules. The post is no more related to a specific operating system, you can follow these steps on Linux or Windows. 0. Requirements Java :) Eclipse ( Eclipse IDE for Java Developers should be ok) A Subversion client (since i'm under Microsoft Windows i use the Collabnet one, with Linux use you favorite package tool e.g. : apt-get install subversion ) 1. Checkout sources Use your favorite Subversion client to checkout the HBase source code : $ svn checkout http://svn.apache.org/repos/asf/hbase/trunk hbase  (check http://hbase.apache.org/source-repository.html for more details) 2. Install M2Eclipse plugin Select the menu : Help / " Install New Software" In the ' Work with ' field type : http://download.eclipse.org/technology/m2e/releases (press Enter) Select m2e - Maven Integration for Eclipse 3. Import HBase source code File...

Row Count : HBase Aggregation example

With the coprocessors HBase 0.92 introduces a new way to process data directly on a region server. As a user this is definitively a very exciting feature : now you can easily define your own distributed data services. This post is not intended to help you how to define them (i highly recommend you to watch this presentation if you want to do so) but to quickly presents the new aggregation service shipped with HBase 0.92 that is built upon the endpoint coprocessor framework. 1. Enable AggregationClient coprocessor You have two choices : You can enable aggregation coprocessor on all your tables by adding the following lines to hbase-site.xml : <property> <name>hbase.coprocessor.user.region.classes</name> <value>org.apache.hadoop.hbase.coprocessor.AggregateImplementation</value> </property> or ...you can enable coprocessor only on a table throught the HBase shell : 1. disable the table hbase> disable ' mytable ' 2....

Sortie de HBase 0.92

Après 4 "release candidate" et plus d'un an de développement la version 0.92.0 de HBase succède à la branche 0.90.x. Malgré le faible écart entre les deux numéros de version le travail accompli pour aboutir à cette version a été très important. Les nouveautés majeures : Implémentation des co-processeurs Les coprocesseurs permettent de réaliser des traitements directement au sein des JVM des serveurs qui gèrent les données. Deux types de coprocesseurs sont disponibles : Les “ observers ” qui permettent le déclenchement d’actions sur des évènements affectant les données ou les tables. Les observers peuvent être chainés, executés par ordre de priorité et poser un veto sur une opération. Les “ endpoints ” quant à eux permettent d’étendre les services RPC par des procédures personnalisées. Livrés avec cette version on trouvera ainsi des services d'agrégation permettant, entre autres, de déterminer les valeurs minimales ou maximales des données ou ...

Optimiser les accès en lecture sur HBase

Increase HBase read performance checklist Accès en parallèle, client "multihtread" Dans HBase les données sont découpées en Régions et ces Régions peuvent être servies par des Region Servers différents. La charge de lecture doit donc être dans la mesure du possible distribuée sur l'ensemble des serveurs.  Privilégier les lectures en mode "batch" L'API HBase permet de lotir des appels à la base dans des "Batch Operations". L’intérêt est d'éviter de trop nombreux aller/retour sur le réseau. Ainsi les opérations PUT, GET, DELETE peuvent être regroupées dans un seul appel à la base de donnée. HTable hTable = new HTable("cachetestdb"); List listOfget = new ArrayList (); for ( int i = 0; i < 10; i++) { String keyAsString = "17#" + i; Get get = new Get(Bytes.toBytes(keyAsString)); listOfget.add(get); } Object[] batch = hTable.batch(listOfget); for (Object object : batch) { Re...

HBase + Subversion + Eclipse + Windows

HBase + Subversion + Eclipse + Windows (it should be easy to adapt for Linux) Update : please note that since HBase-4336 / HBase 0.96 the source tree is split in more than one Maven module this post is no more relevant, i have created a new post on this subject : http://michaelmorello.blogspot.fr/2012/06/hbase-096-eclipse-maven.html This is a simple setup in order to play with the source code of HBase under Microsoft Windows. Since HBase use some Unix specific commands like chmod the only requirements here are  Cygwin and a working Maven 3 environment. (It is obvious that you need Java and Eclipse , but you DON'T need anything else like the Eclipse Maven plugin or any SSH configuration) 1. Checkout the source code The first step is to check out the source code from the Subversion repository. I did it under my cygwin home repository. In this example i want to play with the 0.90 branch : svn co http://svn.apache.org/repos/asf/hbase/branches/0.90/ hbase-...

HBase, versions de données: principes et usage chez Facebook

Lorsque l'on insère une donnée dans HBase, la précédente version, si elle existe, n'est pas écrasée. HBase comme son mentor BigTable peut gérer plusieurs versions du contenu d'une même cellule. Pour ceux qui se demandent comment exploiter au mieux cette capacité de HBase voici un conseil de Bill Graham sur la mailing list HBase : "[...] Once someone realizes that you can store multiple values for the same cell,  each with a timestamp there can be a natural tendency to think "hey, I can store  a one-to-many using multiple version of a cell".  That's not the intent of versioned cell values. Versioned cell values can be thought of as a way to keep a history of change  for a single entity that at any given time only has one value. Like keeping  track of a state change over time. For a one-to-many relationship (i.e., a  user with many events), favor either multiple rows or multiple columns  instead." Pour résumer les versions multiples d'une mê...

Mockito ou comment simuler des objets dans les tests unitaires

Enfin un framework qui me réconcilie avec les tests unitaires, non pas que j'étais très fâché, les tests unitaires sont nécessaires mais je ne prenais pas un grand plaisir à les faire. Je travaille en ce moment sur un projet de client/serveur basé sur les excellents framework Netty et Protobuf  et écrire des test unitaires sur ce type de projet très technique peut se révéler être assez difficile. Pourtant depuis peu je dois confesser que je prend un certain plaisir à en écrire, ceci depuis que j'ai découvert Mockito. Mockito ça sert à quoi ? L'un des problèmes avec les tests unitaires ce sont les objets qui sont mis en jeu. Certains objets sont en effet très difficile à instancier, il peut être même impossible de le faire si on est en phase de spécification et que seule l'interface a été écrite. Il est encore plus difficile de contrôler leur comportement pour recréer des contextes particuliers d’exécution comme recréer un contexte d'erreur. C'est là qu...