您的位置:首页 > 大数据 > Hadoop

使用sqoop导入导出到MySQL、hdfs以及hive时出现的问题

2018-10-22 16:57 447 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/quiet_girl/article/details/75160045

问题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下的一个数据表
  • 1
  • 2
[/code]

错误信息:
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目录下(本人的放在tmp下也不可以,需要放在.jar和.class存在的那个文件夹,而那个文件夹是每次运行的时候产生的,所以第一次肯定失败,得第二次把.java放到里面才可以此目录是:/tmp/sqoop-root/compile/ab81a06e38ed035c4468f31c5781f46类似这种),使用如下命令:

cd /opt/Hadoop/sqoop-1.4.6/tmp
sqoop import --bindir ./ --connect jdbc:mysql://localhost:3306/hadoopguide --username root --password root --table widgets
  • 1
  • 2
[/code]

执行后结果如下:

查看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下的一个数据表
  • 1
[/code]

错误信息:
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
  • 1
[/code]

问题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
  • 1
[/code]

错误信息:
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

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: