web-dev-qa-db-fra.com

Quelle est la différence entre Apache Mahout et Apache Spark's MLlib?

Envisager une base de données MySQL products avec 10 millions de produits pour un site e-commerce.

J'essaie de mettre en place un module de classification pour catégoriser les produits. J'utilise Apache Sqoop pour importer des données de MySQL vers Hadoop.

Je voulais utiliser Mahout dessus comme framework d'apprentissage automatique pour utiliser l'un de ses algorithmes de classification , puis je suis tombé sur Spark qui est fourni avec MLlib

  • Quelle est donc la différence entre les deux cadres?
  • Principalement, quels sont les avantages, les inconvénients et les limites de chacun?
53
eliasah

La principale différence proviendra des cadres sous-jacents. Dans le cas de Mahout, c'est Hadoop MapReduce et dans le cas de MLib, c'est Spark. Pour être plus précis - de la différence dans les frais généraux par emploi
Si votre algorithme ML mappé à la tâche MR unique - la principale différence ne sera que la surcharge de démarrage, ce qui représente des dizaines de secondes pour Hadoop MR, et disons 1 seconde pour Spark. Donc, en cas de formation sur modèle, ce n'est pas si important.
Les choses seront différentes si votre algorithme est mappé à de nombreux travaux. Dans ce cas, nous aurons la même différence sur les frais généraux par itération et cela peut changer la donne.
Supposons que nous ayons besoin de 100 itérations, chacune nécessitant 5 secondes de CPU de cluster.

  • Sur Spark: cela prendra 100 * 5 + 100 * 1 secondes = 600 secondes.
  • Sur Hadoop: MR (Mahout), cela prendra 100 * 5 + 100 * 30 = 3500 secondes.

Dans le même temps, Hadoop MR est un framework beaucoup plus mature que Spark et si vous avez beaucoup de données et que la stabilité est primordiale - je considérerais Mahout comme une alternative sérieuse.

43
David Gruzman

Avertissement - modification majeure:

MLlib est une collection lâche d'algorithmes de haut niveau qui s'exécute sur Spark. C'est ce que Mahout était autrefois Mahout était sur Hadoop Mapreduce. En 2014, Mahout a annoncé qu'il n'accepterait plus le code Hadoop Mapreduce et a complètement basculé le nouveau développement vers Spark (avec d'autres moteurs éventuellement en vue, comme H2O).

La chose la plus significative qui en résulte est un moteur et un environnement d'algèbre linéaire optimisé distribué et basé sur Scala, y compris un shell interactif Scala. Le mot le plus important est peut-être "généralisé". Puisqu'il s'exécute on Spark tout ce qui est disponible dans MLlib peut être utilisé avec le moteur d'algèbre linéaire de Mahout-Spark.

Si vous avez besoin d'un moteur général qui fera beaucoup de ce que font des outils comme R mais sur des données vraiment volumineuses, regardez Mahout. Si vous avez besoin d'un algorithme spécifique, regardez-les chacun pour voir ce qu'ils ont. Par exemple, Kmeans s'exécute dans MLlib, mais si vous devez regrouper A'A (une matrice de cooccurrence utilisée dans les recommandateurs), vous en aurez besoin à la fois parce que MLlib n'a pas de transposition de matrice ou A'A (en fait, Mahout fait une optimisation fine A'A pour que la transposition soit optimisée).

Mahout inclut également quelques blocs de construction recommandables innovants qui offrent des choses que l'on ne trouve dans aucun autre OSS.

Mahout a toujours ses anciens algorithmes Hadoop mais comme des moteurs de calcul rapides comme Spark deviennent la norme, la plupart des gens y investiront.

42
pferrel