使用Spark on MaxCompute访问Lindorm时连接超时的解决方法

使用Spark on MaxCompute访问Lindorm实例时可能会出现Connection Timeout的报错,这可能涉及Spark on MaxCompute的网络架构和数据通信方式等多方面的影响。本文介绍出现Connection Timeout报错的原因和解决方法。

问题描述

使用Spark on MaxCompute访问Lindorm实例时,无论是通过协议兼容还是Lindorm客户端,都会报错提示连接超时(Connection Timeout)。

问题原因

当前Spark on MaxCompute的网络架构:多个pod经过一个弹性网卡(Elastic Network Interfaces,简称ENI)和其他VPC上的数据库或数据服务进行数据通信。ENI端将根据算法分配Port,如果访问的对端IP不同,则分配的Port之间不会互斥,即Port有一定概率会出现重复现象。因此当直连和负载均衡(SLB)同时存在时,可能出现数据串流现象。

无论是使用Lindorm客户端还是协议兼容连接,都采用了负载均衡(SLB)+直连进行数据通信。在数据传输过程中,SLB服务会将源地址转换为ENI地址,如果此时负载服务器上没有存储NAT信息,则可能出现丢包现象,导致数据串流。

解决方案

建议您使用开源Spark内置的HBase客户端访问Lindorm实例。