В чем разница между Apache Mahout и MLlib Apache Spark?
учитывая MySQL products
база данных с 10 миллионами продуктов для веб-сайта электронной коммерции.
Я пытаюсь настроить модуль классификации для классификации продуктов. Я использую Apache Sqoop для импорта данных из MySQL в Hadoop.
Я хотел использовать Mahout над ним в качестве основы машинного обучения, чтобы использовать один из его алгоритмы классификации, а потом я столкнулся с искрой, которая снабжена MLlib
- так что разница между двумя системами?
- главным образом,что преимущества, вниз-пункты и ограничения каждого?
2 ответов
основное отличие будет исходить из базовых фреймворков. В случае 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 как серьезную альтернативу.
предупреждение--major edit:
MLlib-это свободная коллекция алгоритмов высокого уровня, которая работает на Spark. Это то, что Махо раньше был только Махо старого был на Hadoop Mapreduce. В 2014 году Mahout объявил, что больше не будет принимать код Hadoop Mapreduce и полностью переключил новую разработку на Spark (с другими двигателями, возможно, в ближайшее время, например, H2O).
самое важное, что из этого следует, - это обобщенное распределенное на основе Scala оптимизированный движок линейной алгебры и среда, включая интерактивную оболочку Scala. Пожалуй, самое главное слово - "обобщенный". Поскольку он работает на Spark, все, что доступно в MLlib, можно использовать с двигателем линейной алгебры Mahout-Spark.
Если вам нужен общий движок, который будет делать много того, что делают такие инструменты, как R, но на действительно больших данных, посмотрите на Mahout. Если вам нужен конкретный алгоритм, посмотрите на каждый, чтобы увидеть, что у них есть. Например, Kmeans работает в MLlib, но если вам нужно кластер A'A (матрица совпадения, используемая в рекомендателях) вам понадобятся оба, потому что MLlib не имеет транспонирования матрицы или A'a (на самом деле Mahout делает тонко оптимизированный A'a, поэтому транспонирование оптимизировано).
Mahout также включает в себя некоторые инновационные рекомендательные строительные блоки которые предлагают вещи, найденные в других ОСС.
Mahout по-прежнему имеет свои старые алгоритмы Hadoop, но поскольку быстрые вычислительные машины, такие как Spark, становятся нормой, большинство людей будут инвестировать там.