2015-04-29 2 views
4

Я пытаюсь кэшировать таблицу Hive в памяти с помощью CACHE TABLE tablename;Apache Spark SQL - RDD In-Memory Data Skew

После этой команды таблица успешно кэшируется, однако я заметил перекос в том, как RDD разбивается на разделы в памяти.

Вот что я вижу в закладке «Storage» на мастер приложения

rdd_71_1 Memory Deserialized 1x Replicated 1264.7 MB 0.0 B node4:38759 
rdd_71_10 Memory Deserialized 1x Replicated 11.6 MB  0.0 B node1:58115 
rdd_71_11 Memory Deserialized 1x Replicated 25.7 MB  0.0 B node1:53968 
rdd_71_2 Memory Deserialized 1x Replicated 72.6 MB  0.0 B node4:54133 
rdd_71_4 Memory Deserialized 1x Replicated 1260.9 MB 0.0 B node2:33179 
rdd_71_5 Memory Deserialized 1x Replicated 56.8 MB  0.0 B node2:54222 
rdd_71_7 Memory Deserialized 1x Replicated 54.5 MB  0.0 B node4:34149 
rdd_71_8 Memory Deserialized 1x Replicated 1277.8 MB 0.0 B node1:43572 
rdd_71_9 Memory Deserialized 1x Replicated 1255.8 MB 0.0 B node1:58518 

Уведомление некоторые перегородки диапазона 11Мб до 72MB и других разделов имеют диапазон ~ 1200MB

Даже когда я не кеширую таблицу, а просто обрабатываю с диска, я вижу, что некоторые задачи завершаются МНОГО раньше других, что еще раз подтверждает мои предположения об асимметрии.

Что здесь происходит? Как я могу избежать этого искажения данных?

PS: Таблица хранится в формате ORC

+0

Предполагаю, что таблица кеша выполняет временные кеши для увеличения производительности вычислений – eliasah

ответ

1

Я не знаю точно, почему ваши данные искажены, когда считываются непосредственно с диска. Тем не менее, я нахожу, что часто бывает полезно, чтобы ваши данные были сбалансированы по размеру разделов и не задерживались в одной длительной задаче. Я рекомендую прочитать последнюю часть https://www.safaribooksonline.com/library/view/learning-spark/9781449359034/ch04.html (раздел «Разделение данных (расширенный)»), который предлагает несколько полезных советов :)

Смежные вопросы