This happens when you add async ops faster than they can be
processed. The easiest thing to do is occasionally do a get() on the
future emitted from a set. Something like this:
int i=0;
for(Something s : giganticIterable) {
Future<Boolean> f=mc.set(s.getKey(), s);
if(++i % 1000 == 0) {
f.get();
}
}
That'll slow down the load, of course, but it ensures you don't
overflow the op queues by draining it after every 1,000 ops.