【问题标题】:Pig: Perform task on completion of UDFPig:完成 UDF 后执行任务
【发布时间】:2013-03-22 05:07:13
【问题描述】:

在 Hadoop 中,我有一个看起来像这样的 Reducer,用于将数据从先前的映射器转换为一系列非 InputFormat 兼容类型的文件。

protected void setup(Context context) {
    LocalDatabase ld = new LocalDatabase("localFilePath");
}

protected void reduce(BytesWritable key, Text value, Context context) {
    ld.addValue(key, value)
}

protected void cleanup(Context context) {
    saveLocalDatabaseInHDFS(ld);
}

我在 Pig 中重写了我的应用程序,但不知道如何在 Pig UDF 中完成此操作,因为没有清理功能或其他任何东西来表示 UDF 何时完成运行。如何在猪身上做到这一点?

【问题讨论】:

    标签: hadoop apache-pig


    【解决方案1】:

    我会说你需要编写一个 StoreFunc UDF,包装你自己的自定义 OutputFormat - 然后你就可以在输出格式的 RecordWriter.close() 方法中关闭。

    但是,这将为每个 reducer 在 HDFS 中创建一个数据库,因此如果您希望将所有内容都放在一个文件中,则需要使用单个 reducer 运行或运行辅助步骤以将数据库合并在一起。

    【讨论】:

      【解决方案2】:

      如果您希望在 UDF 结束时运行某些内容,请使用 finish() 调用。这将在您的 UDF 处理完所有记录后调用。每个 mapper 或 reducer 都会调用一次,与 reducer 中的清理调用相同。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-22
        • 1970-01-01
        • 2019-02-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多