BI experience

27 août 2014
par maryam khiali
2 Commentaires

Il était une fois VM HortonWorks, Flume et Tweeter

Comme convenu dans le dernier post, nous allons parler de flume et de la récupération de flux twitter.

Tout d’abord, nous partirons de la VM HortonWorks (voir le dernier post).

Voici les fichiers dont vous allez avoir besoin pour travailler

Les étapes d’installation de flume :

Si vous êtes novices comme moi, et que vous ne maitriser pas bien les configurations de flume, partez d’une installation automatique avec :

yum install flume 

Ceci implique donc que votre VM ait un accès internet.
En effet, au début j’avais fait un download sur ma machine. Puis j’avais pousser le programme flume sur la VM avec le petit programme wscp. Et là! C’était le drame! Je n’ai pas su configurer correctement les fichiers et donc rien ne fonctionnait… (ça sens le manque d’expériences!).
Du coup vive « yum install… »

Ensuite il faut configurer flume :

  1. modifier le fichier de log log4j.properties et mettre flume.log.dir=/var/log/flume si ce n’est pas déjà fait pour aller voir les logs par la suite.
  2. modifier le fichier flume-env.sh en lui indiquant les variables d’environnement  avec notamment le flume_classpath (flume-sources-1.0-SNAPSHOT.jar). Un exemple de contenu de ce fichier est dans la suite de l’article
  3. le hive-serdes-1.0-SNAPSHOT.jar sert à la lecture  de ce qu’on aura capturer en créant une table externe dans hive. Nous ne traiterons pas cette partie dans cet article. Pour information, j’ai ajouté le fichier directement dans l’interface beewax de hive pour créer la table externe et faire mes requêtes.

 Avant de commencer voici quelques petits liens utiles :

 

Avant de vous montrer le code, je propose, ci-dessous, les parties de la documentation d’apache flume qui m’ont aidé à comprendre le fonctionnement du fichier flume.conf. En effet, la documentation n’est pas très lisible car le sommaire sur la gauche est imbitable et les parties importantes sont entrecoupées par des informations sur des systèmes tels que Avro, Thrift…:

Donc les parties vraiment intéressantes pour notre exemple sont :

Les parties pour une vision générale, globale :

  • la partie Architecture pour les points suivants : data-flow-model, complex-flows, reliability, recoverability
  • la partie Setting up an agent pour les points suivants : configuring-individual-components, wiring-the-pieces-together, starting-an-agent, a-simple-example, installing-third-party-plugins
  • les parties sur les différentes possibilités que l’on a pour créer des flux :  setting multi agent flow, consolidation, multiplexing-the-flow

Les parties plus techniques avec des exemples de code :

Maintenant que le décor est planté, je vous propose de vous montrer mon fichier flume-env.sh et 2 exemples de flume.conf pour 2 flux différents.

Comme j’adore les chanteuse Beyonce et Shakira, mon exemple permettra de récupérer les tweets correspondant à ces 2 stars.

 

Le contenu du fichier flume-env.sh :

export JAVA_OPTS= »-Xms100m -Xmx2000m -Dcom.sun.management.jmxremote »
export FLUME_CLASSPATH= »/usr/lib/flume/lib/flume-sources-1.0-SNAPSHOT.jar »

Le premier exemple avec un flux simple :

 

Voici le code de flume.conf

TwitterAgent.sources = Twitter
TwitterAgent.channels = MemChannel
TwitterAgent.sinks = HDFS

TwitterAgent.sources.Twitter.type = com.cloudera.flume.source.TwitterSource
TwitterAgent.sources.Twitter.channels = MemChannel
TwitterAgent.sources.Twitter.consumerKey = remplacer par le consumer Key de votre application twitter
TwitterAgent.sources.Twitter.consumerSecret = remplacer par le consumer Secret de votre application twitter
TwitterAgent.sources.Twitter.accessToken = remplacer par l’acces Token de votre application twitter
TwitterAgent.sources.Twitter.accessTokenSecret = remplacer par l’access Token Secret  de votre application twitter

TwitterAgent.sources.Twitter.keywords = beyonce

TwitterAgent.sinks.HDFS.channel = MemChannel
TwitterAgent.sinks.HDFS.type = hdfs
TwitterAgent.sinks.HDFS.hdfs.path = hdfs://sandbox.hortonworks.com:8020/user/hue/flume/tweets
TwitterAgent.sinks.HDFS.hdfs.fileType = DataStream
TwitterAgent.sinks.HDFS.hdfs.writeFormat = Text
TwitterAgent.sinks.HDFS.hdfs.batchSize = 1000
TwitterAgent.sinks.HDFS.hdfs.rollSize = 0
TwitterAgent.sinks.HDFS.hdfs.rollCount = 10000

TwitterAgent.channels.MemChannel.type = memory
TwitterAgent.channels.MemChannel.capacity = 10000
TwitterAgent.channels.MemChannel.transactionCapacity = 100

 

Un second exemple avec un double channels

 

 

le code flume.conf

 

TwitterAgent.sources = Twitter
TwitterAgent.sinks = HDFS_Beyonce HDFS_shakira
TwitterAgent.channels = MemChannel_Beyonce MemChannel_Shakira

TwitterAgent.sources.Twitter.keywords = Beyonce,Shakira

# Ici c’est la partie la plus délicate. Il faut créer
# un interceptor pour lui indiquer des mots que l’on souhaite
# ajouter dans le header du flux. Car un flux est composé
# d’un header et d’un body. Le but ici est de remplir le
# header avec Beyonce ou Shakira pour ensuite dispatcher
# le flux dans le bon channel grâce au mapping.

TwitterAgent.sources.Twitter.interceptors = i1
TwitterAgent.sources.Twitter.interceptors.i1.type = regex_extractor

#ici l’expression (Beyonce|Shakira) permet de chercher dans le body du flux soit Beyonce soit Shakira.

TwitterAgent.sources.Twitter.interceptors.i1.regex = (Beyonce|Shakira)
TwitterAgent.sources.Twitter.interceptors.i1.serializers = s1
TwitterAgent.sources.Twitter.interceptors.i1.serializers.s1.name = star

# il existe 2 types  : multiplexing pour mettre le résultat dans des sous channel ou replicating pour répliquer la totalité dans des sous channel
TwitterAgent.sources.Twitter.selector.type = multiplexing
TwitterAgent.sources.Twitter.selector.header = star
TwitterAgent.sources.Twitter.selector.mapping.Beyonce = MemChannel_Beyonce
TwitterAgent.sources.Twitter.selector.mapping.Shakira = MemChannel_Shakira

# Describe/configure the source
TwitterAgent.sources.Twitter.type = com.cloudera.flume.source.TwitterSource
#TwitterAgent.sources.Twitter.bind = localhost
#TwitterAgent.sources.Twitter.port = 44444

# Bind the source and sink to the channel
#TwitterAgent.sources.Twitter.channels = MemChannel
TwitterAgent.sources.Twitter.channels = MemChannel_Beyonce MemChannel_Shakira
TwitterAgent.sources.Twitter.consumerKey = remplacer par le consumer Key de votre application twitter
TwitterAgent.sources.Twitter.consumerSecret = remplacer par le consumer Secret de votre application twitter
TwitterAgent.sources.Twitter.accessToken = remplacer par l’acces Token de votre application twitter
TwitterAgent.sources.Twitter.accessTokenSecret = remplacer par l’access Token Secret  de votre application twitter

# Describe the sink TwitterAgent.sinks.HDFS.type = logger
# Use a channel which buffers events in memory
TwitterAgent.channels.MemChannel_Beyonce.type = memory
TwitterAgent.channels.MemChannel_Beyonce.capacity = 1000
TwitterAgent.channels.MemChannel_Beyonce.transactionCapacity = 100

TwitterAgent.channels.MemChannel_Shakira.type = memory
TwitterAgent.channels.MemChannel_Shakira.capacity = 1000
TwitterAgent.channels.MemChannel_Shakira.transactionCapacity = 100

TwitterAgent.sinks.HDFS_Beyonce.channel = MemChannel_Beyonce
TwitterAgent.sinks.HDFS_Beyonce.type = hdfs
TwitterAgent.sinks.HDFS_Beyonce.hdfs.path = hdfs://sandbox.hortonworks.com:8020/user/hue/flume/tweets_Beyonce
TwitterAgent.sinks.HDFS_Beyonce.hdfs.fileType = DataStream
TwitterAgent.sinks.HDFS_Beyonce.hdfs.writeFormat = Text
TwitterAgent.sinks.HDFS_Beyonce.hdfs.batchSize = 1000
TwitterAgent.sinks.HDFS_Beyonce.hdfs.rollSize = 0
TwitterAgent.sinks.HDFS_Beyonce.hdfs.rollCount = 100000

TwitterAgent.sinks.HDFS_shakira.channel = MemChannel_Shakira
TwitterAgent.sinks.HDFS_shakira.type = hdfs
TwitterAgent.sinks.HDFS_shakira.hdfs.path = hdfs://sandbox.hortonworks.com:8020/user/hue/flume/tweets_Shakira
TwitterAgent.sinks.HDFS_shakira.hdfs.fileType = DataStream
TwitterAgent.sinks.HDFS_shakira.hdfs.writeFormat = Text
TwitterAgent.sinks.HDFS_shakira.hdfs.batchSize = 1000
TwitterAgent.sinks.HDFS_shakira.hdfs.rollSize = 0
TwitterAgent.sinks.HDFS_shakira.hdfs.rollCount = 100000

Il faudrait que j’essaye de faire un dernier exemple multisource multi channel avec de la consolidation en dernière étape.

Cet article pose une brique de plus sur l’apprentissage du NoSQL, du big data…

J’ai essayé de rassembler les liens qui m’ont permis d’avoir ce cheminement. Je ne sais pas si tout est clair mais j’ai essayé de mettre un maximum d’informations.

Si vous avez un retour d’expérience à faire sur ce genre de développement notamment sur tout ce qui est performance liée au fait d’avoir plusieurs agents, plusieurs channels ou plusieurs sinks. N’hésitez pas à partager ça avec nous!

Commentez!

12 août 2014
par maryam khiali
1 Commentaire

Tutoriaux noSQL Hadoop

Après avoir lu pas mal d’article, de documentation sur le big la théorie c’est pas mal! Mais si vous voulez vous essayer au noSQL avec par exemple hadoop, des éditeurs vous ont mis à disposition des virtual machine pré installée ou des installations facilitées:

De mon côté, j’ai testé la plateforme HortonWorks.

Voici ce dont vous aurez besoin de télécharger pour utiliser votre VM, tournant sous VirtualBox:

  • VirtualBox (attention à la version de virtualBox que vous allez prendre et aux incompatibilités avec Symantec endPoint par exemple sinon vous serez confronté, peut être comme moi, à des messages du type « failed to verify the process integrity:Unknown image file \Device\harddisk\volume1\Windows\system32\mppr.dll« . Pour palier à ce problème j’ai juste désinstaller la dernière version 4.3.14 et installé la version to 4.3.12.
    Si vous voulez plus d’informations sur les options reseau et communication avec votre VM proposé par Virtual Box, je vous conseille cette page.
  • Putty ou un équivalent pour pouvoir être en mode clavier AZERTY et pour plus de simplicité à dialoguer avec la VM
  • WinScp : qui vous permettra de pousser vos fichiers de votre machine sous Windows vers la VM qui est sous red hat

Vous trouverez les tutoriaux hortonWorks sur cette page

Allez aussi faire un tour, sur cet article du blog de bigdatamonkeys.fr qui donne une bonne présentation de cette VM.

Après ces tutoriaux, je me suis essayé à tester le brique flume qui permet de récupérer des flux de données. Le premier test que j’ai pu faire est assez simple à mettre en place : c’ est la lecture du flux twitter. Se sera pour un prochain épisode.

Et vous? Est ce que vous avez testé des VM hadoop? Avez vous des conseils sur le choix d’une distribution?
N’hésitez pas à poster comme d’habitude!

29 juillet 2014
par maryam khiali
0 Commentaires

SSAS et l’option writeback

Aujourd’hui je vous propose d’aborder le sujet du writeback dans SSAS qui permet aux utilisateurs de faire des simulations à travers Excel.

4 types de simulations sont possibles :

  • USE_EQUAL_ALLOCATION : répartition égale dans les membres de la hiérarchie
  • USE_EQUAL_INCREMENTAL : répartition en prenant en compte des valeurs pré-existantes
  • USER_WEIGHTED_ALLOCATION : répartition dans les membres en fonction d’un poids (valeur entre 0 et 1)
  • USER_WEIGHTED_INCREMENTAL : répartition dans les membres en fonction d’un poids et de valeurs pré-existantes

Pour en savoir plus, j’ai trouvé sur la toile un super article: http://blogs.msdn.com/b/querysimon

Tout d’abord merci à Simon pour cet article et surtout pour le petit zip que l’on peut télécharger. En effet ce zip permet de mettre en application ce qu’il explique.

Pour compléter son article et comprendre encore plus vite voici :

1) une correspondance pour chacun des champs qu’il a créé :

  • USE_EQUAL_ALLOCATION : M divided equal
  • USE_EQUAL_INCREMENTAL : M incremental equal
  • USER_WEIGHTED_ALLOCATION : M allocation equal
  • USER_WEIGHTED_INCREMENTAL : M allocated incremental

2) La vision du cube avant toute simulation

3) Voici un premier tableau récapitulatif avec les différentes ventilations d’une valeur 100:

4) Voici les calculs associés pour une compréhension plus rapide :

Et enfin en bonus voici le genre de questions que nous nous sommes posés :

Question 1 : Une mesure A est basée sur une mesure B.  Est ce que si une simulation est faite sur la mesure B cela impacte la mesure A?

Réponse : Oui. Exemple d’un cube avec 2 mesures : le CA et une mesure calculée se basant sur le CA, le CA/nb produit. Si une simulation est faite sur le CA, alors la mesure CA/nb  sera impactée en conséquence.

Question 2 : Si je rafraichis les données du cube, est ce que l’on retrouve les valeurs de simulation?

Réponse : Oui. Exemple j’ai une valeur 10 dans une cellule. Je passe la valeur à 20 (simulation). En base de données le résultat de la simulation sera 10. Si la valeur dans mon cube passe de 10 à 30, après process et mise à jour de mon TCD excel, j’aurai la valeur 30 + 10 (valeur stockée dans la table partition de simulation) soit 40.  Une simple addition est faite entre la nouvelle valeur du cube et le résultat du calcul qu’il a fallu faire pour arriver à la simulation faite précédemment soit + 10.

Question 3 : Dans le cas d’application de la formule Excel dans une cellule, est ce que cette dernière est stockée en base et est ce que si les valeurs en sources bougent le résultat sera mis à jour?

Réponse :  La formule Excel n’est pas stockée en base. Par contre la résultante de ce calcul sera stockée en base après publication. Si une formule Excel est ajoutée sur une cellule du cube exemple : =20*Feuil1!C11, la cellule en question ne sera plus mise à jour car le calcul Excel fait sur cette valeur primera sur les valeurs mises à jour.

Question 4 : Est ce que le writeBack est présent dans la version standard d’SQL server?

Réponse :  Oui d’après le site msdn

Si vous avez des astuces à partager sur le sujet, n’hésitez pas à mettre un commentaire!

12 juin 2014
par maryam khiali
0 Commentaires

ACID versus BASE

Ce petit schéma pour expliquer la différence entre les bases de données qui respectent la norme ACID (les bases de données relationnelles et certaines bases de données NoSQL) et les bases de données qui respectent la norme BASE (généralement les bases de données NoSQL).

Pour mieux comprendre le théorème CAP

12 juin 2014
par maryam khiali
0 Commentaires

Distributed data?

Un schéma vaut mieux qu’un long discours…donc grâce à l’autosharding, à l’ajout de nœud (horizontal scalability), voici pourquoi nous pouvons attendre de très bons temps de réponses des bases de données NoSQL:

Avez vous déjà mis en place ce genre d’architecture? N’hésitez pas à commenter!