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 后执行任务的主要内容,如果未能解决你的问题,请参考以下文章