Как узнать, что мои данные перекошены? - PullRequest
0 голосов
/ 27 июня 2018

После переноса моих данных (предположим, таблицы) в HDFS я понятия не имею, как реплицируются мои данные (какая часть передается на какой механизм (узел)).

Итак, при выполнении запросов Spark SQL некоторые люди говорят, что вы можете дать подсказку, что мои данные искажены.

Но откуда мне знать, что мои данные искажены, чтобы я мог дать подсказку искры?

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Это действительно зависит от качества ваших данных и от того, как вы хотите использовать эти данные. Также от вашего Spark зависит, как реализовать алгоритмы. По сути, вы можете использовать SQL, чтобы какой-то запрос выбрал один из столбцов в качестве ключа, например user_name. И так далее, и создайте группу, увидев, есть ли огромные различия.

For example if have such case 
select count(distinct(user_name)) from your table group by user_id 

count           username 
199999999999      abc123
12                abc124
6                 abc121

Проверьте пример выше, имя пользователя abc123, которое является проблемой перекоса данных.

Есть несколько ссылок относительно решения проблемы перекоса данных в Apache Spark. 1. http://silverpond.com.au/2016/10/06/balancing-spark.html 2. https://databricks.com/session/handling-data-skew-adaptively-in-spark-using-dynamic-repartitioning

0 голосов
/ 27 июня 2018

Пока вы загружаете данные в любую распределенную систему, например HDFS, вы загружаете их с ключом раздела. В этом случае, если для одного из значений ключа раздела у вас больше записей по сравнению с другими значениями, ваши данные распределяются неравномерно. В большинстве случаев Spark будет работать хорошо, даже если ваши данные слегка искажены, но, например, в одном значении раздела у вас есть 90% данных, а в другом 10%, тогда это будет проблемой для большого набора данных. Ваша одна задача будет выполнять больше работы по сравнению с другой, и искра застрянет в одной задаче. Поэтому анализ данных является важным фактором

Для обработки данных Skegness необходимо либо равномерно разделить данные, либо использовать итеративное широковещательное соединение. В этом есть отличная статья от Databricks. Пожалуйста, проверьте Databricks с текстовым итеративным широковещательным соединением.

---------

По умолчанию создается раздел для одного блока HDFS. По умолчанию это 64 МБ. При чтении из искры, если вы не собираетесь предоставлять какой-либо параметр для параллелизма, он создаст одну задачу для каждого блока. Возьмем, к примеру, 4 ядра и 5 разделов, и каждый раздел занимает около 10 минут. поэтому 4 ядра будут работать на 4-х разделах параллельно и завершатся за 10 минут. Затем последний раздел будет завершен через 10 минут после того, как он будет занят одним свободным ядром. Так что больше разделов тоже не хорошо. В случае меньшего количества разделов параллелизм будет меньше, и перекос данных может произойти, если большая часть ваших данных находится в одном разделе, и одна задача будет выполнять больше работы, чем другая.

...