在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运行完毕的时间。怎么能在猪身上做到这一点?
答案 0 :(得分:2)
我会说你需要编写一个StoreFunc
UDF,包装你自己的自定义OutputFormat - 然后你就可以在输出格式的RecordWriter.close()
方法中关闭。
这将为每个reducer在HDFS中创建一个数据库,因此,如果您希望将所有内容都放在一个文件中,则需要使用单个reducer运行或运行辅助步骤将数据库合并在一起。
答案 1 :(得分:1)
如果您希望在UDF结束时运行某些内容,请使用finish()调用。这将在UDF处理完所有记录后调用。每个mapper或reducer将调用一次,与reducer中的清理调用相同。