Hadoop 清管器负载(带有拆分和协同组)和映射器数量
我注意到,在加载后,当我在pig脚本中引入“SPLIT”和“COGROUP”语句时,pig作业中的映射器数量增加了一倍。 这是正确的吗?有人知道为什么会这样吗 我使用PigStorage加载数据集:Hadoop 清管器负载(带有拆分和协同组)和映射器数量,hadoop,apache-pig,Hadoop,Apache Pig,我注意到,在加载后,当我在pig脚本中引入“SPLIT”和“COGROUP”语句时,pig作业中的映射器数量增加了一倍。 这是正确的吗?有人知道为什么会这样吗 我使用PigStorage加载数据集: A = LOAD 'test.csv' USING PigStorage; cat test.csv A 123 A 345 B 234 B 123 然后,我使用split将数据集拆分为两个关系(使用过滤器的结果是相同的)。然后我将这两个关系组合成一个,并存储它 SPLIT A
A = LOAD 'test.csv' USING PigStorage;
cat test.csv
A 123
A 345
B 234
B 123
然后,我使用split将数据集拆分为两个关系(使用过滤器的结果是相同的)。然后我将这两个关系组合成一个,并存储它
SPLIT A INTO AA IF $0 == 'A', AB IF $0 == 'B';
CG = COGROUP AA BY $1, AB BY $1;
STORE CG INTO 'cg' USING PigStorage();
当我这样做时,我可以从我的(本地)输出中看到以下几行:
Success!
Job Stats (time in seconds):
JobId Alias Feature Outputs
job_local_0001 A,AA,AB,CG COGROUP /test/cg,
Input(s):
Successfully read records from: "/test/test.csv"
Successfully read records from: "/test/test.csv"
输出:
已成功将记录存储在“/test/cg”中
看起来数据被读取了两次。事实上,我可以看到,在一个集群上,地图绘制者的数量翻了一番
是什么导致了这种行为?有没有办法避免它,或者它有一个很好的理由让我错过 这取决于您如何使用AA、AB以及如何运行脚本
- 如果你写
转储AA;转储AB在脚本或grunt中,将有两个作业
- 如果你写
将AA存储到“…”;将AB存储到“…”代码>在grunt中,也将有两个作业
但是,如果您编写
将AA存储到“…”;将AB存储到“…”在脚本中编写>并使用Pig运行此脚本(而不是在grunt中),将只有一个作业。这将避免双重文件读取
A = LOAD 'test.csv' USING PigStorage(',');
B = GROUP A by $1;
C = FOREACH B {
AA = FILTER A by $0 == 'A';
BB= FILTER A by $0 == 'B';
GENERATE FLATTEN($0), AA,BB;};
dump C;
谢谢你,你让我意识到我没有正确地再现我给出的例子中的问题。加载和拆分后添加COGROUP,然后存储时,映射器的数量会加倍。我将编辑问题以反映它。