【问题标题】:Remove files with Pig script after merging them合并后使用 Pig 脚本删除文件
【发布时间】:2016-07-18 01:30:14
【问题描述】:

我正在尝试合并大量小文件(200k+),并想出了以下超级简单的 Pig 代码:

Files = LOAD 'hdfs/input/path' using PigStorage();
store Files into 'hdfs/output/path' using PigStorage();

Pig 完成合并后,有没有办法删除输入文件?我想检查文件是否已写入并且不为空(即 0 字节)。我不能简单地删除输入路径中的所有内容,因为在此期间可能已插入新文件,因此理想情况下我只会删除 Files 变量中的文件。

【问题讨论】:

    标签: apache-pig hdfs


    【解决方案1】:

    我猜用 Pig 是不可能的。相反,您可以做的是将 -tagsource 与 LOAD 语句一起使用并获取文件名并将其存储在某处。然后使用 HDFS FileSystem API 并从存储的文件中读取来删除那些被 pig 合并的文件。

    A = LOAD '/path/' using PigStorage('delimiter','-tagsource'); 
    

    【讨论】:

      【解决方案2】:

      您应该能够在 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'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-07-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-03
        • 1970-01-01
        相关资源
        最近更新 更多