У меня есть файл HDFS с 50 миллионами записей, а размер исходного файла составляет 50 ГБ.
Я пытаюсь загрузить это в таблицу кустов и создать уникальный идентификатор для всех строк, используя приведенное ниже, при загрузке. Я использую Hive 1.1.0-cdh5.16.1.
row_number () over (order by event_id, user_id, timestamp) в качестве id
Во время выполнения я вижу, что на шаге сокращения 40редукторы назначены. Среднее время для 39 редукторов составляет около 2 минут, тогда как последний редуктор занимает около 25 минут, что, несомненно, заставляет меня поверить, что большая часть данных обрабатывается в одном редукторе.
Я подозревал, что причиной этого является условие Order By. и попробовал следующее,
row_number () over () как id
Тем не менее, я вижу то же поведение.
Думая о парадигме уменьшения карты, она заставляет менячувствую, что если мы не укажем предложение Partition BY, данные должны быть обработаны в одном редукторе (нераспределенном), чтобы увидеть все строки и прикрепить правильный номер строки. Это может быть справедливо для любой оконной функции без предложения «По разделу» или «По» в перекошенном столбце.
Теперь мой вопрос: как нам обойти эту проблему и оптимизировать оконные функции, когда нам нужно избежать предложения «Разделение BY»?