wake-up-neo.com

Was ist der Unterschied zwischen Apache Mahout und der MLlib von Apache Spark?

Betrachtet man eine MySQL products -Datenbank mit 10 Millionen Produkten für eine E-Commerce-Website.

Ich versuche, ein Klassifizierungsmodul zur Kategorisierung von Produkten einzurichten. Ich verwende Apache Sqoop, um Daten von MySQL nach Hadoop zu importieren.

Ich wollte Mahout darüber als Framework für maschinelles Lernen verwenden, um einen seiner Klassifizierungsalgorithmen zu verwenden, und dann bin ich auf Spark gestoßen. welches mit MLlib versehen ist

  • Was ist der Unterschied zwischen den beiden Frameworks?
  • Was sind die Vor- und Nachteile der einzelnen Komponenten?
53
eliasah

Der Hauptunterschied wird von den zugrunde liegenden Frameworks herrühren. Im Falle von Mahout ist es Hadoop MapReduce und im Falle von MLib ist es Spark. Genauer gesagt - aus dem Unterschied des Overheads pro Job
Wenn Ihr ML-Algorithmus auf den einzelnen MR-Job abgebildet ist, beträgt der Hauptunterschied nur den Startaufwand, der für Hadoop MR Dutzende von Sekunden und für Spark beispielsweise 1 Sekunde beträgt. Beim Modelltraining ist das also nicht so wichtig.
Dinge werden anders sein, wenn Ihr Algorithmus auf viele Jobs abgebildet wird. In diesem Fall haben wir den gleichen Overheadunterschied pro Iteration und es kann sich um einen Game Changer handeln.
Nehmen wir an, dass wir 100 Iterationen benötigen, von denen jede 5 Sekunden Cluster-CPU benötigt.

  • On Spark: Es dauert 100 * 5 + 100 * 1 Sekunden = 600 Sekunden.
  • Bei Hadoop: MR (Mahout) dauert es 100 * 5 + 100 * 30 = 3500 Sekunden.

Gleichzeitig ist Hadoop MR ein viel ausgereifteres Framework als Spark und wenn Sie eine Menge Daten haben und Stabilität von größter Bedeutung ist - ich würde Mahout als ernsthafte Alternative betrachten.

43
David Gruzman

Warnung - Hauptbearbeitung:

MLlib ist eine lose Sammlung von High-Level-Algorithmen, die auf Spark ausgeführt werden. Mahout war früher nur Mahout auf Hadoop Mapreduce. Im Jahr 2014 kündigte Mahout an, Hadoop Mapreduce-Code nicht mehr zu akzeptieren und stellte die Neuentwicklung komplett auf Spark (mit anderen Motoren, wie H2O)) um.

Das Wichtigste, was dabei herauskommt, ist eine Scala-basierte, generalisierte, verteilte, optimierte, lineare Algebra-Engine und -Umgebung mit einer interaktiven Scala= Shell. Vielleicht ist das wichtigste Wort "generalisiert". Da es ausgeführt wird on Spark alles, was in MLlib verfügbar ist, kann mit der linearen Algebra-Engine von Mahout-Spark verwendet werden.

Wenn Sie eine allgemeine Engine benötigen, die viele Funktionen von Tools wie R bereitstellt, jedoch nur für wirklich große Datenmengen, schauen Sie sich Mahout an. Wenn Sie einen bestimmten Algorithmus benötigen, schauen Sie sich jeden an, um zu sehen, was er hat. Zum Beispiel läuft Kmeans in MLlib, aber wenn Sie A'A gruppieren müssen (eine in Empfehlern verwendete Cooccurrence-Matrix), brauchen Sie beide, weil MLlib keine Matrixtransponierte oder A'A hat (Mahout macht tatsächlich eine Thin-optimierte) A 'So wird die Transponierung optimiert).

Mahout enthält auch einige innovative empfohlene Bausteine , die Dinge bieten, die in keinem anderen OSS zu finden sind.

Mahout hat immer noch seine älteren Hadoop-Algorithmen, aber so schnell wie Computing-Engines wie Spark) werden die meisten Leute dort investieren.

42
pferrel