使用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实例。
文档内容是否对您有帮助?