1

对于我的用例,我有更多关于 CustomWritable 必要性的设计问题:

所以我有一个文档对,我将通过管道处理并将中间和最终数据写入 HDFS。我的密钥将类似于 ObjectId - DocId - Pair - Lang。我不明白为什么/如果我需要一个 CustomWritable 这个用例。我想如果我没有钥匙,我需要一个 CustomWritable 吗?此外,当我在 Reducer 中将数据写入 HDFS 时,我使用了自定义分区器。那么,这会消除我对自定义可写文件的需求吗?

我不确定我是否了解需要自定义可写权限的概念。有人可以指出我正确的方向吗?

4

2 回答 2

1

可写可用于反序列化对象。例如,日志条目可以包含时间戳、用户 IP 和浏览器代理。因此,您应该为标识此条目的键实现自己的 WritableComparable,并且您应该实现一个实现 Writable 的值类,该类可以读取和写入日志条目中的属性。
这些序列化只是将数据从二进制格式获取到对象的便捷方式。像 HBase 这样的一些框架仍然需要字节数组来保存数据。因此,您自己传输它并弄乱您的代码会产生很多开销。

于 2011-04-13T10:55:56.053 回答
0

托马斯的回答解释了一点。为时已晚,但我想为潜在读者添加以下内容:

Partitioner 只在 map 和 reduce 阶段之间发挥作用,在从 reducer 到输出文件的写入过程中没有任何作用。

我不相信在大多数情况下将中间数据写入 hdfs 是必需的,尽管有一些黑客可以用来做同样的事情。

当您从 reducer 写入 hdfs 时,键将自动排序,每个 reducer 将写入一个单独的文件。根据他们的compareTo方法,对键进行排序。因此,如果您想基于多个变量进行排序,请选择扩展的自定义键类WritableComparable,并实现write,readFieldscompareTo方法。您现在可以根据compareTo实现控制键的排序方式

于 2016-02-11T06:18:01.287 回答