我试图在hadoop集群中使用SQOOP将表从RDBMS导入到HIVE,我收到以下错误,请你为此提供解决方案。
bin/sqoop-import --connect jdbc:mysql://localhost:3306/hadoop -username root -password root --table salaries --hive-table salaries --create-hive-table --hive-import --hive-home /home/techgene/hive-0.11.0 -m 1 --target-dir /user/hive/warehouse
例外:
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask
14/06/02 14:30:19 ERROR tool.ImportTool: Encountered IOException running import job: java.io.IOException: Hive exited with status 1
at org.apache.sqoop.hive.HiveImport.executeExternalHiveScript(HiveImport.java:364)
at org.apache.sqoop.hive.HiveImport.executeScript(HiveImport.java:314)
at org.apache.sqoop.hive.HiveImport.importTable(HiveImport.java:226)
at org.apache.sqoop.tool.ImportTool.importTable(ImportTool.java:415)
at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:476)
at org.apache.sqoop.Sqoop.run(Sqoop.java:145)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)
at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:181)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:220)
at org.apache.sqoop.Sqoop.runTool(Sqoop.java:229)
at org.apache.sqoop.Sqoop.main(Sqoop.java:238)
答案 0 :(得分:0)
每当您使用带有Hive导入选项的Sqoop时,sqoop直接连接相应的数据库的Metastore并获取相应表的元数据(表的架构),所以不需要在Hive中创建表结构。然后在与Hive-import选项一起使用时,将该模式提供给Hive。
**实施例::
**sudo sqoop import-all-tables --connect jdbc:mysql://10.0.0.57/movielens --username root --password root —hive-import**
这太过于导入mysql中movielens数据库中的表。 
**sqoop import \
--connect jdbc:mysql://10.0.0.57/movielens \
--username root \
--password hadoop \
--table cities \
--hive-import**
这只是导入一个名为cities的表。**
因此,HDFS上所有sqoop数据的输出默认存储在默认目录中.i.e /user/sqoop/tablename/part-m
个文件
使用hive导入选项,表格将直接下载到默认仓库目录中,即
/user/hive/warehouse/tablename
命令:sudo -u hdfs hadoop fs -ls -R /user/
这会以递归方式列出用户中的所有文件。
现在转到Hive并键入show databases.如果只有默认数据库,则键入show tables: 记住OK是常见的默认系统输出,不是命令输出的一部分。
hive> show databases;
OK
default
Time taken: 0.172 seconds
hive> show tables;
OK
genre
log_apache
movie
moviegenre
movierating
occupation
user
Time taken: 0.111 seconds
答案 1 :(得分:0)
检查语法,消除额外的空格..
$ sqoop-import --connect "jdbc:mysql://localhost:3306/hadoop;database=< db_name >"
-username root
-password root
--table salaries
--hive-import
--target-dir /user/hive/warehouse
如果使用与mysql中相同的名称
,则无需提及--hive-table < table_name >