我想从另一个hive表插入一个分区的hive表。数据将在目标表中的单个分区中进行。问题是所有减速器都完成得非常快,但其中一个减速器需要很长时间,因为所有的工作都是针对单个减速器。
我想找到一种方法来将作品平均分配给所有减速器。有没有办法这样做?如何提高插入覆盖的性能?
来源表DDL:
CREATE EXTERNAL TABLE employee ( id INT,first_name String,latst_name String,email String,gender String) STORED AS TEXTFILE '/emp/data'
TARGET TABLE 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;
数据将在一个分区中进行。
请在这种情况下让我知道如何改善表现? 有没有办法在所有Reducer之间平均分配行?
答案 0 :(得分:2)
我认为你在insert overwrite
查询中没有进行JOINS或其他重大转换,并且在插入过程中确实发生了偏斜。因为如果你那么问题应该不是关于插入。
尝试将distribute by batch_id
添加到您的插入查询并重新运行。如果仍然倾斜运行,请检查您的数据。某些特定batch_id
的数据太多,或者您可能有很多空值。如何处理偏斜数据有不同的方法。其中之一是过滤掉倾斜的键并单独加载它们。检查作业跟踪器上长时间运行的reducer日志,它将为您提供有关问题所在位置的更多信息。