【发布时间】:2014-05-04 00:46:46
【问题描述】:
我正在实现自定义 MapReduce(用于学校,因此请不要建议使用 Hadoop 或现有解决方案),我遇到的问题是在 Map 和 Reduce 阶段之间“存储”中间数据。
我正在考虑使用 ConcurrentHashMap,CHM_key == Map's_Key,并将其值包含在 Map's_Key 上关联的所有 Map's_values 的 Arraylist 中,因此 reduce 可以简单地聚合这些值。
但是,我想不出一种方法可以在不锁定整个集合的情况下以原子方式改变 CHM 的 Arraylist 实例。
我知道这个集合实现了一个 putifAbsent 和一个 replace 方法;实际上 putifAbsent 很有用,因为如果密钥不存在,我只需放置一个新的 ArrayList 并完成。
但是...替换 Arraylist 并不是那么简单,因为我必须获取它,添加新值并替换它,如果不锁定整个集合,这是无法原子完成的...
【问题讨论】:
标签: java arraylist concurrency mapreduce