Skip to main content

Posts

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...

Glossaire à l'usage de ceux qui découvrent HBase

Avant-propos : à l'origine ce glossaire était destiné à consigner pour mon propre usage les définitions et les fonctions des différents éléments qui constituent la base de donnée NoSQL HBase. Il peut s'agir aussi bien de simples clarifications sur la sémantique comme de précisions beaucoup plus techniques sur le rôle joué par certains éléments. Il n'est pas exhaustif et est amené à être mis à jour au fil des évolutions de HBase. BloomFilter Filtre permettant d'exclure d'une recherche les FileStore d'une Region . Utilisé par exemple lorsque que l'on cherche la valeur associée à une clé, et que les données de cette clé sont potentiellement éclatées sur le MemStore et/ou plusieurs FileStore . Un BloomFilter permet alors de ne pas avoir à parcourir tous les FileStore présents dans la Region . Column Dans HBase la notion de colonne n'a pas réellement de sens.  Le modèle de gestion des données de HBase repose sur une notion de couple {clé, valeur}. ...

Analyse d'un "thread dump" d'une JVM IBM sous AIX

Dans quels cas le thread dump est utile ? Le thread dump est un instantané de l'activité des threads de la JVM. Leur analyse est intéressante dans les cas où l'activité de la JVM ne semble pas normale : Activité suspendue (deadlock/ interblocage ) ou partiellement suspendue (starvation/ famine ) Activité existante mais le "débit" est en deçà de ce qui est attendu (Goulot d'étranglement / Bottleneck) Activité existante mais le "débit" reste nul (Boucle infinie / Infinite Loop) Comment avoir un thread dump ? Nous nous limitons ici à la machine virtuel IBM sous AIX. Dans ce cas là il est extrêmement simple de déclencher la création d'un thread dump : il suffit de faire un kill -3 sur le processus Java. Un fichier dont le nom est javacore. [date] . [numero_processus] . [compteur] .txt est produit. Sur la sortie standard du processus vous devriez voir la ligne suivante s'afficher : JVMDUMP010I Java Dump written to ..... En général le dump ...

Configuration avancée d'un serveur JMS sous Oracle Weblogic

Ou « Combien de messages JMS un serveur JMS peut-t-il emmagasiner ? » Sous Weblogic (je ne sais pas comment cela se passe avec les autres) tout message JMS est stocké au moins partiellement dans la mémoire de la JVM, et cette mémoire n'étant pas infinie l'arrivée d'un grand nombre de messages associée à une mauvaise configuration du sous système JMS se solde souvent par un OutOfMemory. Le schéma ci dessous montrent les différents mécanismes qui peuvent être mis œuvre par un serveur JMS afin de gérer l'accumulation des messages JMS et de réguler leur arrivée. 1. Définir un quota Un message JMS consomme toujours de la mémoire . Partant de ce postulat un quota devrait toujours être défini sur un serveur JMS. Il évitera une saturation mémoire en refusant aux producteurs de poster des nouveaux messages lorsque le quota est atteint. Les quotas peuvent être définis au niveau des modules JMS, cependant il peut être plus "sécurisant" de les placer directement au n...

Eclipse TPTP : Accélérer le "profiling"

Avant propos : Le contenu de ce billet valable à partir de Java 5 Pour pouvoir tester les exemples présentés dans ce billet vous devez avoir correctement installé l' "Agent Controller" du projet Eclipse TPTP comme cela est décrit ici . Si les notions d' "Agent" et d' "Agent Controller" ne vous disent rien vous pouvez vous rendre ici . Performances, données et outils Une séance de "profiling" peut très vite se trouver ralentie. Ce phénomène a en règle générale deux origines : La quantité de données collectées par l'outil, à plus forte raison si il s'agit d'une session distante ("Agent" sur une machine, client sur une autre) . Les performances de l'outil qui va analyser et restituer ces données, si l'interface graphique fournie par Eclipse TPTP est très fournie il n'en reste pas moins que si la quantité de données à digérer est trop importante votre système pourrait ne plus répondre. Séri...

Eclipse TPTP on IBM AIX platform

It seems that the Eclipse TPTP project has stopped to provide Agent Controller and agent libraries for some Unix platforms like IBM AIX. I have just tried to use the IBM Rational Agent Controller (available at http://www-01.ibm.com/support/docview.wss?rs=2042&uid=swg27013420 ) with Eclipse TPTP 4.7.1 as client. Surprisingly it seems to be perfectly compatible, i have successfully collected profiling data on an Eclipse Workbench under Windows from a IBM J9 32bits VM SR8 running on a 64bits IBM AIX PowerPC 6. Some tips : While i tried to profile with an Xmx value equals or greater than 2048m the JVM crashed   with the following error as soon as i attached the Eclipse Workbench to the Agent Controller: Unhandled exception Type=Illegal instruction vmState=0x00000000 J9Generic_Signal_Number=00000010 Signal_Number=00000004 Error_Value=00000000 Signal_Code=0000001e ….. Target=2_40_20100401_055940 (AIX 5.3) CPU=ppc (4 logical CPUs) (0x200000000 RAM) ----------- Stack B...