Java 如何让一个简单的DAG在Hazelcast Jet中工作?

Java 如何让一个简单的DAG在Hazelcast Jet中工作?,java,hazelcast-jet,Java,Hazelcast Jet,当我在hazelcast Jet中处理DAG时,我遇到了一个奇怪的问题。为了检查错误,我完全简化了我的方法:似乎边缘没有按照教程工作 下面的代码非常简单。两个顶点(一个源,一个汇),一条边 源正在从映射中读取,接收器应放入映射中 data.addEntryListener正确地告诉我,另一个应用程序用100个列表(每个列表有25个400字节的对象)填充映射。。。然后什么也没有。地图已满,但dag根本不与之交互 你知道到哪里去找问题吗 package be.andersch.clusterbenc

当我在hazelcast Jet中处理DAG时,我遇到了一个奇怪的问题。为了检查错误,我完全简化了我的方法:似乎边缘没有按照教程工作

下面的代码非常简单。两个顶点(一个源,一个汇),一条边

源正在从映射中读取,接收器应放入映射中

data.addEntryListener正确地告诉我,另一个应用程序用100个列表(每个列表有25个400字节的对象)填充映射。。。然后什么也没有。地图已满,但dag根本不与之交互

你知道到哪里去找问题吗

package be.andersch.clusterbench;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.hazelcast.config.Config;
import com.hazelcast.config.SerializerConfig;
import com.hazelcast.core.EntryEvent;
import com.hazelcast.jet.*;
import com.hazelcast.jet.config.JetConfig;
import com.hazelcast.jet.stream.IStreamMap;
import com.hazelcast.map.listener.EntryAddedListener;
import be.andersch.anotherpackage.myObject;

import java.util.List;
import java.util.concurrent.ExecutionException;

import static com.hazelcast.jet.Edge.between;
import static com.hazelcast.jet.Processors.*;

/**
 * Created by abernard on 24.03.2017.
 */
public class Analyzer {
    private static final ObjectMapper mapper = new ObjectMapper();
    private static JetInstance jet;
    private static final IStreamMap<Long, List<String>> data;
    private static final IStreamMap<Long, List<String>> testmap;

    static {
        JetConfig config = new JetConfig();
        Config hazelConfig = config.getHazelcastConfig();
        hazelConfig.getGroupConfig().setName( "name" ).setPassword( "password" );
        hazelConfig.getNetworkConfig().getInterfaces().setEnabled( true ).addInterface( "my_IP_range_here" );
        hazelConfig.getSerializationConfig().getSerializerConfigs().add(
                new SerializerConfig().
                        setTypeClass(myObject.class).
                        setImplementation(new OsamKryoSerializer()));
        jet = Jet.newJetInstance(config);
        data = jet.getMap("data");
        testmap = jet.getMap("testmap");
    }

    public static void main(String[] args) throws ExecutionException, InterruptedException {

        DAG dag = new DAG();
        Vertex source = dag.newVertex("source", readMap("data"));
        Vertex test = dag.newVertex("test", writeMap("testmap"));

        dag.edge(between(source, test));

        jet.newJob(dag).execute()get();

        data.addEntryListener((EntryAddedListener<Long, List<String>>) (EntryEvent<Long, List<String>> entryEvent) -> {
            System.out.println("Got data: " + entryEvent.getKey() + " at " + System.currentTimeMillis() + ", Size: " + jet.getHazelcastInstance().getMap("data").size());
        }, true);

        testmap.addEntryListener((EntryAddedListener<Long, List<String>>) (EntryEvent<Long, List<String>> entryEvent) -> {
            System.out.println("Got test: " + entryEvent.getKey() + " at " + System.currentTimeMillis());
        }, true);

        Runtime.getRuntime().addShutdownHook(new Thread(() -> Jet.shutdownAll()));
    }
}
包be.andersch.clusterbench;
导入com.fasterxml.jackson.databind.ObjectMapper;
导入com.hazelcast.config.config;
导入com.hazelcast.config.SerializerConfig;
导入com.hazelcast.core.EntryEvent;
导入com.hazelcast.jet.*;
导入com.hazelcast.jet.config.JetConfig;
导入com.hazelcast.jet.stream.IStreamMap;
导入com.hazelcast.map.listener.EntryAddedListener;
导入be.andersch.anotherpackage.myObject;
导入java.util.List;
导入java.util.concurrent.ExecutionException;
导入静态com.hazelcast.jet.Edge.between;
导入静态com.hazelcast.jet.Processors。*;
/**
*由abernard于2017年3月24日创建。
*/
公共类分析器{
私有静态最终ObjectMapper mapper=新ObjectMapper();
私人静电喷枪;
私有静态最终IStreamMap数据;
私有静态最终IStreamMap测试图;
静止的{
JetConfig config=new JetConfig();
Config hazelConfig=Config.getHazelcastConfig();
hazelConfig.getGroupConfig().setName(“名称”).setPassword(“密码”);
hazelConfig.getNetworkConfig().getInterfaces().setEnabled(true).addInterface(“我的IP范围在这里”);
hazelConfig.getSerializationConfig().GetSerializationConfigs().add(
新建SerializerConfig()。
setTypeClass(myObject.class)。
setImplementation(新的OsamKryoSerializer());
jet=jet.newJetInstance(配置);
data=jet.getMap(“数据”);
testmap=jet.getMap(“testmap”);
}
公共静态void main(字符串[]args)引发ExecutionException、InterruptedException{
DAG DAG=新的DAG();
顶点源=dag.newVertex(“源”,readMap(“数据”);
顶点测试=dag.newVertex(“测试”),writeMap(“测试映射”);
dag.边缘(在(源、测试)之间);
newJob(dag.execute()get();
data.addEntryListener((EntryAddedListener)(EntryEvent EntryEvent)->{
System.out.println(“获取数据:“+entryEvent.getKey()+”位于“+System.currentTimeMillis()+”,大小:“+jet.getHazelcastInstance().getMap”(“数据”).Size());
},对);
addEntryListener((EntryAddedListener)(EntryEvent EntryEvent)->{
System.out.println(“Got test:“+entryEvent.getKey()+”位于“+System.currentTimeMillis()”);
},对);
Runtime.getRuntime().addShutdownHook(新线程(()->Jet.shutdownAll());
}
}

在创建条目侦听器之前,Jet作业已经在行
Jet.newJob(dag).execute().get()
处完成。这意味着作业在空映射上运行。也许你对这个作业的本质感到困惑:它是一个批处理作业,而不是一个无限流处理作业。Jet版本0.3还不支持无限流处理。

您对如何解决该问题有何建议?我有一个带有ScheduleXcetor的IStreamMap来做这项工作,但它相当慢。Neil建议使用DAG(这很有意义),这就是我为什么要尝试这个方法的原因;否则,团队将积极开发对真正无限流处理的支持。