Предоставлено Притхвираджем Босом
Spark’s Устойчивые распределенные наборы данных (программная абстракция) вычисляются лениво, а преобразования сохраняются в виде ориентированных ациклических графов (DAG). Таким образом, каждое действие в RDD заставит Spark пересчитывать DAG. Таким образом достигается отказоустойчивость в Spark, потому что в случае отказа любого рабочего узла DAG просто необходимо пересчитать.
как установить php на windows 7
Это также обязательно кешировать (сохранить с соответствующим уровнем хранения) RDD, чтобы частые действия с RDD не заставляли Spark повторно вычислять DAG.Темы, затронутые в этом блоге, по существу необходимы для сертификации Apache Spark и Scala. Темы, затронутые в этом блоге, необходимы для .
Зачем использовать разделитель?
В кластерных вычислениях главная задача - минимизировать сетевой трафик. Когда данные ориентированы на ключ-значение, разделение становится обязательным, потому что для последующих преобразований в RDD происходит изрядное перемешивание данных по сети. Если похожие ключи или диапазон ключей хранятся в одном разделе, то тасование сводится к минимуму, и обработка становится существенно быстрой.
Преобразования, требующие перетасовки данных между рабочими узлами, значительно выигрывают от разделения. Такие преобразования cogroup, groupWith, join, leftOuterJoin, rightOuterJoin, groupByKey, reduceByKey ,commonByKey и искать .
Разделы можно настраивать при условии, что RDD основан на ключ-значении.Свойства раздела
- Кортежи в одном разделе гарантированно находятся на одной машине.
- Каждый узел в кластере может содержать более одного раздела.
- Общее количество разделов настраивается, по умолчанию оно равно общему количеству ядер на всех узлах исполнителя.
Типы разбиения в Spark
Spark поддерживает два типа разделения:
- Разбиение хэша : Использует Java Object.hashCode метод определения раздела как partition = key.hashCode ()% numPartitions.
- Разделение диапазона : Использует диапазон для распределения по соответствующим разделам ключей, попадающих в этот диапазон. Этот метод подходит для случаев, когда ключи упорядочены естественным образом, а ключи неотрицательны. В приведенном ниже фрагменте кода показано использование разделителя диапазонов.
Пример кода
Давайте посмотрим на пример того, как разделить данные по рабочим узлам. Доступен полный код Scala Вот .
Вот некоторые тестовые данные 12 координат (в виде кортежей),
Создать org.apache.spark.HashPartitioner размером 2, где ключи будут разделены по этим двум разделам на основе хэш-кода ключей.
Затем мы можем проверить пары и выполнить различные преобразования на основе ключей, такие как foldByKey и reduceByKey.
Подводя итог, разбиение на разделы значительно увеличивает скорость выполнения преобразований на основе ключей.
Есть вопрос к нам? Пожалуйста, отметьте это в разделе комментариев, и мы свяжемся с вами.
Похожие сообщения:
Почему вы должны изучить Spark после освоения Hadoop
разница между интерфейсом и классом