我正在尝试合并大量的小文件(200k +),并提出了以下超级简单的Pig代码:
Files = LOAD 'hdfs/input/path' using PigStorage();
store Files into 'hdfs/output/path' using PigStorage();
一旦Pig完成合并有没有办法删除输入文件?我想检查文件是否已写入且不为空(即0字节)。我不能简单地删除输入路径中的所有内容,因为在此期间可能已插入新文件,因此理想情况下我只删除Files
变量中的文件。
答案 0 :(得分:0)
对猪来说,我猜不可能。相反,您可以使用-tagsource和LOAD语句并获取文件名并将其存储在某处。然后使用HDFS FileSystem API并从存储的文件中读取以删除由pig合并的那些文件。
A = LOAD '/path/' using PigStorage('delimiter','-tagsource');
答案 1 :(得分:0)
您应该能够在Pig脚本中使用hadoop命令
distcp 'hdfs/input/path' 'hdfs/input/new_path' Files = LOAD 'hdfs/input/new_path' using PigStorage(); STORE Files into 'hdfs/output/path' using PigStorage(); rmdir 'hdfs/input/new_path'