Présentation de la création d’un projet BigData avec HBase sur un serveur Jboss7.
Le but du jeu de cet exemple est de créer un projet RESTfull qui insère des données dans une base HBase. Ces services web seront exposés sur un serveur JEE JBoss EAP 6.1.
Premièrement, il faut installer une base Hbase sur un serveur linux. Il est possible de l’installer sur un serveur windows, mais ceci est plus compliqué à réaliser. Nous ne traiterons pas de l’installation de HBase dans ce post car il existe de nombreux tutoriels très bien faits sur le net.
La première question concernant le projet est de savoir comment architecturer le projet JEE. Sans prétendre être la meilleure solution, voici celle que nous avons mis en place dans le projet:

Ce code permet de bien gérer la connexion à la base de données HBase depuis votre application et en particulier depuis vos managers.
package com.axopen.hbase.connector;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.MasterNotRunningException;
import org.apache.hadoop.hbase.ZooKeeperConnectionException;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HTableInterface;
import org.apache.hadoop.hbase.client.HTablePool;
public class HBaseConnector {
private static HBaseConnector instance;
private static HTablePool hTablePool;
private static Configuration mConfiguration;
/**
* Private Constructor
*/
private HBaseConnector() {
try {
// CONFIGURATION
Configuration lConfiguration = new Configuration();
try {
HBaseAdmin.checkHBaseAvailable(lConfiguration);
} catch (MasterNotRunningException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (ZooKeeperConnectionException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// PERMET DE VERIFIER LA CONFIGURATION ET L’ACCES AU SERVEUR
mConfiguration = HBaseConfiguration.create(lConfiguration);
// CREATION D’UN POOL DE TABLE
hTablePool = new HTablePool(lConfiguration,
HBaseConstants.HTABLE_POOL_SIZE);
// CREE LA DATABASE SI NON EXISTANTE
initDatabase();
} catch (IOException ex) {
ex.printStackTrace();
}
}
/**
* Creates the tables and table columns in the database.
*
* @throws IOException
*/
public static void initDatabase() throws IOException {
HBaseAdmin admin = new HBaseAdmin(mConfiguration);
HTableDescriptor[] blogs = admin.listTables(HBaseConstants.STATSTABLE);
if (blogs.length == 0) {
HTableDescriptor blogstable = new HTableDescriptor(
HBaseConstants.STATSTABLE);
admin.createTable(blogstable);
// Cannot edit a stucture on an active table.
admin.disableTable(HBaseConstants.STATSTABLE);
// META DATA
HColumnDescriptor metadesc = new HColumnDescriptor(
HBaseConstants.META);
admin.addColumn(HBaseConstants.STATSTABLE, metadesc);
// DATA
HColumnDescriptor datadesc = new HColumnDescriptor(
HBaseConstants.DATA);
admin.addColumn(HBaseConstants.STATSTABLE, datadesc);
// For readin, it needs to be re-enabled.
admin.enableTable(HBaseConstants.STATSTABLE);
}
admin.close();
}
/**
* @return The HbaseTableManager instance
*/
public static HBaseConnector getInstance() {
if (instance == null) {
instance = new HBaseConnector();
}
return instance;
}
/**
* Method used to retrieve a HTable instance.
*
* @param tableName
* The table name
* @return The HTableInterface instance
* @throws IOException
*/
public synchronized HTableInterface getHTable(String tableName)
throws IOException {
return hTablePool.getTable(tableName);
}
}
Enfin pour utiliser votre base de données, il suffit juste d’utiliser votre Singleton nouvellement créé.
HTableInterface table = HBaseConnector.getInstance().getHTable(
HBaseConstants.STATSTABLE);
Les contrats IT font partie de ces sujets dont tout le monde reconnaît l'importance… tout en espérant secrètement les éviter. Pourtant, après notre épisode de podcast avec Anne-Julie, avocate spécialisée en droit des contrats IT, une évidence : un bon contrat ne ralentit pas un projet, il le sécurise ! Et surtout, il vous évite d'apprendre au mauvais moment ce que « sévèrement engagé » veut dire. Alors, comment aborder un contrat sans s'endormir, sans s'énerver, et surtout sans se faire piéger ? C'est précisément ce qu'on va voir dans cet article !
Avec les frameworks modernes comme React, Vue ou Angular, il est possible de modifier toute l'interface d'un seul coup en changeant une unique variable. Plus besoin de synchroniser manuellement données et DOM ! C'est ce qu'on appelle la **réactivité**. Mais comment ça fonctionne ? Et pourquoi ça a révolutionné notre façon de développer ?
D'expérience, il n'y a pas de sujet qui cristallise plus d'angoisse dans une DSI que la migration legacy. Dès qu'on l'évoque, les visages se crispent et le mot "impossible" arrive assez rapidement dans la conversation. Pourtant, derrière cette réputation de monstre intouchable se cache souvent une réalité plus simple qu'on ne le croit !