我正在 Hadoop 中编写一个 Reducer,我正在使用它的输入值来构建一个对元素列表进行编码的字节数组。我在其中写入数据的缓冲区的大小取决于减速器接收到的值的数量。提前在内存中分配它的大小会很有效,但是如果不使用“foreach”语句对它们进行迭代,我不知道有多少值。
Hadoop 输出是一个 HBase 表。
更新: 使用映射器处理我的数据后,reducer 键具有幂律分布。这意味着只有少数几个键有很多值(最多 9000),但大多数只有几个值。我注意到通过分配一个 4096 字节的缓冲区,97.73% 的值适合它。对于其余的人,我可以尝试重新分配具有双倍容量的缓冲区,直到所有值都适合它。对于我的测试用例,这可以通过在最坏的情况下重新分配内存 6 次来完成,即一个键有 9000 个值。