0

我创建了一个 map reduce 作业来获取某个位置的员工数量。我正在使用 hazelcast 3.6.3。每个员工都有姓名和地址。

我已将我的代码添加到以下 git 存储库。 https://github.com/adasari/hazelcast-demo

例外 :

java.util.concurrent.ExecutionException:java.lang.ClassCastException:com.hazelcast.mapreduce.aggregation.impl.DistinctValuesAggregation$SimpleEntry 无法在 com.hazelcast.mapreduce.impl.task 处转换为 com.hazelcast.query.impl.Extractable .TrackableJobFuture.setResult(TrackableJobFuture.java:68) 在 com.hazelcast.mapreduce.impl.task.JobSupervisor.notifyRemoteException(JobSupervisor.java:156) 在 com.hazelcast.mapreduce.impl.operation.NotifyRemoteExceptionOperation.run(NotifyRemoteExceptionOperation.java :54) 在 com.hazelcast.spi.impl.operationservice.impl.OperationRunnerImpl.run(OperationRunnerImpl.java:172) 在 com.hazelcast.spi.impl.operationservice.impl.OperationRunnerImpl.run(OperationRunnerImpl.java:393) 在com.hazelcast.spi.impl.operationexecutor.classic.OperationThread.processPacket(OperationThread.java:184) 在 com.hazelcast.spi.impl.operationexecutor.classic.OperationThread.process(OperationThread.java:137) 在 com.hazelcast.spi.impl.operationexecutor.classic.OperationThread.doRun(OperationThread.java:124) 在 com .hazelcast.spi.impl.operationexecutor.classic.OperationThread.run(OperationThread.java:99) 引起:java.lang.ClassCastException:com.hazelcast.mapreduce.aggregation.impl.DistinctValuesAggregation$SimpleEntry 不能转换为 com.hazelcast .query.impl.Extractable 在 com.hazelcast.query.impl.predicates.AbstractPredicate.readAttributeValue(AbstractPredicate.java:129) 在 com.hazelcast.query.impl.predicates.AbstractPredicate.apply(AbstractPredicate.java:55)operationexecutor.classic.OperationThread.doRun(OperationThread.java:124) at com.hazelcast.spi.impl.operationexecutor.classic.OperationThread.run(OperationThread.java:99) 原因:java.lang.ClassCastException: com.hazelcast。 mapreduce.aggregation.impl.DistinctValuesAggregation$SimpleEntry 不能在 com.hazelcast.query.impl.predicates.AbstractPredicate.readAttributeValue(AbstractPredicate.java:129) 在 com.hazelcast.query 上转换为 com.hazelcast.query.impl.Extractable。 impl.predicates.AbstractPredicate.apply(AbstractPredicate.java:55)operationexecutor.classic.OperationThread.doRun(OperationThread.java:124) at com.hazelcast.spi.impl.operationexecutor.classic.OperationThread.run(OperationThread.java:99) 原因:java.lang.ClassCastException: com.hazelcast。 mapreduce.aggregation.impl.DistinctValuesAggregation$SimpleEntry 不能在 com.hazelcast.query.impl.predicates.AbstractPredicate.readAttributeValue(AbstractPredicate.java:129) 在 com.hazelcast.query 上转换为 com.hazelcast.query.impl.Extractable。 impl.predicates.AbstractPredicate.apply(AbstractPredicate.java:55)DistinctValuesAggregation$SimpleEntry 无法在 com.hazelcast.query.impl.predicates.AbstractPredicate 的 com.hazelcast.query.impl.predicates.AbstractPredicate.readAttributeValue(AbstractPredicate.java:129) 处转换​​为 com.hazelcast.query.impl.Extractable。应用(AbstractPredicate.java:55)DistinctValuesAggregation$SimpleEntry 无法在 com.hazelcast.query.impl.predicates.AbstractPredicate 的 com.hazelcast.query.impl.predicates.AbstractPredicate.readAttributeValue(AbstractPredicate.java:129) 处转换​​为 com.hazelcast.query.impl.Extractable。应用(AbstractPredicate.java:55)

你能指出我的问题吗?

谢谢。

4

3 回答 3

0

我没有在 MapReduce 上工作过,但下面是我在查看/执行代码时的观察。

  1. 它失败的地方是一个不同SimpleEntry的类,它的内部类DistinctValuesAggregation没有实现Extractable
  2. Hazelcast( #7398 ) 中已经存在缺陷,但它说在 3.6.1 中关闭,所以不妨在 Git 中心跟进它们。
  3. 我发现当您仅使用单个节点运行集群时,代码运行良好。所以我怀疑上述缺陷会影响多个节点的聚合。

    HazelcastInstance hazelcastInstance = buildCluster(1);
    
于 2016-08-09T12:32:12.383 回答
0

以下操作解决了问题 - 1. DistinctMapper 实现 DataSerializable 2. SimpleEntry 扩展 QueryableEntry

于 2016-08-10T11:21:43.547 回答
0

不完全确定您在寻找什么或您正在尝试做什么(查看代码),但您的问题在这里:

引起:java.lang.ClassCastException:com.hazelcast.mapreduce.aggregation.impl.DistinctValuesAggregation$SimpleEntry 不能转换为 com.hazelcast.query.impl.Extractable

所以你必须用你的 SimpleEntry 类来实现 Extractable 接口。

于 2016-08-08T20:09:21.480 回答