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 ~]$
我的设置是:
- Hadoop 的 namenode 运行s 在虚拟机(桥接网络)上,与 Sqoop 相同的机器; Yarn 作为经理
- Hadoop 的数据节点 运行 每个都在自己的两个虚拟机上(也桥接)
- Mysql 服务器 运行 在 VM 的主机上
虽然 table 确实很小(7 行),但我尝试按照建议增加虚拟机中的 RAM(并相应地重新配置 yarn-site.xml
和 mapred-site.xml
)here) 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权限后,作业运行顺利。我想一定有一些配置可以在必要时通过一台机器路由流量,但这解决了问题。
我正在尝试通过 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 ~]$
我的设置是:
- Hadoop 的 namenode 运行s 在虚拟机(桥接网络)上,与 Sqoop 相同的机器; Yarn 作为经理
- Hadoop 的数据节点 运行 每个都在自己的两个虚拟机上(也桥接)
- Mysql 服务器 运行 在 VM 的主机上
虽然 table 确实很小(7 行),但我尝试按照建议增加虚拟机中的 RAM(并相应地重新配置 yarn-site.xml
和 mapred-site.xml
)here) 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权限后,作业运行顺利。我想一定有一些配置可以在必要时通过一台机器路由流量,但这解决了问题。