Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 如何强制配置单元在insert OVERRIDE中将行平均分布到分区表中,从简化程序中的另一个表开始,以提高性能_Performance_Hive_Hiveql - Fatal编程技术网

Performance 如何强制配置单元在insert OVERRIDE中将行平均分布到分区表中,从简化程序中的另一个表开始,以提高性能

Performance 如何强制配置单元在insert OVERRIDE中将行平均分布到分区表中,从简化程序中的另一个表开始,以提高性能,performance,hive,hiveql,Performance,Hive,Hiveql,我想从另一个配置单元表插入分区配置单元表。数据在目标表的单个分区中传输。问题是所有减速器都完成得非常快,但其中一个减速器需要很长时间,因为所有的工作都将由单个减速器完成 我想找到一种方法,使功在所有减速机中平均分配。有什么办法吗?如何提高插入覆盖的性能 源表DDL: CREATE EXTERNAL TABLE employee ( id INT,first_name String,latst_name String,email String,gender String) STORED AS T

我想从另一个配置单元表插入分区配置单元表。数据在目标表的单个分区中传输。问题是所有减速器都完成得非常快,但其中一个减速器需要很长时间,因为所有的工作都将由单个减速器完成

我想找到一种方法,使功在所有减速机中平均分配。有什么办法吗?如何提高插入覆盖的性能

源表DDL:

 CREATE EXTERNAL TABLE employee ( id INT,first_name String,latst_name String,email String,gender String) STORED AS TEXTFILE '/emp/data'
目标表DDL:

 CREATE EXTERNAL TABLE employee_stage ( id INT,first_name String,latst_name String,email String,gender String) PARTITIONED BY (batch_id bigint) STORED AS ORC LOCATION '/stage/emp/data'
这是数据快照

1   Helen   Perrie  hperrie0@lulu.com   Female
2   Rafaelita   Jancso  rjancso1@cdbaby.com Female
3   Letti   Kelley  lkelley2@slideshare.net Female
4   Adela   Dmisek  admisek3@state.gov  Female
5   Lay Reyner  lreyner4@wired.com  Male
6   Robby   Felder  rfelder5@microsoft.com  Male
7   Thayne  Brunton tbrunton6@sun.com   Male
8   Lorrie  Roony   lroony7@oracle.com  Male
9   Hodge   Straun  hstraun8@w3.org Male
10  Gawain  Tomblett    gtomblett9@toplist.cz   Male
11  Carey   Facher  cfachera@ca.gov Male
12  Pamelina    Elijahu pelijahub@goo.ne.jp Female
13  Carmelle    Dabs    cdabsc@bizjournals.com  Female
14  Moore   Baldrick    mbaldrickd@yandex.ru    Male
15  Sheff   Morin   smorine@purevolume.com  Male
16  Zed Eary    zearyf@livejournal.com  Male
17  Angus   Pollastrone apollastroneg@wikispaces.com    Male
18  Moises  Hubach  mhubachh@usnews.com Male
19  Lilllie Beetham lbeethami@diigo.com Female
20  Mortimer    De Hooge    mdehoogej@ucoz.com  Male
源表包含超过100M的记录

这是我正在使用的hql

insert overwrite table employee_stage
PARTITION (batch_id)
SELECT
  id,
  first_name,
  latst_name,
  email,
  gender,
  123456789 as batch_id
FROM employee;
数据在单个分区中传输

在这种情况下,请让我知道如何提高性能?
有没有办法将行平均分布在所有的约简器中?

我想您在
插入覆盖
查询中没有执行连接或其他一些繁重的转换,并且在插入过程中确实发生了倾斜。因为若你们这样做了,那个么问题不应该是关于插入的


尝试将
按批分发\u id
添加到插入查询并重新运行。如果仍然使用skew运行,请检查数据。对于某些特定的
批处理id
数据太多,或者可能有很多空值。对于如何处理倾斜数据,有不同的方法。其中之一是过滤掉倾斜的关键点并分别加载它们。检查job tracker上的长时间运行的减速器日志,它将为您提供有关问题所在的更多信息。

您可以提供其他信息吗?你的桌子是如何分区的?您的数据集是什么?(1)请在原始帖子中添加其他信息并删除注释(2)请提供两个表的DDL以及用于填充目标的代码table@DuduMarkovitz我已经添加了DDL和hql。请查找。此操作中没有还原程序…@DuduMarkovitz当insert OVERRIDE将运行时,它将运行还原程序源表中的整个数据将用于单个批次id。因此,所有行都将用于单个还原程序。我可以强制hive在所有减速器中平均分配行吗?尝试通过其他更均匀分布的键来分配。理想情况下,它应该启动多个reducer,每个reducer将创建自己的文件。还要检查此属性:
set hive.exec.reducers.bytes.per.reducer=67108864以确保每个reducer没有太多数据默认值为1G。将其设置为67108864将创建更多的减速器,从而提高并行性。并检查是否没有导致所有数据在单个减速器上运行的
order by
或其他原因