каковы недостатки mapreduce?
каковы недостатки mapreduce? Есть много преимуществ mapreduce. Но я также хотел бы знать недостатки mapreduce.
4 ответов
прошу когда mapreduce не является подходящим выбором? Я не думаю, что вы увидите какой-нибудь недостаток, если вы используете его по назначению. Сказав это, есть определенные случаи, когда mapreduce не является подходящим выбором:
- в режиме реального времени обработка.
- Это не всегда очень легко реализовать всех и все, как мистер программы.
- когда вашим промежуточным процессам нужно поговорить с каждым другие (задания выполняются изолированно).
- когда обработка требует много данных, чтобы быть shuffled по сети.
- когда вам нужно обрабатывать потоковые данные. MR лучше всего подходит для пакетная обработка огромные объемы данных, которые у вас уже есть с вами.
- когда вы можете получить желаемый результат с автономной системой. Очевидно, что менее болезненно настраивать и управлять автономной системой по сравнению с распределенной система.
- когда у вас есть OLTP потребности. MR не подходит для большого количества коротких онлайн-транзакций.
может быть несколько других случаев. Но здесь важно то, насколько хорошо вы его используете. Например, вы не можете ожидать, что работа MR даст вам результат через пару МС. Вы также не можете считать это недостатком. Просто вы используете его не в том месте. И это справедливо для любой технологии, ИМХО. Короче, подумайте хорошенько, прежде чем действовать.
Если вы все еще хотите, вы можете взять вышеуказанные точки в качестве недостатков mapreduce:)
HTH
вот некоторые usecases, где MapReduce работает не очень хорошо.
- когда вам нужен быстрый ответ. например, скажем
- обработка графики
- сложные алгоритмы, например, некоторые алгоритмы машинного обучения, такие как SVM, а также см. 13 drawfs (Ландшафт параллельных вычислительных исследований: вид из Беркли)
- итерации-когда вам нужно обрабатывать данные снова и снова. например, KMeans - используйте Spark
- когда фаза карты генерирует слишком много ключей. Thensorting принимает навсегда.
- объединение двух больших наборов данных со сложными условиями (равный случай может обрабатывается через хэширование и т. д.)
- операции с состоянием-например, оценка каскадных задач государственной машины один за другим-использование Hive, Big может помочь, но много накладных расходов перечитывание и анализ данных.
прежде всего, это потоки вывода карте, если можно сохранить его в памяти, это будет более эффективным. Первоначально я развернул свой алгоритм с помощью MPI, но когда я увеличил некоторые узлы, начал обмен, поэтому я сделал переход.
на Namenode отслеживает метаданные всех файлов в распределенной файловой системе. Я читаю книгу hadoop (Hadoop в действии) , и в ней упоминается, что Yahoo по оценкам, метаданные составляют около 600 байт на файл. Это означает, что если у вас слишком много файлов, у вашего Namenode могут возникнуть проблемы.
Если вы не хотите использовать streaming API вы должны написать свою программу в java язык. Я, например, сделал перевод с C++. Это имеет некоторые побочные эффекты, например Java имеет большие строковые накладные расходы по сравнению с C. Поскольку мое программное обеспечение все о строках, это своего рода недостаток.
честно говоря, мне действительно пришлось много думать, чтобы найти недостатки. Проблемы, которые mapreduce решил для меня, были намного больше, чем проблемы, которые он ввел. этот список определенно не полный, только несколько первых замечаний. Очевидно, вы должны иметь в виду, что он ориентирован на Большие Данные, и именно там он будет выступать в лучшем виде. Есть много других рамок распределения там со своими собственными характеристики.
- вам нужно переосмыслить / переписать тривиальные операции, такие как объединения, фильтр для достижения в шаблонах map/reduce/Key/value
- MapReduce предполагает, что задание может быть распараллелено. Но это может быть не для всех заданий обработки данных.
- он тесно связан с Java, конечно, у вас есть свинья и улей для спасения, но вы теряете гибкость.