Добавить distribute by partition key
insert overwrite mainTable partition(date)
select * from stage table
distribute by date;
это вызовет финальную стадию сокращения (если она работает только на карте), и каждый редуктор запишет один раздел, а не все, создавая меньше файлов и используя меньшебуферы, потребляющие меньше памяти.
Если вам нужно больше параллелизма, проверьте настройку куста bytes.per.reducer, возможно, он слишком высок.
set hive.exec.reducers.bytes.per.reducer=67108864;
Также вы можете использовать распределение по ключу раздела и случайное целое число для распределения данныхравномерно между несколькими редукторами: distribute by substr(date), FLOOR(RAND()*100.0)%20