Hive 配置单元插入覆盖分区表向单个缩减器发送数据

Hive 配置单元插入覆盖分区表向单个缩减器发送数据,hive,mapreduce,Hive,Mapreduce,我有一个非分区表SRC。我将目标表DST划分为日期字段action_dt。我想将数据从SRC加载到DST中,并通过action_dt对其进行分区 在加载时,SRC表中只有一个动作的3000万条记录,例如20170701。我使用以下查询进行插入: SET mapred.max.split.size=268435456; SET mapred.output.compression.type=BLOCK; SET mapred.output.compression.codec=org.apache.h

我有一个非分区表SRC。我将目标表DST划分为日期字段action_dt。我想将数据从SRC加载到DST中,并通过action_dt对其进行分区

在加载时,SRC表中只有一个动作的3000万条记录,例如20170701。我使用以下查询进行插入:

SET mapred.max.split.size=268435456;
SET mapred.output.compression.type=BLOCK;
SET mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;
SET hive.exec.compress.output=true;
SET parquet.compression=SNAPPY;
SET hive.merge.size.per.task=268435456;
SET hive.merge.smallfiles.avgsize=268435456;
SET hive.merge.mapfiles=true;
SET hive.merge.mapredfiles=true;
SET hive.exec.dynamic.partition=true;
SET hive.exec.dynamic.partition.mode=nonstrict;
SET mapreduce.reduce.memory.mb = 16384;
SET mapreduce.reduce.java.opts=-Djava.net.preferIPv4Stack=true -Xmx12g;

SET hive.execution.engine=tez;
SET hive.exec.reducers.bytes.per.reducer=104857600;

INSERT OVERWRITE TABLE DST partition(action_dt)
SELECT col1, col2, col3, action_dt FROM SRC;
SRC表是gzip压缩的,大约有80个大小为80-100MB的文件。执行上述查询时,虽然启动了大约70个reducer,但在10秒内执行了69个reducer,但第70个reducer正在处理所有数据

为什么会这样?是因为它认识到数据属于一项“行动”20170701吗?是否有一种方法可以拆分此数据,以便多个还原器可以处理此数据?我尝试使用DISTRIBUTE BY,但没有成功


感谢您的反馈。谢谢。

你们有为这张桌子收集的统计数据吗?i、 e.是否运行ANALYZE TABLE语句?删除merge.mapfiles属性,您将完全没有缩减器-假设TextFile format+GZip为80个不可拆分文件,则对80个不可拆分文件执行简单的INSERT-SELECT查询需要80个映射器来生成80个目标文件。尝试使用EXPLAIN命令(带属性和不带属性)…请注意,avgsize属性是在编译时使用的,它们很容易被从压缩文件大小导出的大小估计值所混淆…@Shubhangi是的,我也尝试过使用ANALYSE TABLE语句。@SamsonScharfrichter我删除了merge.mapfiles属性。由于SRC表是Text+GZIP格式,它仍然生成X个减缩器。我认为原因可能是它试图“减少”与SRC表中可用的一个动作dt值相关的所有数据。这有意义吗?我现在仍然被这个问题困扰着。你们有为这个表收集的统计数据吗?i、 e.是否运行ANALYZE TABLE语句?删除merge.mapfiles属性,您将完全没有缩减器-假设TextFile format+GZip为80个不可拆分文件,则对80个不可拆分文件执行简单的INSERT-SELECT查询需要80个映射器来生成80个目标文件。尝试使用EXPLAIN命令(带属性和不带属性)…请注意,avgsize属性是在编译时使用的,它们很容易被从压缩文件大小导出的大小估计值所混淆…@Shubhangi是的,我也尝试过使用ANALYSE TABLE语句。@SamsonScharfrichter我删除了merge.mapfiles属性。由于SRC表是Text+GZIP格式,它仍然生成X个减缩器。我认为原因可能是它试图“减少”与SRC表中可用的一个动作dt值相关的所有数据。这有意义吗?我现在仍然被这个问题困扰着。