使用sqoop将数据从Hive导入MySQL出现的问题

使用sqoop将数据从Hive导入MySQL出现无法连接的问题

前言

在搭建hadoop分布式集群时,将workers文件(hadoop 3.x)或者slaves文件(hadoop2.x)中的localhost删除,并添加了slave1节点,最终master节点只做为namenode节点使用,不作为datanode。作者使用的hadoop版本分别是hadoop3.1.3和hadoop2.7.1。

问题

我们先启动hadoop集群、以及MySQL服务

service mysql start
start-all.sh #如果已经在~/.bashrc中设置过hadoop路径则可以直接使用

之后根据 大数据案例-步骤三:Hive、MySQL、HBase数据互导中的步骤,运行hive进行操作,创建临时表user_action,在MySQL数据库dblab中创建新表usser_action,之后执行命令

#这里记得更换为自己的密码
cd /usr/local/sqoop
./bin/sqoop export --connect jdbc:mysql://localhost:3306/dblab --username root --password hadoop --table user_action --export-dir '/user/hive/warehouse/dblab.db/user_action' --fields-terminated-by '\t'; #导入命令

错误

在这里插入图片描述
发现导出数据失败了,我们打开mapreduce的任务日志,网站,打开失败的mapreduce日志,报错如下:
在这里插入图片描述

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
at org.apache.sqoop.mapreduce.ExportOutputFormat.getRecordWriter(ExportOutputFormat.java:79)
at org.apache.hadoop.mapred.MapTask N e w D i r e c t O u t p u t C o l l e c t o r . < i n i t > ( M a p T a s k . j a v a : 647 ) a t o r g . a p a c h e . h a d o o p . m a p r e d . M a p T a s k . r u n N e w M a p p e r ( M a p T a s k . j a v a : 767 ) a t o r g . a p a c h e . h a d o o p . m a p r e d . M a p T a s k . r u n ( M a p T a s k . j a v a : 341 ) a t o r g . a p a c h e . h a d o o p . m a p r e d . L o c a l C o n t a i n e r L a u n c h e r NewDirectOutputCollector.<init>(MapTask.java:647) at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:767) at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341) at org.apache.hadoop.mapred.LocalContainerLauncher NewDirectOutputCollector.<init>(MapTask.java:647)atorg.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:767)atorg.apache.hadoop.mapred.MapTask.run(MapTask.java:341)atorg.apache.hadoop.mapred.LocalContainerLauncherEventHandler.runSubtask(LocalContainerLauncher.java:380)
at org.apache.hadoop.mapred.LocalContainerLauncher E v e n t H a n d l e r . r u n T a s k ( L o c a l C o n t a i n e r L a u n c h e r . j a v a : 301 ) a t o r g . a p a c h e . h a d o o p . m a p r e d . L o c a l C o n t a i n e r L a u n c h e r EventHandler.runTask(LocalContainerLauncher.java:301) at org.apache.hadoop.mapred.LocalContainerLauncher EventHandler.runTask(LocalContainerLauncher.java:301)atorg.apache.hadoop.mapred.LocalContainerLauncherEventHandler.access 200 ( L o c a l C o n t a i n e r L a u n c h e r . j a v a : 187 ) a t o r g . a p a c h e . h a d o o p . m a p r e d . L o c a l C o n t a i n e r L a u n c h e r 200(LocalContainerLauncher.java:187) at org.apache.hadoop.mapred.LocalContainerLauncher 200(LocalContainerLauncher.java:187)atorg.apache.hadoop.mapred.LocalContainerLauncherEventHandler 1. r u n ( L o c a l C o n t a i n e r L a u n c h e r . j a v a : 230 ) a t j a v a . u t i l . c o n c u r r e n t . E x e c u t o r s 1.run(LocalContainerLauncher.java:230) at java.util.concurrent.Executors 1.run(LocalContainerLauncher.java:230)atjava.util.concurrent.ExecutorsRunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:989)
at com.mysql.jdbc.MysqlIO.(MysqlIO.java:341)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2251)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2284)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2083)
at com.mysql.jdbc.ConnectionImpl.(ConnectionImpl.java:806)
at com.mysql.jdbc.JDBC4Connection.(JDBC4Connection.java:47)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:410)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:328)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
at org.apache.sqoop.mapreduce.db.DBConfiguration.getConnection(DBConfiguration.java:302)
at org.apache.sqoop.mapreduce.AsyncSqlRecordWriter.(AsyncSqlRecordWriter.java:76)
at org.apache.sqoop.mapreduce.ExportOutputFormat$ExportRecordWriter.(ExportOutputFormat.java:95)
at org.apache.sqoop.mapreduce.ExportOutputFormat.getRecordWriter(ExportOutputFormat.java:77)
… 12 more
Caused by: java.net.ConnectException: Connection refused (Connection refused)
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:211)
at com.mysql.jdbc.MysqlIO.(MysqlIO.java:300)
… 30 more

解决办法

查找后发现是连接不上MySQL服务器所导致,这里尝试过修改MySQL的默认回收时间,参考链接
,结果还是无法导入,之后又尝试了另一篇文章中的办法,发现还是无法连接mysql服务器,最后在链接中的描述中,想到可能是在导入数据的过程中,其他节点没有权限访问mysql服务器,然后就更改了slaves(workers)中节点的配置,将localhost添加进去:

在这里插入图片描述
然后再进行导入操作,最后发现居然导入成功了,成果如下:
在这里插入图片描述
最终终于完成了整个实习作业,祝各位好运。

参考教材 http://dblab.xmu.edu.cn/post/bigdata3/

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值