Hadoop PIG ouput不使用并行运算符拆分为多个文件
看来我遗漏了什么。“我的数据”上的减缩器数量在HDFS中创建了如此多的文件,但我的数据并没有拆分为多个文件。我注意到,如果我对一个按顺序排列的键执行Hadoop PIG ouput不使用并行运算符拆分为多个文件,hadoop,parallel-processing,apache-pig,reducers,Hadoop,Parallel Processing,Apache Pig,Reducers,看来我遗漏了什么。“我的数据”上的减缩器数量在HDFS中创建了如此多的文件,但我的数据并没有拆分为多个文件。我注意到,如果我对一个按顺序排列的键执行group by,它可以正常工作,就像下面的数据根据键很好地分割成两个文件: 1 hello 2 bla 1 hi 2 works 2 end 但这些数据并不分离: 1 hello 3 bla 1 hi 3 works 3 end 我使用的代码对其中一个运行良好,而对
group by
,它可以正常工作,就像下面的数据根据键很好地分割成两个文件:
1 hello
2 bla
1 hi
2 works
2 end
但这些数据并不分离:
1 hello
3 bla
1 hi
3 works
3 end
我使用的代码对其中一个运行良好,而对另一个运行不好
InputData = LOAD 'above_data.txt';
GroupReq = GROUP InputData BY $0 PARALLEL 2;
FinalOutput = FOREACH GroupReq GENERATE flatten(InputData);
STORE FinalOutput INTO 'output/GroupReq' USING PigStorage ();
上面的代码创建了两个输出部件文件,但在第一次输入时,它很好地分割了数据,并将键1
放在part-r-00000
中,将键2
放在part-r-00001
中。但对于第二个输入,它创建了两个部分文件,但所有数据都以part-r-00000
结尾。我缺少的是什么,我能做些什么来强制数据根据唯一键分割成多个输出文件
注意:对于第二个输入,如果我使用
PARALLEL 3
(3个减速机),它将创建三个部件文件,并在part-0
中添加键1
的所有数据,在part-3
文件中添加键3
的所有数据。我觉得这种行为很奇怪。顺便说一句,我使用的是Cloudera CDH3B4 这是因为键所指向的减缩器的数量被确定为哈希(键)%reducersCount
。如果密钥是整数,散列(key)=key
。当您有更多的数据时,它们将或多或少地均匀分布,因此您不必担心。这是因为一个键所指向的减缩器的数量被确定为哈希(键)%reducersCount
。如果密钥是整数,散列(key)=key
。当您有更多的数据时,它们将或多或少地均匀分布,因此您不必担心