Hadoop означає HDFS, YARN, MapReduce та багато іншого. Ви маєте на увазі Spark vs MapReduce ? Тому що Іскра працює на / з Hadoop, в чому справа.
Основна причина використання Spark - це швидкість, і це пов'язано з тим, що її виконання може зберігати дані в пам'яті між етапами, а не завжди зберігатись до HDFS після Map або Reduce. Ця перевага дуже виражена для ітеративних обчислень, які мають десятки етапів, кожен з яких стосується одних і тих же даних. Тут дещо швидше "100 разів". Для простих, однопрохідних ETL-подібних завдань, для яких було створено MapReduce, це взагалі не швидше.
Ще одна причина використання Spark - це її приємніша мова високого рівня порівняно з MapReduce. Він забезпечує функціональний вигляд, схожий на програмування, що імітує Scala, що набагато приємніше, ніж писати код MapReduce. (Хоча вам доведеться або використовувати Scala, або прийняти трохи менш розвинені API Java або Python для Spark). Хруст і каскад вже дають подібну абстракцію на версії MapReduce, але це все-таки область, де Іскра приємна.
Нарешті, Spark має ще незадовільні, але перспективні підпроекти для ML, аналізу графіків та потокової передачі, які розкривають подібний, узгоджений API. З MapReduce вам доведеться звернутися до декількох інших проектів для цього (Mahout, Giraph, Storm). Приємно мати його в одній упаковці, хоч ще не «запечене».
Чому б ти не використовував Spark? перефразовуючи себе:
- Іскра в першу чергу Scala, з портативними Java API; MapReduce може бути дружнішим та ріднішим для розробників на базі Java
- Зараз є більше експертизи MapReduce, ніж Spark
- Для паралельних даних, однопрохідних, ETL-подібних завдань, призначених для MapReduce, MapReduce має меншу вагу порівняно з еквівалентом Spark
- Іскра досить зріла, як і зараз ПЕРЕМОГА, але Spark-on-YARN все ще досить нова. Вони ще не можуть бути оптимально інтегровані. Наприклад, донедавна я не думаю, що Spark міг би попросити YARN про виділення на основі кількості ядер? Тобто: MapReduce може бути простішим для розуміння, управління та налаштування