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

来源:互联网 发布:剑三成男免费捏脸数据 编辑:程序博客网 时间:2024/06/05 04:58

问题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/tmpsqoop 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即可。

阅读全文
0 0
原创粉丝点击