执行sqoop import-all-tables命令失败,请求协助排查报错原因
排查Sqoop import-all-tables执行失败的问题
先给你拆解下问题,一步步来排查:
首先,你看到的/usr/lib/sqoop/../accumulo 不存在的警告其实不用太担心——这个是Sqoop默认检查Accumulo组件,但你并没有用到Accumulo的导入功能,所以这个警告不会直接导致导入失败,真正的问题藏在你没贴全的错误日志里。不过我们可以先从常见的坑开始排查:
1. 先检查命令的语法细节
我注意到你命令里的–-username和–-password的破折号看起来像是全角中文破折号(不是英文的两个短横--),这是Sqoop命令里非常常见的错误!Sqoop只能识别英文的双短横作为参数前缀,全角符号会被当成无效参数,直接导致命令执行失败。
你可以把命令里的参数前缀都换成英文的--,修正后的命令应该是:
sqoop import-all-tables --connect jdbc:mysql://192.168.26.131/batch31 --username root --password cloudera --exclude-tables NYSE_DAILY_PRICES_MYSQL -m1
2. 测试MySQL连接的有效性
如果语法没问题,接下来要确认Cloudera节点能不能正常连接到目标MySQL数据库:
- 在Cloudera节点上执行以下命令测试连接:
如果连接失败,可能是这几个原因:mysql -h192.168.26.131 -uroot -pcloudera batch31- MySQL服务没启动
- 192.168.26.131这个IP不通(检查网络防火墙)
- root用户没有从Cloudera节点IP访问的权限(MySQL默认只允许localhost访问,需要执行授权语句:
GRANT ALL ON batch31.* TO 'root'@'192.168.26.%' IDENTIFIED BY 'cloudera'; FLUSH PRIVILEGES;
3. 获取完整的错误日志
你只看到了错误日志的开头(18/04/13 10:27:14 ER...),这对排查问题不够。可以把命令的输出重定向到日志文件,方便查看完整错误:
sqoop import-all-tables --connect jdbc:mysql://192.168.26.131/batch31 --username root --password cloudera --exclude-tables NYSE_DAILY_PRICES_MYSQL -m1 >> sqoop_import_error.log 2>&1
然后打开sqoop_import_error.log,重点看ERROR开头的行,常见的错误比如:
- HDFS写入权限不足(比如cloudera用户没有写入/user/cloudera目录的权限)
- 要导入的表不存在(或者排除的表名拼写错误,注意MySQL在Linux下表名区分大小写)
- MySQL驱动缺失(不过Cloudera默认已经自带MySQL驱动,这个概率较低)
4. 消除Accumulo警告(可选)
如果你看着这个警告不舒服,可以通过设置环境变量来消除:
export ACCUMULO_HOME=/usr/lib/accumulo
即使这个目录不存在,Sqoop也不会再弹出这个警告了。
按照上面的步骤一步步排查,应该能找到问题所在。
内容的提问来源于stack exchange,提问作者Madhu
相关产品推荐
相关产品推荐

