Я исхожу из фона Hadoop и имею ограниченные знания об Искры. BASed по тому, что я узнал до сих пор, Spark не имеет узлов картператора и редуктора, и вместо этого он имеет узлы драйвера/рабочего. Рабочий похож на картографа, и водитель (каким-то образом) похож на редуктор. Поскольку есть только одна программа драйвера, будет один редуктор. Если да, то как простые программы, такие как подсчет слов для очень больших наборов данных, могут быть сделаны в искровом режиме? Потому что у драйвера может просто закончиться нехватка памяти.Концепция редуктора в Spark
ответ
Драйвер является скорее контролером работы, только вытягивая данные обратно, если оператор требует его. Если оператор, с которым вы работаете, возвращает RDD/DataFrame/Unit, данные остаются распределенными. Если он вернет родной тип, он действительно вернет все данные обратно.
В противном случае понятие карты и сокращения здесь немного устарело (от типа работы, преследующей). Единственное, что действительно имеет значение, - это то, требует ли операция перетасовки данных или нет. Вы можете видеть точки перетасовки по этапам разбиения либо в пользовательском интерфейсе, либо через toDebugString (где каждый уровень отступов является тасованием).
Все, что сказано, для смутного понимания вы можете приравнивать все, что требует перетасовки к редуктору. В противном случае это картограф.
Последний, чтобы приравнять к вашему количеству слов пример:
sc.textFile(path)
.flatMap(_.split(" "))
.map((_, 1))
.reduceByKey(_+_)
В приведенном выше, это будет сделано в один этап, как загрузка данных (textFile
), расщепление (flatMap
), и map
пинг может все выполняются независимо от остальной части данных. Никакой перетасовки не требуется до тех пор, пока не будет вызван reduceByKey
, так как ему потребуется объединить все данные для выполнения операции ... HOWEVER, эта операция должна быть ассоциативной по какой-либо причине. Каждый узел будет выполнять операцию, определенную в reduceByKey
локально, только слияние окончательного набора данных после. Это уменьшает как расходы памяти, так и сети.
Примечание, что reduceByKey
возвращает RDD
и, таким образом, transformation
, поэтому данные перемешиваются с помощью HashPartitioner
. Все данные НЕ возвращаются к драйверу, он просто перемещается в узлы, которые имеют одинаковые ключи, так что он может объединить свое окончательное значение.
Теперь, если вы используете action
такие как reduce
или еще хуже, collect
, то вы не получите RDD
спину что означает, что данные откатывается к водителю, и вы будете нуждаться в комнате для него.
Here is my fuller explanation of reduceByKey
if you want more. Или как это ломается в чем-то вроде combineByKey
Ассоциативное свойство приносит функциональность как объединитель в HAdoop. Однако для «therececeByKey» данные должны быть перетасованы и отправлены на другой рабочий узел? Можем ли мы сказать, что рабочий узел играет роль редуктора? –
Итак, это означает, что мое первое понимание было правильным, потому что в случае подсчета слов, скажем, у нас есть 1M уникальных слов. Итак, все эти уникальные слова (вместе с их частичной частотой) передаются водителю для того, чтобы его уменьшить? Другими словами, мы можем заключить, что в Искры есть один редуктор, и это водитель? Все эти сокращения также выполняются в Hadoop (с использованием объединителя). –
Бла, я как-то замалчивал, что reduceByKey - это трансформация .... драйвер НЕ получит все данные в этом случае ... вот почему функции пары нажаты, когда у вас есть представление ключ/значение ...Я обновил свой ответ, чтобы указать, что ... но да, рабочие - это редукторы в этой роли. –
- 1. Концепция резервуара с потоком Spark
- 2. Создание редуктора неизменяемым в Redux
- 3. Комбайнер без редуктора в Hadoop
- 4. Условное использование редуктора Redux
- 5. Что нужно для редуктора?
- 6. Как получить работу редуктора?
- 7. Функция очистки редуктора Hadoop
- 8. редуктор редуктора против действия
- 9. redux - состояние редуктора
- 10. Куча редуктора с памятью
- 11. Заказ редуктора и саги
- 12. Как сортировать выход редуктора?
- 13. Улучшение редукторов редуктора
- 14. Clojure: точное определение редуктора
- 15. Концепция roWebScreen в Roku
- 16. Концепция наследования в jpa
- 17. Концепция нормализации в БД
- 18. Концепция сетки в Selenium
- 19. Концепция массива в Reactivex
- 20. Концепция намерения в Android?
- 21. Концепция бенчмаркинга в C#?
- 22. PTHREAD концепция в Linux
- 23. Концепция версий в couchbase
- 24. концепция Роль в разрешении
- 25. Концепция ретрансляции в TCP
- 26. Концепция overridding в Java
- 27. В PHP, концепция массива
- 28. Концепция конструктора в javascript
- 29. Концепция оболочки в cakephp
- 30. Концепция многопоточности в java
@ zero323 имеет точку ... Люди перестанут отвечать, если вы никогда не согласитесь с ответом .... –