В чем разница между Apache Mahout и Apache Spark MLlib?

Рассмотрение базы данных MySQL products с 10 миллионами продуктов для веб-сайта электронной коммерции.

Я пытаюсь создать классификационный модуль для категоризации продуктов. Я использую Apache Sqoop для импорта данных из MySQL в Hadoop.

Я хотел использовать Mahout над ним в качестве механизма машинного обучения для использования одного из алгоритмов классификации, а затем я столкнулся с Spark, который снабжен MLlib

  • В чем разница между двумя структурами?
  • В основном, каковы преимущества, недостатки и ограничения каждого из них?

Ответ 1

Основное отличие от базовых фреймворков. В случае Mahout это Hadoop MapReduce, а в случае MLib - Spark. Чтобы быть более конкретным - от разницы в накладных расходах
Если ваш алгоритм ML, сопоставленный с одним заданием MR, - основное различие будет только накладными расходами на запуск, что составляет десятки секунд для Hadoop MR, и пусть скажет 1 секунду для Spark. Поэтому в случае обучения модели это не так важно.
Все будет по-другому, если ваш алгоритм сопоставляется со многими заданиями. В этом случае мы будем иметь одинаковую разницу в накладных расходах на итерацию, и это может быть смена игры.
Предположим, что нам нужно 100 итераций, каждая из которых требует 5 секунд кластерного процессора.

  • On Spark: это займет 100 * 5 + 100 * 1 секунд = 600 секунд.
  • На Hadoop: MR (Mahout) потребуется 100 * 5 + 100 * 30 = 3500 секунд.

В то же время Hadoop MR представляет собой гораздо более зрелую структуру, чем Spark, и если у вас много данных, и стабильность имеет первостепенное значение - я бы рассматривал Mahout как серьезную альтернативу.

Ответ 2

Предупреждение - основное изменение:

MLlib - это свободная коллекция алгоритмов высокого уровня, которая работает на Spark. Это то, что Маху был только Маху из старого, был на Hadoop Mapreduce. В 2014 году Mahout объявил, что больше не будет принимать код Hadoop Mapreduce и полностью переключил новую разработку на Spark (с другими двигателями, возможно, в оффлайне, например H2O).

Самое важное, что выйдет из этого, - это генератор с расширенным распределенным оптимизированным движком линейной алгебры Scala, включая интерактивную оболочку Scala. Возможно, самое важное слово "обобщено". Поскольку он работает на Spark, все, что доступно в MLlib, можно использовать с движком линейной алгебры Mahout-Spark.

Если вам нужен общий движок, который будет делать много таких инструментов, как R, но на действительно больших данных, посмотрите на Mahout. Если вам нужен конкретный алгоритм, посмотрите на каждого, чтобы увидеть, что у них есть. Например, Kmeans запускается в MLlib, но если вам нужно класть A'A (матрицу cooccurrence, используемую в рекомендациях), вам понадобятся они оба из-за того, что MLlib не имеет транспонирование матрицы или A'A (на самом деле Mahout делает тонко оптимизированный A'A, поэтому транспонирование оптимизировано).

Mahout также включает в себя несколько инновационных рекомендующих строительных блоков, которые предлагают вещи, найденные ни в одном другом OSS.

У Mahout все еще есть свои более старые алгоритмы Hadoop, но поскольку быстрые вычислительные двигатели, такие как Spark, становятся нормой, которую большинство людей будет инвестировать в нее.