本文介绍GBase 8a MPP数据库在加载sftp数据源时,出现Failed Initialization报错的问题原因,以及解决方法。
报错样例
在GBase 8a MPP集群环境中,有大量加载任务并发执行,并且从同一个服务器数据源获取数据,偶尔出现了以下加载失败的情况。
执行SQL:
load data infile sftp://root:111111@192.168.8.127/home/gbase/kai/data/a
报错信息:
GBase general error: I/O operation on sftp://root:******@192.168.8.127/home/gbase/kai/data/a failed with error

排查
首先在gcluster和gnode安装目录下的log/express.log中查看,没有发现其他的报错信息。根据报错信息,怀疑是SSH建立连接的过程中产生报错。
检查数据源的sshd服务器配置/etc/ssh/sshd_config,对于影响连接数量的配置进行检查:

从MaxStartups默认配置可以看出: sshd最多允许10个未认证连接同时存在;在未认证连接数量超过10个以后,有30%概率拒绝新连接;在未认证连接数量达到100个以后,拒绝所有新连接。
在以上sshd配置的情况下,如果同时有超过10个节点同时和数据源服务器建立连接,并且都出于未认证(等待认证)的状态下,那么新的节点会连接失败。
验证
检查集群部署状态,可以发现数据节点数超过10个,那么加载时会同时存在超过10个数据节点和数据服务器之间产生连接,并且等待认证。另外,即使只有1个数据节点,在同时并发10个以上加载SQL时,也会产生同样的问题。
通过修改配置文件的方法,也可以对报错信息进行验证。将/etc/ssh/sshd_config中的MaxStartups配置改为1:50:100以后,重启sshd服务。在命令行使用ssh连接数据源服务器,提示输入密码时,先不输入,让连接处于未认证状态。然后在gccli执行加载语句,可以发现,现在有50%的概率加载失败,产生Failed Initialization的报错。
解决方案
修改/etc/ssh/sshd_config中的MaxStartups配置,增加其允许的未认证连接数量,保证设置数量大于数据节点数和并发数。




