【问题标题】:how to import table from rdbms to hive using sqoop in hadoop cluster?如何在hadoop集群中使用sqoop将表从rdbms导入hive?
【发布时间】:2014-06-02 09:11:56
【问题描述】:

我正在尝试使用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)

【问题讨论】:

    标签: sqoop


    【解决方案1】:

    每当您使用带有 Hive 导入选项的 Sqoop 时,sqoop 直接连接相应数据库的元存储并获取相应表的元数据(表的架构),因此无需在 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**
    

    这只是导入一个名为 citys 的表。**

    因此,HDFS 上所有 sqoop 数据的输出将默认存储在默认目录中。即 /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
    

    【讨论】:

      【解决方案2】:

      检查语法,消除多余的空格..

      $ 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 &lt; table_name &gt;

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-17
        相关资源
        最近更新 更多