Spark写入Nebula 经常会报 No extra connection: All servers are broken

nebula:3.0.0
spark:2.2.0
nebula配置:3台虚拟机 8C 16G
目前由于spark版本受限用不了spark-nebula这个包,参考官方nebula-spark-exchange代码,通过spark 的ForeachPartitionFunction进行数据写入,但是经常会报错:All servers are broken
部分代码如下:

@Override
    public void call(Iterator<Row> iterator) {
        // colNameAll务必要放到call方法里面,否则容器字段值不会被更新
        List<String> colNameAll = new LinkedList<>();
        // colNameAll务必要放到call方法里面,否则容器字段值不会被更新
        List<String> colTypes = new LinkedList<>();
        GraphProvider graphProvider = new GraphProvider();
        Session session;
        try {
            session = graphProvider.getSession();
        } catch (Exception e) {
            // 防止取不到session,休眠10s
            try {
                Thread.sleep(10000);
            } catch (Exception interruptedException) {
                interruptedException.printStackTrace();
            }
            try {
                // 再次提取session
                session = graphProvider.getSession();
            } catch (Exception e1) {
                throw new RuntimeException(" get session error : " + e1.getMessage());
            }
        }
       ...
      graphProvider.releaseSession(session);
      graphProvider.close();

Exchang 使用的 Spark 版本是 2.4 以上的,以及你看下你的 Exchange 是不是 3.0 版本的。

是不是多线程复用了同一个session? :thinking:

不会复用,因为session不能序列化,基本都是在每个worker里面进行开启关闭的

主要是线上不是2.4.0,只有2.3.0所以才自己写这个,如果有2.4.0就可以直接用你们提供的spark-nebula-connect这个api了

exchange 也是有 spark 版本要求的。

应该不是版本问题,这个问题只是并发太高才会导致,我选的是你们exchange-spark-2.2.0这个版本参考的

这样的话,你和 Nebula 内核就不对齐了啊。

有没有可能是并发太高,连接池里没有可用的连接了。要不加大连接池,要不就限制一下,我记得有个限流的参数,可以看看他们的代码 :thinking:

应该是这个原因 我不确定改哪个地方,我之前是把:NebulaPoolConfig nebulaPoolConfig = new NebulaPoolConfig();
nebulaPoolConfig.setMaxConnSize(12); --》改成100 发现效果更差
nebulaPoolConfig.setTimeout(6000);
nebulaPoolConfig.setWaitTime(6000);
nebulaPoolConfig.setIdleTime(6000);
nebulaPoolConfig.setMinConnSize(2);

我其实在想,如果我有100的分区同时写入,那就是100个worker 要进行nebulaPoolConfig这个初始化,那个这个最大值是不是小一点更好 这样总的连接池就不会太大

试试就知道了 :rofl: 不考虑掉线的情况,一个worker理论上应该只会用到一个连接,那将连接池大小设置为1试试?

此话题已在最后回复的 30 天后被自动关闭。不再允许新回复。