我试图通过sqoop从mysql导入一个表到hadoop文件系统。但是,sqoop import启动一个作业,并被困在0%的映射中。
一段时间后,作业失败,出现以下错误
2020-08-12 21:46:08,341 INFO mapreduce.Job: Running job: job_1597282205193_0005
2020-08-12 21:46:20,755 INFO mapreduce.Job: Job job_1597282205193_0005 running in uber mode : false
2020-08-12 21:46:20,758 INFO mapreduce.Job: map 0% reduce 0%
2020-08-12 21:48:43,458 INFO mapreduce.Job: Task Id : attempt_1597282205193_0005_m_000001_0, Status : FAILED
Error: java.lang.RuntimeException: java.lang.RuntimeException: com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure为了完整起见,整个命令如下:
sqoop import --connect jdbc:mysql://mysqlserver:3306/DSA_ED --table test --username hadoop -PSqoop甚至创建了目录,但是没有导入任何内容:
[hadoop@hdpnms ~]$ hdfs dfs -ls
Found 1 items
drwxr-xr-x - hadoop supergroup 0 2020-08-12 21:59 test
[hadoop@hdpnms ~]$ hdfs dfs -ls test/
[hadoop@hdpnms ~]$我的设计是:
主机上运行。
虽然表确实很小(7行),但我尝试按照建议的yarn-site.xml和mapred-site.xml增加VM中的RAM (并相应地重新配置here),并按照建议的here和here检查到mysql服务器的连接和用户权限。
我确信mysql服务器的连接配置是正常的,因为我可以看到sqoop list-tables的数据库表(这也告诉我连接驱动程序是正常的),并通过命令行客户机mysql -u hadoop -h mysqlserver -p连接和处理数据库。这让我觉得这必须是sqoop上的一些错误配置。但我真的被困住了,弄不懂问题的所在。
编辑1
因此,我尝试在主机上使用Postgres服务器,并在hadoop运行实例上尝试使用Mysql服务器。同样的问题两次都发生了。我认为这明确排除了外部的连接问题,而且肯定是关于Sqoop如何管理工作中的连接的。
发布于 2020-08-14 22:31:59
万一有人遇到同样的问题..。事实证明,无论是在数据库的配置中还是在防火墙中,在IP权限上都是问题。
我假设所有的流量都会通过namenode发生,所以只有namenode的IP可以通过防火墙进入数据库服务器,因此我可以通过它与其他客户端一起访问它们。但是事实证明,集群的所有主机在地图作业期间都在发出请求。
在对集群中的所有IP授予权限后,作业运行顺利。我想,如果有必要的话,一定有一些配置可以通过一台机器路由流量,但这解决了这个问题。
https://stackoverflow.com/questions/63387461
复制相似问题