通过Sqoop迁移数据库数据时报错
用户问题
- MRS Sqoop迁移数据库数据报错如下:
Communications link failure; The driver has not received any packets from the server;
- 源端为DWS数据库时报错如下:
got exception running sqoop .java.lang.Runtime.Exception, could not load db driver class。
问题分析
从上述两个报错分析,可能是驱动问题,服务端未正确加载JDBC驱动,或者是网络原因,由于Sqoop迁移数据过程,MapReduce任务是运行在分析core节点,因此需要保证正常加载驱动类的情况下,保证源端数据库和集群节点的网络正常通信。
处理步骤
- 检查源端数据库端口对集群节点均放通。
若使用EIP公网通信,那么集群节点均需要绑定公网,尤其是分析节点,必须绑定公网才能保证作业正常运行。
sqoop实例一般分布在Master节点,但作业真正运行在分析节点,因此创建数据库连接,是和Master节点通信,作业是通过Yarn任务分发到分析节点执行。
- 检查Sqoop实例安装目录下是否放置数据库驱动jar包,并保证jar包路径正确,文件权限及属主属组正确;配置文件正确配置;保证这些后需要重启Sqoop实例后才可以正常加载驱动。
- MRS 3.X集群驱动路径为:/opt/Bigdata/FusionInsight_Current/1_xx_LoaderServer/install/FusionInsight-Sqoop-1.99.3/server/webapps/loader/WEB-INF/ext-lib/
- MRS3.X之前版本集群驱动路径为:/opt/Bigdata/MRS_XXX/install/FusionInsight-Sqoop-1.99.7/FusionInsight-Sqoop-1.99.7/server/jdbc/
3.x之前版本需要修改配置文件。
- 如果是命令行提交作业,建议指定--driver参数。
如源端是DWS时命令行加:--driver com.xxx.gauss200.jdbc.Driver ,如下图。
图3 源端是dws时driver参数
其他数据库根据实际情况填写--driver参数。