如何在hadoop集群中使用sqoop将表从rdbms导入到hive?

时间:2014-06-02 09:11:56

标签: sqoop

我试图在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)

2 个答案:

答案 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 >