使用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下的一个数据表
- 1
- 2
错误信息:
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
执行后结果如下:
查看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
错误信息:
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
问题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
错误信息:
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
- 使用sqoop导入导出mysql、hdfs、hive出现的问题
- Sqoop_详细总结 使用Sqoop将HDFS/Hive/HBase与MySQL/Oracle中的数据相互导入、导出
- Sqoop_具体总结 使用Sqoop将HDFS/Hive/HBase与MySQL/Oracle中的数据相互导入、导出
- Sqoop_详细总结 使用Sqoop将HDFS/Hive/HBase与MySQL/Oracle中的数据相互导入、导出
- 使用Sqoop将HDFS/Hive/HBase与MySQL/Oracle中的数据相互导入、导出
- 使用Sqoop将HDFS/Hive/HBase与MySQL/Oracle中的数据相互导入、导出
- 工作中,sqoop导入导出hive,mysql 出现的问题.
- 使用sqoop实现关系型数据库、HDFS、Hive之间数据的导入导出
- sqoop从mysql导入到hdfs出现乱码问题
- 使用sqoop 1.4.4从mysql向hdfs导入表出现链接数据库失败错误的解决办法
- mysql 导入hdfs、hive、hbase sqoop使用方法
- Hadoop Hive概念学习系列之HDFS、Hive、MySQL、Sqoop之间的数据导入导出(强烈建议去看)(十八)
- 使用Sqoop将数据从Hive导入MySQL可能遇到的问题
- [总结]----sqoop 同 MySQL 和 HDFS,Hive 导入导出
- Sqoop导入导出MySQL、Oracle到HDFS、Hive
- 大数据基础(二)hadoop, mave, hbase, hive, sqoop在ubuntu 14.04.04下的安装和sqoop与hdfs,hive,mysql导入导出
- 使用Sqoop从MySQL导入数据到Hive和HBase
- 利用sqoop将hive数据导入导出数据到mysql (转)
- 使用sqoop1.99.6将mysql数据导入到hdfs