使用Sqoop从Redshift迁数据到S3时遇连接字符串无管理器错误
解决Sqoop从Redshift迁移数据到S3时的「无对应连接字符串管理器」错误
我之前也碰到过一模一样的问题,核心原因是Sqoop默认的数据库管理器没法识别Redshift的JDBC连接串,再加上你的连接串格式也有小问题,咱们一步步来修复:
1. 修正JDBC连接串的标准格式
你当前的连接串把database参数放在了URL后缀里,不符合JDBC的标准格式。正确的做法是把数据库名直接放在端口号后面,然后用?拼接用户、密码这类参数:
sqoop-import -Dmapreduce.job.user.classpath.first=true \ --connect "jdbc:redshift://redshiftinstance.us-east-1.redshift.amazonaws.com:9999/ourDB?user=username&password=password" \ --table ourtable \ -m 1 \ --as-avrodatafile \ --target-dir s3n://bucket/folder/folder1/
2. 手动指定Redshift的JDBC驱动类
Sqoop没法自动识别jdbc:redshift:前缀的连接串,所以必须明确指定驱动类,让Sqoop知道该用哪个管理器处理连接:
sqoop-import -Dmapreduce.job.user.classpath.first=true \ --connect "jdbc:redshift://redshiftinstance.us-east-1.redshift.amazonaws.com:9999/ourDB?user=username&password=password" \ --driver com.amazon.redshift.jdbc42.Driver \ --table ourtable \ -m 1 \ --as-avrodatafile \ --target-dir s3n://bucket/folder/folder1/
注意:驱动类版本要和你使用的JDBC jar包匹配,如果是jdbc41或jdbc4版本的jar,对应改成com.amazon.redshift.jdbc41.Driver或com.amazon.redshift.jdbc4.Driver即可。
3. 再次确认驱动jar的位置(可选但重要)
虽然你说驱动已经放在正确目录,但还是要核对:
- 集群环境下,驱动jar要放到每个节点的
$SQOOP_HOME/lib目录 - 本地运行的话,要么把jar加入Sqoop的classpath,要么通过
--libjars /path/to/RedshiftJDBCxx.jar参数手动指定路径
错误根源解析
Sqoop是通过JDBC连接串的前缀(比如jdbc:mysql:、jdbc:postgresql:)自动匹配对应数据库管理器的,但jdbc:redshift:不在它的默认识别列表里,所以必须手动指定驱动类,才能让Sqoop正确找到对应的连接管理器。
内容的提问来源于stack exchange,提问作者DataDog
相关产品推荐
相关产品推荐

