Java 如何窥视Hazelcast喷射顶点的工作情况?

Java 如何窥视Hazelcast喷射顶点的工作情况?,java,directed-acyclic-graphs,hazelcast-jet,Java,Directed Acyclic Graphs,Hazelcast Jet,我正试图将几周前我在v0.4中编写的hazelcast Jet 0.3 DAG系统返工,作为将其从批处理改为流处理的第一步。有趣的是,突然间我遇到了一些奇怪的行为,我不能确定顶点是否按预期工作。试图了解正在发生的事情,我找不到一个选项,如何窥视每个顶点的内部工作。是否有一种方法可以至少从中获取一些错误消息 为了隔离这个问题,我尝试将它简化为一个非常简单的从列表中读取,将它映射到一个映射写入映射DAG。但仍然没有成功地得到任何东西 下面是我的哑巴例子,也许我犯了一个很简单的错误,一个更有知识的人会

我正试图将几周前我在v0.4中编写的hazelcast Jet 0.3 DAG系统返工,作为将其从批处理改为流处理的第一步。有趣的是,突然间我遇到了一些奇怪的行为,我不能确定顶点是否按预期工作。试图了解正在发生的事情,我找不到一个选项,如何窥视每个顶点的内部工作。是否有一种方法可以至少从中获取一些错误消息

为了隔离这个问题,我尝试将它简化为一个非常简单的从列表中读取,将它映射到一个映射写入映射DAG。但仍然没有成功地得到任何东西

下面是我的哑巴例子,也许我犯了一个很简单的错误,一个更有知识的人会马上看到

出版商:

分析仪:

听众:


数据生成工作正常,一切正常,直到DAG接管。。。但没有错误消息或来自DAG的任何信息。有什么建议吗?

这是您的代码,经过稍微消毒后,在我这方面效果良好:

public class Main {
    public static void main(String[] args) throws Exception {
        JetInstance jet = Jet.newJetInstance();
        try {
            HazelcastInstance hz = jet.getHazelcastInstance();
            ILogger logger = hz.getLoggingService().getLogger("a");

            // every second via executorservice:
            final IStreamMap<Long, List<byte[]>> data = jet.getMap("data");
            List<byte[]> myByteArray = asList(new byte[1], new byte[2]);
            IAtomicLong keyGen = hz.getAtomicLong("key");
            Long key = keyGen.getAndIncrement();
            data.set(key, myByteArray);

            String stringKey = key.toString();
            hz.getList(stringKey).addAll((List<byte[]>) jet.getMap("data").get(key));
            jet.getMap("data").remove(key);
            logger.severe(String.format("List %s has size: %d", key, jet.getList(stringKey).size()));

            hz.getMap("result").addEntryListener((EntryAddedListener<Long, byte[]>)
                    (EntryEvent<Long, byte[]> entryEvent) -> logger.severe(String.format(
                            "Got result: %d at %d", entryEvent.getValue().length, System.currentTimeMillis())),
                    true);

            DAG dag = new DAG();
            Vertex sourceDataMap = dag.newVertex("sourceDataMap", readList(stringKey)).localParallelism(1);
            Vertex parseByteArrayToMap = dag.newVertex("parseByteArrayToMap", map(
                    (byte[] e) -> entry(randomUUID(), e)));
            Vertex sinkIntoResultMap = dag.newVertex("sinkIntoResultMap", writeMap("result"));

            dag.edge(between(sourceDataMap, parseByteArrayToMap))
               .edge(between(parseByteArrayToMap, sinkIntoResultMap));

            jet.newJob(dag).execute().get();
            Thread.sleep(1000);
        } finally {
            Jet.shutdownAll();
        }
    }
}

你能给我们一个能证明你的问题的例子吗?您还可以检查DiagnosticProcessors类,它有您描述的工具。您有一个lambda,它指的是jet。JetInstance ins不可序列化,因此不能用作lambda的一部分。如果你想生成唯一的ID,你可以使用类似UUID.randomUUID的东西。我试图从你发布的DAG执行一个作业,它在创建顶点的行上抛出一个IllegalArgumentException。因此,它失败得又快又响,甚至在有机会开始一项工作之前……在更改为randomUUID之后,我得到了条目侦听器的日志输出。好吧,这很奇怪,我没有得到IllegalArgumentException。这正是我要找的。非常感谢。
jet.getList(key.toString()).addAll((List<byte[]>) jet.getMap("data").get(key));
jet.getMap("data").remove(key);
logger.debug("List {} has size: {}", key, jet.getList(key.toString()).size());

final Vertex sourceDataMap = this.newVertex("sourceDataMap", readList(key.toString())).localParallelism(1);
final Vertex parseByteArrayToMap = this.newVertex("parseByteArrayToMap", map(
    (byte[] e) ->  new AbstractMap.SimpleEntry<>(jet.getHazelcastInstance().getAtomicLong("counter").getAndIncrement(), e)));
final Vertex sinkIntoResultMap = this.newVertex("sinkIntoResultMap", writeMap("result"));

this.edge(between(sourceDataMap, parseByteArrayToMap))
    .edge(between(parseByteArrayToMap,  sinkIntoResultMap));
jet.getMap("result").addEntryListener((EntryAddedListener<Long, byte[]>)
       (EntryEvent<Long, byte[]> entryEvent)
           -> logger.debug("Got result: {} at {}",entryEvent.getValue().length, System.currentTimeMillis())
       , true);
public class Main {
    public static void main(String[] args) throws Exception {
        JetInstance jet = Jet.newJetInstance();
        try {
            HazelcastInstance hz = jet.getHazelcastInstance();
            ILogger logger = hz.getLoggingService().getLogger("a");

            // every second via executorservice:
            final IStreamMap<Long, List<byte[]>> data = jet.getMap("data");
            List<byte[]> myByteArray = asList(new byte[1], new byte[2]);
            IAtomicLong keyGen = hz.getAtomicLong("key");
            Long key = keyGen.getAndIncrement();
            data.set(key, myByteArray);

            String stringKey = key.toString();
            hz.getList(stringKey).addAll((List<byte[]>) jet.getMap("data").get(key));
            jet.getMap("data").remove(key);
            logger.severe(String.format("List %s has size: %d", key, jet.getList(stringKey).size()));

            hz.getMap("result").addEntryListener((EntryAddedListener<Long, byte[]>)
                    (EntryEvent<Long, byte[]> entryEvent) -> logger.severe(String.format(
                            "Got result: %d at %d", entryEvent.getValue().length, System.currentTimeMillis())),
                    true);

            DAG dag = new DAG();
            Vertex sourceDataMap = dag.newVertex("sourceDataMap", readList(stringKey)).localParallelism(1);
            Vertex parseByteArrayToMap = dag.newVertex("parseByteArrayToMap", map(
                    (byte[] e) -> entry(randomUUID(), e)));
            Vertex sinkIntoResultMap = dag.newVertex("sinkIntoResultMap", writeMap("result"));

            dag.edge(between(sourceDataMap, parseByteArrayToMap))
               .edge(between(parseByteArrayToMap, sinkIntoResultMap));

            jet.newJob(dag).execute().get();
            Thread.sleep(1000);
        } finally {
            Jet.shutdownAll();
        }
    }
}
SEVERE: [192.168.5.12]:5701 [jet] [0.4-SNAPSHOT] [3.8.2] List 0 has size: 2
SEVERE: [192.168.5.12]:5701 [jet] [0.4-SNAPSHOT] [3.8.2] Got result: 2 at 1498822322228
SEVERE: [192.168.5.12]:5701 [jet] [0.4-SNAPSHOT] [3.8.2] Got result: 1 at 1498822322228