gpt4 book ai didi

mapreduce - GridGain:带有节点本地数据处理的 MapReduce?

转载 作者:行者123 更新时间:2023-12-02 11:27:44 30 4
gpt4 key购买 nike

我正在尝试对大型分布式数据集执行一些数值计算。该算法非常适合 MapReduce 模型,具有以下附加属性:与输入数据相比,映射步骤的输出尺寸较小。数据可以被视为只读,并且静态分布在节点上(故障转移时的重新平衡除外)。请注意,这与标准字数示例有些相反,在标准字数示例中,输入数据被发送到执行映射步骤的节点。

这意味着映射步骤应在所有节点上并行执行,处理每个节点的本地数据,而将映射步骤的输出发送到一个节点以进行化简步骤是可以接受的。

使用 GridGain 实现此目的的最佳方法是什么?

在 GridGain 的早期版本中,GridCache/GridCacheProjection 接口(interface)上似乎有一个 reduce(..) 方法,但这是不再存在。有没有替代品?我正在考虑一种机制,它采用 map 闭包并在每个数据上分布恰好一次执行它,同时避免通过网络复制任何输入数据。

到目前为止我提出的(有点手动的)方法如下:

public class GridBroadcastCountDemo {

public static void main(String[] args) throws GridException {
try (Grid grid = GridGain.start(CONFIG_FILE)) {

GridFuture<Collection<Integer>> future = grid.forRemotes().compute().broadcast(new GridCallable<Integer>() {
@Override
public Integer call() throws Exception {
GridCache<Integer, float[]> cache = grid.cache(CACHE_NAME);
int count = 0;
for (float[] array : cache.primaryValues()) {
count += array.length;
}
return count;
}
});

int totalCount = 0;
for (int count : future.get()) {
totalCount += count;
}
// expect size of input data
System.out.println(totalCount);
}
}
}

但是,不能保证使用此方法每个数据都被恰好处理一次。例如。当执行 GridCallable 时发生重新平衡时,部分数据可能会被处理零次或多次。

最佳答案

GridGain开源(现在是Apache Ignite)有ComputeTask API,它同时具有map()和reduce()方法。如果您正在寻找一个reduce()方法,那么ComputeTask绝对是适合您的API。

目前您的实现情况良好。 Apache Ignite 添加了一项功能,在迁移完全完成之前,节点不会被视为主要节点。应该很快就会到来。

关于mapreduce - GridGain:带有节点本地数据处理的 MapReduce?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28603466/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com