mapreduce - Hazelcast:确保相关对象物理存储在同一成员上

标签 mapreduce distributed-computing hazelcast

我有 3 个分布式映射,其中对象具有一个共享属性 - identifier。此标识符用作一个映射的键,而另外 2 个映射则使用集群范围的全局 ID 作为键。还有一个 Map-Reduce 作业,它结合此 identifier 对象相关的内容,并将结果存储到另一个映射中。其想法是最大限度地减少集群间网络流量,因此作业仅与正在执行的一个成员进行通信。

问题是:我是否需要执行任何额外操作来确保不同分布式映射的分区物理存储在一个成员上?

最佳答案

PartitionAware将为您做这件事。

如果要保证三个对象驻留在同一分区中,它们的关键类应该实现 PartitionAware 并从 getPartitionKey() 方法返回相同的结果。

例如,让同一家庭的所有成员都在一起:

public class Person implements PartitionAware, Serializable {
    private String firstName;
    private String lastName;

    public Object getPartitionKey() {
        return this.lastName;
    }

您可以使用hazelcastInstance.getPartitionService().getPartition(key).getPartitionId()验证分区

分区 0 包含 map X、 map Y、 map Z 中每个 map 的第一部分。分区 1 包含下一部分等。

关于mapreduce - Hazelcast:确保相关对象物理存储在同一成员上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46222195/

相关文章:

java - 如何锁定两张完整的 Hazelcast map ?

caching - Redis 将数据存储在哪里

hadoop MultipleOutputs 到绝对路径,但其他尝试已创建文件

apache - 什么是Amazon S3的开源替代品?

java - 在本地环境中模拟客户端服务器的行为,但是所有数据去了哪里?

arrays - Erlang:阵列上的分布式工作

java - 对于 Hazelcast 来说,一张大 map 和多张小 map 哪个更好?

hadoop - oozie 中的 org.apache.hadoop.mapred.lib.MultipleOutputs.addNamedOutput()

hadoop - 如果数据量很大,hadoop 如何在本地存储 map 输出?

stored-procedures - MongoDB 存储过程等价物