Pig:完成UDF后执行任务

时间:2013-03-22 05:07:14

标签: hadoop apache-pig

在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运行完毕的时间。怎么能在猪身上做到这一点?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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