2015-08-24 2 views
1

Я новый Спарк ... некоторые основные вещи я не ясно, когда происходит через основы:Спарк Основы

запроса 1. Для распределения обработки - Может Спарк работать без HDFS - файловой системы Hadoop на кластере (например, создавая собственную распределенную файловую систему), или требуется какая-то базовая распределенная файловая система на месте, такая как HDFS, GPFS и т. д.

Запрос 2. Если у нас уже есть файл, загруженный в HDFS (как распределенный блоков), то Spark снова преобразует его в блоки и перераспределяет на своем уровне (для распределенной обработки) или просто будет использовать распределение блоков в соответствии с кластером HADDOP HDFS.

Запрос 3. Помимо определения DAG, SPARK также создает такие разделы, как MapReduce, и перетаскивает разделы в узлы редуктора для дальнейшего вычисления? Я смущен тем же, что и до создания DAG, ясно, что Spark Executor, работающий над каждым узлом Worker, загружает блоки данных в виде RDD в память, а вычисление применяется в соответствии с DAG .... но где же эта часть требуется для разбиения данных в соответствии с ключами и перенося их на другие узлы, где будет выполняться задача редуктора (так же, как mapreduce), как это делается в памяти?

ответ

1

Это было бы лучше спросить, так как отдельные вопросы и вопрос 3 трудно понять. Во всяком случае:

  1. Нет, Spark не требует распределенной файловой системы.
  2. По умолчанию Spark создаст один раздел на один блок HDFS и, если возможно, будет совместно размещать вычисления с данными.
  3. Вы спрашиваете о shuffle. Shuffle создает блоки на картах, которые редукторы будут извлекать из них. Параметр spark.shuffle.memoryFraction определяет, сколько памяти выделяется для перетасовки файлов блоков. (По умолчанию 20%.) Параметр spark.shuffle.spill определяет, следует ли различать блоки перетасовки на локальный диск, когда память заканчивается.
+1

Спасибо @ Даниэль за ответ на все три, попытается быть более ясным в следующий раз. Вы правы мой запрос был связан только с Shuffle .... дальше от вашего ответа Я предполагаю Параметры: spark.shuffle.memoryFraction & spark.shuffle.spill оба будут применимы к Mappers - используются, когда Shuffle создает блок. Что происходит в узле Reducer, он извлекает перетасованные блоки непосредственно в память или блоки сначала записываются на диск узла редуктора, а затем загружаются в память для вычисления. – Kansingh

+0

Отличный вопрос! Я _think_ редукторы также могут разливаться на диск. На эти вопросы лучше всего ответить, проверив код, но код тасования структурирован довольно сложным образом. Возможно, это место: https://github.com/apache/spark/blob/v1.4.1/core/src/main/scala/org/apache/spark/shuffle/hash/HashShuffleReader.scala#L55 –

0

Запрос 1. Для распределения обработки - Может ли искра работать без HDFS?

Для распределенной обработки Спарк не требует HDFS. Но он может читать/записывать данные из/в систему HDFS. Для некоторых случаев использования он может записывать данные в HDFS. Для программы записи мировой сортировки Teragen, она использовала HDFS для сортировки данных вместо использования in-memoery.

Spark не обеспечивает распределенное хранение. Но интеграция с HDFS является одним из вариантов хранения. Но искра может использовать другие системы хранения данных, как Cassnadra и т.д. Посмотрите на эту статью для более подробной информации: https://gigaom.com/2012/07/11/because-hadoop-isnt-perfect-8-ways-to-replace-hdfs/

Query 2. Если у нас уже есть файл загружен в HDFS (как распределены блоки) - тогда будет искриться снова преобразовывать его в блоки и перераспределять на своем уровне

Я согласен с ответом Даниэля Дарабоса. Spark создаст один раздел на блок HDFS.

Запрос 3: на перетасовки

В зависимости от размера данных, случайное воспроизведение будет сделано в памяти Или он может использовать диск (например teragen сортировки), или он может использовать оба. Посмотрите на этот отличный article на Spark shuffle.

Хорошо с этим. Что делать, если у вас недостаточно памяти для хранения всего «картографического» вывода? Возможно, вам придется пролить промежуточные данные на диск. Параметр spark.shuffle.spill отвечает за включение/выключение проливания, и по умолчанию разрешено распространение.

Объем памяти, который может использоваться для хранения выходов «карты», прежде чем проливать их на диск «JVM Heap Size» * spark.shuffle.memoryFraction * spark.shuffle.safetyFraction, со значениями по умолчанию это «Размер кучи JVM» * 0.2 * 0.8 = «Размер кучи JVM» * 0.16.

0

Запрос 1. Да, он может работать и с другими. Spark работает с RDD, если у вас есть соответствующий RDD. Это когда вы создаете RDD, открывая файл в HDFS, он по своей сути создает HADOOP RDD, который имеет реализацию для понимания HDFS, если вы пишете свою собственную распределенную файловую систему, может написать свою собственную реализацию для того же самого и создать экземпляр класса, который он сделал. Но написать разъем RDD в нашу собственную DFS - это вызов. Для получения дополнительной информации вы можете посмотреть интерфейс RDD в искровом коде

Запрос 2. Он не будет создавать, вместо этого мои средства разъема RADD HADOOP/HDFS знают, где находятся блоки. Он также попытается использовать одну и ту же пряжу узлы для выполнения задачи jvm для обработки.

Запрос 3. Не уверен, что об этом

0

запросе 1: - Для простой искры обеспечивает распределяя обработку из-за абстракции РДА (resilent распространять набор данных), так и без HDFS этого можите обеспечить распространение хранения.

Запрос 2: - Нет, это не будет recreate.Here Спарк обеспечит каждый блок в качестве раздела (что означает ссылку на этот блок), так что запуск нити на одном блоке

Query 3: - понятия не имею.