这个问题可以通过简单的测试重现。
“Pig”的脚本如下:
SET pig.noSplitCombination true;
dataIn = LOAD 'input/Test';
DEFINE macro `TestScript` input('DummyInput.txt') output('A.csv', 'B.csv', 'C.csv', 'D.csv', 'E.csv') ship('TestScript');
dataOut = STREAM dataIn through macro;
STORE dataOut INTO 'output/Test';
实际的脚本是一个复杂的r程序,但这里有一个简单的“testscript”,它再现了问题,不需要r:
# Ignore the input coming from the 'DummyInput.txt' file
# For now just create some output data files
echo "File A" > A.csv
echo "File B" > B.csv
echo "File C" > C.csv
echo "File D" > D.csv
echo "File E" > E.csv
输入'dummyinput.txt'现在是一些伪数据。
Record1
Record2
Record3
对于测试,我使用以下脚本在hdfs中加载虚拟数据。这将产生200个输入文件。
for i in {0..199}
do
hadoop fs -put DummyInput.txt input/Test/Input$i.txt
done
当我运行pig作业时,它不会出错。200个Map器按预期运行。但是,我希望在不同的hdfs目录中看到200个文件。相反,我发现一些输出文件丢失了:
1 200 1400 output/Test/B.csv
1 200 1400 output/Test/C.csv
1 189 1295 output/Test/D.csv
1 159 1078 output/Test/E.csv
根“output/test”有200个文件,这是正确的。文件夹“b.csv”和“c.csv”也有200个文件。但是,文件夹“d.csv”和“e.csv”缺少文件。
我们已经查看了日志,但找不到任何指向为什么本地输出文件没有从数据节点复制到hdfs的信息。
暂无答案!
目前还没有任何答案,快来回答吧!