Retour sur le DevFest Nantes 2016, BigData en force

devfest2016_logo

Jeudi 10 novembre j'ai assisté à la 2ème journée du DevFest de Nantes à la Cité des Congrès. Durant cette journée au programme très chargé, j'ai pu assister à plusieurs conférences de qualité dont  deux m'ont intéressé au plus haut point, il s'agit d'Apache Beam,  Elasticsearch Ingest Node dont voici une rapide présentation.

beam-logo-full-color-name-right-1000Apache Beam, concaténation de Batch et strEAM, est un projet open source récemment entré dans l'incubateur Apache. A l'origine, ce projet était un projet Google qui se nommait "Google Dataflow". Beam propose un modèle unifié pour la définition et l'exécution de pipelines de traitement de données Big Data par lots (batch) ou en flux continu (streaming). Apache Beam propose un SDK pour la construction des pipelines et des runners pour leur exécution. Le SDK est disponible en Java, Python, Scala et d'autres DSL prochainement.

Beam offre une couche d'abstraction aux API et moteurs d'exécution de traitement de données comme :

  • Google Cloud Dataflow
  • Apache Flink
  • Apache Spark
  • Apache Apex

Le principe est de créer un pipeline de fonctions à exécuter pour le traitement de données via le SDK de Beam, et de le faire exécuter dans un runner BEAM qui l'exécutera dans un moteur d'exécution cible(Spark, Flink...)

Beam permet ainsi d'exécuter avec n'importe quel moteur d'exécution des fonctionnalités avancées de traitement de donnée, en batch ou en streaming, comme les "Session Window" même si le moteur cible n'implémente pas cette fonctionnalité. C'est le runner BEAM qui va se charger de "traduire" les fonctionnalités développées dans le pipeline pour être exécutées dans le moteur de données cible. C'est très pratique dans le cas où on souhaite migrer d'un moteur de données à un autre par exemple, ou tester des moteurs dans le cadre d'une étude technique. Le même code créé dans pipeline BEAM s'exécute sur tous les moteurs d'exécution sans modification du code, il suffit simplement de changer de runner. Sans BEAM il faut tout réécrire à chaque fois qu'on passe d'un moteur d'exécution avec son API propre.

L'utilisation de BEAM n’entraîne pas de dégradation sur les temps d'exécution par rapport au moteur d'exécution sur lequel se base le runner puisque BEAM n'a pas l'intelligence du traitement cette dernière reste à la charge du moteur d'exécution.

Elasticsearch-Logo-Color-V.jpg

Elasticsearch Ingest Node est une fonctionnalité inclue dans Elasticsearch 5.0. Cette dernière permet de faire de la transformation de données directement dans vos index. Ce nouveau nœud permet donc de faire de la transformation sans nécessairement passer par un logstash surtout dans les cas de transformations plutôt basiques. Dans Ingest, on retrouve un peu le même principe de transformation que dans Logstash :

logstash process

Exemple de processus de tranformation Logstash

 

Exemple de processus de traitement Ingest

Exemple de processus de traitement Ingest

 

Avec Logstash, on part d'une source de donnée, à laquelle on applique des filtres dans Logstash puis on envoie le résultat dans Elasticsearch.

Avec Ingest, on part directement un document indexé dans Elasticsearh, on déclare un "pipeline" de transformation Ingest et ensuite notre document est transformé dans l'index.

On voit que le pipeline de transformation Ingest est similaire aux filtres que l'on peut retrouver dans Logstash.

Comme les pipelines Ingest se déclarent dans Elasticsearch, leur déclaration est très proche de celle que l'on a pour la création et le requètage d'index Elasticsearch.

Creation de notre pipeline Ingest

Création de notre pipeline Ingest

Indexation d'un document avec application du pipeline

Indexation d'un document avec application du pipeline

Document transformé

Document transformé

Deux fonctionnalités sympas dans un Ingest, la première c'est la fonction "simulate" qui permet d'avoir un aperçu de votre pipeline sur un document sans persister le résultat dans votre index

POST _ingest/pipeline/_simulate
{
  "pipeline" :
  {
    "description": "_description",
    "processors": [
      {
        "set" : {
          "field" : "field2",
          "value" : "_value"
        }
      }
    ]
  },
  "docs": [
    {
      "_index": "index",
      "_type": "type",
      "_id": "id",
      "_source": {
        "foo": "bar"
      }
    },
    {
      "_index": "index",
      "_type": "type",
      "_id": "id",
      "_source": {
        "foo": "rab"
      }
    }
  ]
}

La seconde fonctionnalité consiste en la création de plugins pour Ingest afin d'étendre les processus de transformation proposés par Ingest. Il y a quelques plugins qui existent mais vous pouvez également créer vos propres plugins. Voici l'exemple d'un plugin de David Pilato, speaker lors du DevFest de Nantes sur Ingest Node, utilisant  la base open streetmap pour la recherche d'adresses via des coordonnées géographique et inversement.

Conclusion

Avec cet article de présentation, j'espère avoir susciter votre curiosité sur l'un ou l'autre ou même les deux solutions qui méritent de consacrer un peu plus de temps que ce billet pour aller plus loin dans leur découverte.

Enregistrer

Enregistrer

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.