Решение Spark для устранения перекоса данных (2)

задняя часть Большие данные Spark

Это 14-й день моего участия в Gengwen Challenge.Подробности о мероприятии:Обновить вызов

Решение 3. Отфильтруйте ключи, вызывающие перекос

  • Если в заданиях Spark разрешено отбрасывать некоторые данные, вы можете отфильтровать ключи, которые могут привести к искажению данных, и отфильтровать данные, соответствующие ключам, которые могут привести к искажению данных. Таким образом, искажение данных не произойдет. в Spark рабочих мест.

Решение 4. Преобразование соединения сокращения в соединение карты

  • При нормальных обстоятельствах операция объединения будет выполнять процесс перемешивания, а также выполнять объединение с уменьшением, то есть сначала агрегировать все одинаковые ключи и соответствующие значения в задачу сокращения, а затем выполнять соединение. Процесс обычного соединения показан на следующем рисунке:

image.png

  • Обычное соединение будет проходить через процесс перемешивания, и после перемешивания это эквивалентно извлечению данных одного и того же ключа в задачу чтения в случайном порядке, а затем объединению, которое является соединением сокращения. Однако, если RDD относительно невелик, вы можете использовать широковещательный оператор полных данных + map для малого RDD, чтобы добиться того же эффекта, что и присоединение, то есть присоединение к карте. происходить. .

(Обратите внимание, что RDD не может быть передан в широковещательном режиме, только данные внутри RDD могут быть загружены в память драйвера посредством сбора и затем широковещательной передачи)

  • 核心思路:
    • Присоединяйтесь к операции подключения без использования операторов, переменные используют карту класса операторов вещания для выполнения операции объединения и, таким образом, полностью обходят класс операции перемешивания, полностью избегая появления наклона и появления данных. Меньшие данные RDD напрямую извлекаются оператором, чтобы собрать конец памяти для драйвера, а затем создать широковещательную передачу своей переменной; RDD Затем другой оператор выполняет на основе карты в операторской функции из переменной широковещательную передачу, чтобы получить меньший RDD полный объем данных, каждый фрагмент данных с текущим RDD был выровнен в соответствии с ключом соединения, тот же ключ, если соединение, то данные будут двумя RDD с тем, как вам нужно подключиться.

    • В соответствии с приведенными выше идеями операция перемешивания вообще не будет выполняться, что принципиально устраняет проблему перекоса данных, которая может быть вызвана операцией объединения.

    • Когда в операции соединения возникает проблема перекоса данных, а в одном из RDD содержится небольшой объем данных, этот метод может быть предпочтительным, и эффект очень хороший. Процесс объединения карт показан на рисунке:

image.png

  • Неприменимый анализ сценариев:
    • Поскольку широковещательная переменная Spark сохраняет копию в каждом исполнителе, если объем данных обоих RDD относительно велик, то преобразование RDD с относительно большим объемом данных в широковещательную переменную может привести к переполнению памяти.

Решение 5. Образец выборки присоединяется к наклонному ключу отдельно

  • В Spark, если в RDD только один ключ, то процесс по умолчанию будет перемешивать ключ, соответствующий этим разбросанным данным, процесс завершается другой задачей сокращения.

  • Когда искажение данных вызвано одним ключом, искаженный ключ может быть извлечен отдельно для формирования СДР, а затем корень СДР, состоящий из искаженного ключа, может использоваться для отдельного присоединения к другим СДР. Механизм Spark, данные в этом RDD будут распределены по нескольким задачам для операции объединения на этапе перемешивания. Процесс раздельного соединения наклонного ключа показан на рисунке:

image.png

  • 1. Применимый анализ сценариев:

    • Для данных в RDD вы можете преобразовать их в промежуточную таблицу или напрямую использовать countByKey(), чтобы увидеть объем данных, соответствующий каждому ключу в RDD. данных для одного ключа Тем более, что вы можете рассмотреть возможность использования этого метода.

    • Когда объем данных очень велик, вы можете рассмотреть возможность использования выборочной выборки для получения 10 % данных, а затем проанализировать, какой ключ в 10 % данных может привести к искажению данных, а затем извлечь данные, соответствующие этот ключ отдельно.

  • 2. Неприменимый анализ сценариев:

    • Если в RDD много ключей, вызывающих перекос данных, эта схема не применяется.