Pig:完成 UDF 后执行任务

Posted

技术标签:

【中文标题】Pig:完成 UDF 后执行任务【英文标题】:Pig: Perform task on completion of 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 何时完成运行。如何在猪身上做到这一点?

【问题讨论】:

【参考方案1】:

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

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

http://pig.apache.org/docs/r0.10.0/udf.html#load-store-functions

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于Pig:完成 UDF 后执行任务的主要内容,如果未能解决你的问题,请参考以下文章

在 Pig 中只执行一次 UDF

Pig 中的 Udfs 共享上下文

在 PIG UDF 中调试

显示结果中的 Pig Udf

将多个参数传递给 Pig Filter UDF

JAVA 错误 1070 中的 PIG UDF