Hadoop/Sqoop 通信 Link 错误 - 无法从 mysql 导入 table

Hadoop/Sqoop Communications Link Error - unable to import table from mysql

我正在尝试通过 sqoop 将 table 从 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 -P

Sqoop 甚至创建了目录,但没有导入任何内容:

[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 ~]$

我的设置是:

虽然 table 确实很小(7 行),但我尝试按照建议增加虚拟机中的 RAM(并相应地重新配置 yarn-site.xmlmapred-site.xmlhere) and checking the connection to the mysql server and user privileges as suggested here and here

我肯定 mysql 服务器的连接配置没问题,因为我都可以看到数据库 tables 作为 sqoop list-tables 的结果(这也告诉我连接驱动程序正常)并通过命令行客户端 mysql -u hadoop -h mysqlserver -p 连接并处理数据库。这让我认为它必须是 sqoop 上的一些错误配置。然而我真的卡住了,无法理解问题可能是什么。

编辑 1

因此,我尝试在主机上使用 Postgres 服务器,并在 hadoop 运行ning 实例上使用 Mysql 服务器进行试验。两次都出现同样的问题。我认为这绝对排除了来自外部的连接问题,并且一定是关于 Sqoop 如何管理作业中的连接的问题。

万一有人遇到同样的问题...事实证明问题关于IP权限的问题,在数据库的配置和防火墙中都是如此。

我假设所有流量都会通过名称节点发生,所以只有名称节点的 IP 被允许通过防火墙并进入数据库服务器,因此我可以通过那里与其他客户端一起访问它们。但事实证明,集群的所有主机都在映射作业期间发出请求。

给集群所有IP权限后,作业运行顺利。我想一定有一些配置可以在必要时通过一台机器路由流量,但这解决了问题。