使用sqoop导入导出mysql、hdfs、hive出现的问题

问题1:java.lang.ClassNotFoundException: Class widgets not found

执行的命令:

sqoop import --connect jdbc:mysql://localhost:3306/hadoopguide --username root --password root --table widgets 
//其中,hadoopguide是数据库名称,root、root是数据名的用户名和密码,widgets是hadoopguide下的一个数据表

错误信息:
java.lang.Exception: java.lang.RuntimeException: java.lang.ClassNotFoundException: Class widgets not found
如下图:
这里写图片描述
错误原因:
因为在使用sqoop import命令时,生成的java文件会默认产生在当前目录下,而产生的.jar文件和.class文件会默认存放在/tmp/sqoop-/compile下,两者不在同一文件目录下,导致错误。所以,我们需要将java文件,.jar文件和.class文件放在同一目录下。
解决方法:
为了使数据不存放在根目录下,将产生的文件放在/opt/Hadoop/sqoop-1.4.6/tmp下,我们需要切换至/opt/Hadoop/sqoop-1.4.6/tmp目录下,使用如下命令:

cd /opt/Hadoop/sqoop-1.4.6/tmp
sqoop import --bindir ./ --connect jdbc:mysql://localhost:3306/hadoopguide --username root --password root --table widgets

执行后结果如下:
这里写图片描述
查看HDFS,发现mysql的widgets表格内容已经导入:
这里写图片描述
参考网址:
https://stackoverflow.com/questions/21599785/sqoop-not-able-to-import-table/21626010#21626010

问题2:Output directory hdfs://hadoop2m:user/lina/widgets already exists

执行的命令:

sqoop import --connect jdbc:mysql://localhost:3306/hadoopguide --username root --password root --table widgets //其中,hadoopguide是数据库名称,root、root是数据名的用户名和密码,widgets是hadoopguide下的一个数据表

错误信息:
Error tool.ImportTool: Encountered IOException running import job: org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://hadoop2m:user/lina/widgets already exists
如下图:
这里写图片描述
错误原因:
在问题1中已经提到,这条命令之所以执行错误的原因是生成的java文件,.jar文件和.class文件不在同一目录中,所以导致导入失败,但是在命令执行开始的时候,就已经在hdfs的/user/lina目录下新建了一个widgets的目录,所以再次执行这个命令时会提示这个错误
解决方法:
使用下面的命令将HDFS中的这个文件夹删除即可:

hadoop fs -rm -r /user/lina/widgets

问题3:Field names must be greater than 0

执行的命令:

sqoop export --connect jdbc:mysql://localhost:3303/hadoopguide --username root --password root --table widget2 -m 1 --class-name WidgetHolder --jar-file widgets.jar --export-dir widget_sequence_files

错误信息:
Error sqoop.Sqoop: Got exception running Sqoop: java.lang.IllegalArgumentException: Field names must be greater than 0
如下图:
这里写图片描述
错误原因:
表名称写错,在mysql中创建的表名称为widgets2,但是在此命令中--table widget2使用的表是widget2,表明少了个s。
解决方法:
将上述命令中的--table widget2改成--table widgets2即可。


附:Hadoop入门基础及简单实例代码:https://github.com/Nana0606/Hadoop_Introduction

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值