Bonjour,
Je dois faire un prototype utilisant c# et une solution de big data.
Qq un a t il de l’expérience la dedans ? J'essaye de me documenter sur Hadoop mais ne trouve pas grand chose sur c#/Haddop (sans windows azure).
Merci pour vos conseils.
Bonjour,
Je dois faire un prototype utilisant c# et une solution de big data.
Qq un a t il de l’expérience la dedans ? J'essaye de me documenter sur Hadoop mais ne trouve pas grand chose sur c#/Haddop (sans windows azure).
Merci pour vos conseils.
Bonjour topolino,
Tu peux utiliser la bibliothèque Hadoop Streaming qui fait partie de Hadoop. Elle écoute la sortie standard, donc tu procèdes avec un Console.WriteLine() dans ta méthode map() et avec un Console.ReadLine() dans ta méthode reduce().
Je le présente en fin d'article ici http://blogs.msdn.com/b/big_data_fra...de-partie.aspx
Il faut savoir cependant que tu perds beaucoup en performance en utilisant ce genre de bibliothèque même si cette bricole permet de faire un programme MapReduce sur Hadoop avec n'importe quel langage.
L'équipe Microsoft en charge de HDInsight (hadoop sur Azure donc, mais ça marche pour n'importe quelle installation de Hadoop) ont développé des bibliothèques accessibles sous forme de paquet NuGet :
.NET Map/Reduce : c'est un « wrapper » .NET de la bibliothèque Java Hadoop Streaming pour écrire un programme mapreduce. C'est celle-ci que tu dois utiliser si tu veux écrire en c# (elle utilise la sortie standard).
LINQ to Hive : LINQ to Hive permet d’utiliser des requêtes LINQ sur des données gérées par Hive.
WebHDFS Client : WebHDFS Client est une abstraction .NET du système de fichiers HDFS d’Hadoop. Il permet de créer, de lire, ou de supprimer des fichiers contenu sur ton cluster Hadoop programmatiquement parlant. Il utilise pour cela le service REST WebHDFS du cluster Hadoop (n'est pas activé de base).
Voila, généralement tu peux suivre les tutos qui sont fait pour des conf Hadoop avec Azure car les fonctionnalités sont les mêmes que si tu utilises une installation autre (c'est toujours Hadoop). Il faut juste faire attention à la version (sur Azure c'est Hadoop 1.0.3).
Merci pour ta reponse claire.
J'ai essayé de jouer avec HDInsight et les temps de reponse avec un simple select sont tres tres tres longue !!!!
La meme requete avec SQL server prend entre 1 à 2 s, avec HDInsight cela prend 45 s. Je suis sur une VM, elle cela provoquerait ce tps de reponse incensé ?
Tu as testé HDInsight en l'installant avec WebPI? En soit, Hadoop n'est pas très performant pour faire ce genre de choses, il n'est pas voué à remplacer ton SGBD SQL qui sera beaucoup, beaucoup plus rapide sur un petit nombre de données (l'ordre de grandeur est le Go). Lorsque tu as plus, c'est à dire du Téra voir du Péta, Hadoop est très performant du fait de son architecture distribuée (c'est pour cela que la version HDInsight installé sur une seule machine n'existe que pour des cas de tests et debug).Envoyé par topolino
Hadoop procède ainsi :
1-Il distribue tes données sur les différentes machines que tu as.
2-Ensuite il prend ton code mapreduce et l'envoie à chaque machine. Chacune de tes machines l'exécute sur ses données internes, puis le renvoie au process principale qui regroupe tous les résultats.
Maintenant lorsque tu fais du SQL avec HDInsight, ça passe par une surcouche de Hadoop qui s'appelle Hive. Et quand tu fournies une requête SQL à Hive, il la transforme en traitement mapreduce (même pour un simple "SELECT"). Mapreduce n'est pas du tout adapté pour ce genre de requête, il l'est plus pour faire un traitement. Certains Frameworks, basés sur Hadoop, essaient de palier à ce problème. Cloudera développe Impala par exemple, il y a HBase aussi qui est une base données utilisant le stockage distribué de Hadoop (HDFS), sans passer par un traitement mapreduce. Mais de mon point de vu ce n'est pas convaincant, et même Hadoop n'est pas conçu pour être un SGBD. Si tu as le temps, jette un oeil sur cette vidéo, très intéressante, sur "noSql, map/reduce, bases relationnelles: quoi utiliser quand ?" : http://msdn.microsoft.com/fr-fr/jj200255
Ces trois aspects expliquent en partie la lenteur que tu as lorsque tu utilises HDInsight-onebox. Ce qu'il faut voir c'est que Hadoop n'est pas le remplaçant de nos SGBD SQL, il est conçu pour du traitement massivement parallèle (donc sur un cluster, avec plusieurs machines de traitement), sur des données de très très grande ampleur. Sur un fichier de texte, tu es mieux d'utiliser une requête LINQ en C#, à la paralléliser avec TPL, ça sera plus rapide.
Partager