samedi 2 janvier 2016

Hive

Dernièrement, j'ai créé une VM linux sous VirtualBox avec l'idée de faire du devops en full linux. Pour ce faire, j'ai choisi Ubuntu 14.04 LTS, une distribution que j'utilise souvent pour tester des produits et KDE pour pouvoir disposer d'un environnement de développement confortable. Pour ce dernier, j'ai choisi intellij et non eclipse, choix personnel.

Comme cadre de travail, j'ai opté pour la construction d'un environnement big data de type batch, d'où Hadoop et Hive. Par la suite, j'ajouterai Spark, produit auquel je crois beaucoup après avoir lu le livre écrit par les "guys" de Databricks, avec en finalité l'IA qui se démocratise sous la forme du machine learning -> mlib. On pourrait aussi envisager une VM de type temps réel ( bases nosql, bases in-memory, moteur de recherche, ... ). Bref, de quoi s'amuser !

Hive est une surcouche SQL qui a pour but de faciliter le travail des développeurs Java; ils ont ainsi accès à HDFS via une grammaire SQL déjà très complète. Pour du small big data, cela permet d'écrire rapidement des batchs sans connaissance préalable d'Hadoop et de map-reduce. Cependant, Hive étant un compilateur map-reduce, il est plus raisonnable de les former à ces techniques afin par la suite de pouvoir affronter du middle ou du vrai big data. En effet, certaines requêtes en mode sql "normal" peuvent être fortement déconseillées en mode hadoop, par exemple un order by.

A l'origine, Hive est optimisé pour les lectures et les insertions en mode bulk. En effet, les lectures peuvent être parallélisées via la fonction map qui permet de lire des blocs hdfs sur plusieurs noeuds de manière parallélisée. Quant aux insertions en mode bulk ( penser buckets ), elles vous permettent de remplir les blocs HDFS ( blocs de plusieurs centaines MB et non blocs de 8 ko comme pour une base oracle ).

Depuis peu, on peut faire des mises à jour ( update, delete ). Pourquoi pas, mais faites le en mode bulk, sinon vous risquez d'allouer des blocs HDFS pour pas grand chose. De plus, n'oubliez pas que vous allez lancer un job map-reduce par derrière ! Enfin, vous allez créer des blocs hdfs de type delta merge dans HDFS. Et pour finir, si vous persistez à faire des mises à jour unitaires, j'espère que les perfs vous arrêteront définitivement.

Des solutions plus récentes comme Tez ou Impala permettent d'accélérer le mode batch. Pour ma part, je vous conseille d'aller plutôt étudier Spark. A vous, in fine, de choisir en fonction de votre besoin ... et de vos contraintes.

Pour vous aider à découvrir Hadoop et Hive, j'ai mis qqes notes dans le répertoire hive dans google drive. Comme Hue n'est pas disponible pour Ubuntu, j'ai configuré Squirrel pour avoir l'équivalent d'un requêteur sql.

Pour le metadata hive, j'ai choisi Derby,mais dans un environnement de production, il faut opter pour une base sql afin de pouvoir traiter plusieurs connexions à un instant t.