Question

J'aimerais analyser un flux continu de données (accessible via HTTP) à l'aide d'une approche MapReduce. Je me suis donc penché sur Apache Hadoop. Malheureusement, il semble que Hadoop s’attende à démarrer un travail avec un fichier d’entrée de taille fixe, plutôt que de pouvoir transmettre les nouvelles données aux consommateurs au fur et à mesure de leur arrivée. Est-ce vraiment le cas ou est-ce que je manque quelque chose? Existe-t-il un outil MapReduce différent qui fonctionne avec les données lues depuis un socket ouvert? L’évolutivité est un problème ici, donc je préférerais que MapReducer s’occupe des problèmes de parallélisation compliqués.

J'ai joué avec En cascade et j'ai pu exécuter un travail sur un fichier statique accessible via HTTP, mais cela ne résout pas réellement mon problème. Je pourrais utiliser curl comme étape intermédiaire pour vider les données quelque part sur un système de fichiers Hadoop et écrire un chien de garde pour lancer un nouveau travail chaque fois qu'un nouveau bloc de données est prêt, mais c'est un sale coup; il doit y avoir un moyen plus élégant de le faire. Des idées?

Était-ce utile?

La solution

Le piratage que vous décrivez est plus ou moins la manière standard de faire les choses - Hadoop est fondamentalement un système orienté batch (pour une chose, s'il n'y a pas de fin aux données, les réducteurs ne peuvent jamais commencer, doit commencer après la fin de la phase de la carte).

Faites pivoter vos journaux; Lorsque vous les faites pivoter, transférez-les dans HDFS. Demandez à un processus de surveillance (éventuellement distribué, coordonné à l'aide de ZooKeeper) de surveiller les décharges et de lancer de nouvelles tâches de traitement. Vous voulez vous assurer que les travaux sont exécutés sur des entrées suffisamment volumineuses pour justifier les frais généraux.

Hbase est un clone BigTable de l’écosystème hadoop qui pourrait vous intéresser, car il permet un flux continu d’insertions; vous devrez néanmoins exécuter des requêtes analytiques en mode de traitement par lots.

Autres conseils

Qu'en est-il de http://s4.io/ ? Il est conçu pour le traitement des données en streaming.

Mettre à jour

Un nouveau produit fait son apparition: Storm - Calcul en temps réel distribué et tolérant aux pannes: traitement de flux en continu calcul, RPC distribué et plus encore

Je pense que vous devriez jeter un coup d'œil sur le CEP Esper ( http://esper.codehaus.org/).

Yahoo S4 http://s4.io/

Il fournit un calcul en temps réel des flux, comme une réduction de carte

La Storm de Twitter est ce dont vous avez besoin, vous pouvez l'essayer!

Plusieurs options ici. Je suggère la combinaison de Kafka et Storm + (Hadoop ou NoSql) comme solution. Nous construisons déjà notre plateforme Big Data en utilisant ces outils opensource, et cela fonctionne très bien.

Votre cas d'utilisation semble similaire à celui de l'écriture d'un robot d'indexation à l'aide de Hadoop: les données sont renvoyées (lentement) à partir de sockets ouvertes pour récupérer des pages distantes via HTTP.

Si tel est le cas, consultez Pourquoi récupérer des pages Web ne correspond pas à la cartographie . Et vous voudrez peut-être consulter le FetcherBuffer dans Bixo, qui implémente une approche filetée dans un réducteur (via Cascading) pour résoudre ce type de problème.

Comme vous le savez, le principal problème de Hadoop en matière d’exploration de flux réside dans le fait qu’il utilise d’abord HFDS, qui est un disque. Les opérations de disque apportent une latence qui entraînera des données manquantes dans le flux. Deuxièmement, le pipeline n’est pas parallèle. Map-reduction fonctionne généralement sur des lots de données et non sur des instances comme avec des données de flux.

J'ai récemment lu un article sur M3 qui aborde apparemment le premier problème en contournant HDFS et effectue des calculs en mémoire dans la base de données d'objets. Et pour le deuxième numéro, ils utilisent des apprenants incrémentaux qui ne sont plus exécutés par lots. À vérifier M3 : Traitement de flux sur Mémoire principale MapReduce . Je ne pouvais trouver le code source ou l'API de ce M3 nulle part. Si quelqu'un le trouvait, partagez le lien ici.

Hadoop Online est également un autre prototype qui tente de résoudre les mêmes problèmes que M3: Hadoop Online

Cependant, Apache Storm est la solution clé du problème, mais cela ne suffit pas. Vous avez besoin de quelques euqivalents de map-reduction right, voici pourquoi vous avez besoin d’une bibliothèque appelée SAMOA , qui possède en fait de très bons algorithmes pour l'apprentissage en ligne qui manque un peu au mahout.

Plusieurs cadres et produits de traitement de flux avancés sont disponibles sur le marché. Les frameworks open source sont par exemple. Apache Storm ou Apache Spark (qui peuvent tous deux s'exécuter sur Hadoop). Vous pouvez également utiliser des produits tels que IBM InfoSphere Streams ou TIBCO StreamBase.

Jetez un coup d'œil à cet article d'InfoQ, qui explique en détail le traitement des flux et tous ces frameworks et produits: Traitement en temps réel des flux / Analyse en continu en combinaison avec Hadoop . En outre, l'article explique également en quoi cela est complémentaire à Hadoop.

Au fait: de nombreux éditeurs de logiciels, tels qu'Oracle ou TIBCO, appellent cette approche d'analyse de traitement / diffusion de flux "données rapides". au lieu de " big data " car vous devez agir en temps réel au lieu du traitement par lots.

Vous devriez essayer Apache Spark Streaming. Cela devrait bien fonctionner pour vos besoins.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top