gpt4 book ai didi

hadoop - pig 与大表倾斜连接导致 "Split metadata size exceeded 10000000"

转载 作者:可可西里 更新时间:2023-11-01 14:20:04 24 4
gpt4 key购买 nike

我们在一个小的(16M 行)不同表和一个大的(6B 行)倾斜表之间有一个 pig 连接。常规连接在 2 小时内完成(经过一些调整)。我们尝试使用 skewed 并能够将性能提高到 20 分钟。

但是,当我们尝试更大的倾斜表(19B 行)时,我们从 SAMPLER 作业中得到这条消息:

Split metadata size exceeded 10000000. Aborting job job_201305151351_21573 [ScriptRunner]
at org.apache.hadoop.mapreduce.split.SplitMetaInfoReader.readSplitMetaInfo(SplitMetaInfoReader.java:48)
at org.apache.hadoop.mapred.JobInProgress.createSplits(JobInProgress.java:817) [ScriptRunner]

每次我们尝试 using skewed 时,这都是可重现的,而当我们使用常规连接时不会发生。

我们尝试设置 mapreduce.jobtracker.split.metainfo.maxsize=-1,我们可以在 job.xml 文件中看到它,但它没有改变任何东西!

这里发生了什么?这是通过 using skewed 创建的分布样本的错误吗?为什么将参数更改为 -1 没有帮助?

最佳答案

1MB的小表小到内存都装不下,试试replicated join。复制连接只是 Map,不会像其他类型的连接那样导致 Reduce 阶段,因此不受连接键倾斜的影响。应该很快。

big = LOAD 'big_data' AS (b1,b2,b3);
tiny = LOAD 'tiny_data' AS (t1,t2,t3);
mini = LOAD 'mini_data' AS (m1,m2,m3);
C = JOIN big BY b1, tiny BY t1, mini BY m1 USING 'replicated';

大表总是在语句的第一个。

更新 1:如果原始形式的小表不适合内存,那么作为解决方法,您需要将小表分区为足够小以适合内存的分区,然后将相同的分区应用于大表,希望您可以将相同的分区算法添加到创建大表的系统中,这样您就不会浪费时间重新分区它。分区后可以使用replicated join,但是需要对每个分区分别运行pig脚本。

关于hadoop - pig 与大表倾斜连接导致 "Split metadata size exceeded 10000000",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17163112/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com