列式存储的文件在写入文件之前都会将一定数量的数据缓存在内存中,由于hive每个动态分区目录都会打开一个文件写入器(file writer),所以当存在很多分区的时候,有可能会导致mapper OOM,所以需要增加内存。或者限制每次任务的分区数。另外缓冲区(file buffer)的大小最好跟block一样大,set Parquetbuffer size=blocksize
2.开启hive.optimize.sort.dynamic.partition通过explain 发现 动态分区跟sqoop一样 一般是没有reduce的, 每个partition每个map会打开一个filewriter,所以可以强制开启reduce,这样,我们可以为 reducer 中的每个分区只保持一个filewriter,从而减少 reducer 的内存压力。注意:在hive4.0以后会删除并被替换为 hive.optimize.sort.dynamic.partition.threshold
参数解释:
默认值:true在 Hive 0.13.0 和 0.13.1 中; false 在 Hive 0.14.0 及更高版本中 ( HIVE-8151 )
添加于:Hive 0.13.0 和HIVE-6455
已弃用:替换为 hive.optimize.sort.dynamic.partition.threshold
在 Hive 4.0 中使用 HIVE-25320移除



