Hadoop 清管器:完成UDF时执行任务

Hadoop 清管器:完成UDF时执行任务,hadoop,apache-pig,Hadoop,Apache Pig,在Hadoop中,我有一个类似这样的缩减器,用于将以前的映射器中的数据转换为一系列非InputFormat兼容类型的文件 protected void setup(Context context) { LocalDatabase ld = new LocalDatabase("localFilePath"); } protected void reduce(BytesWritable key, Text value, Context context) { ld.addValue

在Hadoop中,我有一个类似这样的缩减器,用于将以前的映射器中的数据转换为一系列非
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何时完成运行。如何在pig中实现这一点?

我想说,您需要编写一个UDF,包装您自己的自定义OutputFormat-然后您就可以使用输出格式的
RecordWriter.close()
方法结束

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


如果希望在UDF末尾运行某些内容,请使用finish()调用。UDF处理完所有记录后,将调用此函数。它将按映射器或reducer调用一次,与reducer中的清理调用相同