【问题标题】:sqoop import complete but hive show tables can't see tablesqoop 导入完成但配置单元显示表看不到表
【发布时间】:2011-07-01 12:44:19
【问题描述】:

安装hadoop后,hive(CDH版本)我执行

./sqoop import -connect jdbc:mysql://10.164.11.204/server -username root -password password -table user -hive-import --hive-home /opt/hive/

一切正常,但是当我进入 hive 命令行并执行 show tables 时,什么都没有。 我使用 ./hadoop fs -ls,我可以看到 /user/(username)/user 存在。

感谢任何帮助。

---编辑-----------

/sqoop import -connect jdbc:mysql://10.164.11.204/server -username root -password password -table user -hive-import --target-dir /user/hive/warehouse

由于以下原因导致导入失败:

11/07/02 00:40:00 INFO hive.HiveImport: FAILED: Error in semantic analysis: line 2:17 Invalid Path 'hdfs://hadoop1:9000/user/ubuntu/user': No files matching path hdfs://hadoop1:9000/user/ubuntu/user
11/07/02 00:40:00 ERROR tool.ImportTool: Encountered IOException running import job: java.io.IOException: Hive exited with status 10
        at com.cloudera.sqoop.hive.HiveImport.executeExternalHiveScript(HiveImport.java:326)
        at com.cloudera.sqoop.hive.HiveImport.executeScript(HiveImport.java:276)
        at com.cloudera.sqoop.hive.HiveImport.importTable(HiveImport.java:218)
        at com.cloudera.sqoop.tool.ImportTool.importTable(ImportTool.java:362)
        at com.cloudera.sqoop.tool.ImportTool.run(ImportTool.java:423)
        at com.cloudera.sqoop.Sqoop.run(Sqoop.java:144)
        at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)
        at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:79)
        at com.cloudera.sqoop.Sqoop.runSqoop(Sqoop.java:180)
        at com.cloudera.sqoop.Sqoop.runTool(Sqoop.java:218)
        at com.cloudera.sqoop.Sqoop.main(Sqoop.java:228)

【问题讨论】:

  • 你运行的是什么版本的 Sqoop 和 Hadoop?

标签: hadoop hive hdfs sqoop


【解决方案1】:

检查您的 hive-site.xml 中的属性值 javax.jdo.option.ConnectionURL。如果您没有明确定义, 默认值将使用相对路径来创建配置单元 Metastore (jdbc:derby:;databaseName=metastore_db;create=true) 其中 将根据您从何处启动流程而有所不同。 这可以解释为什么您无法通过 show tables 查看表格。

在您的 hive-site.xml 使用绝对路径

【讨论】:

  • 我认为你是对的。我遇到了同样的问题。我发现我可以根据我启动 hive 的位置找到这些表。 GettingStart 说“元数据位于嵌入式 Derby 数据库中,其磁盘存储位置由名为 javax.jdo.option.ConnectionURL 的 hive 配置变量确定。默认情况下(请参阅 conf/hive-default.xml),此位置为 ./metastore_db” .所以请确保在启动 Sqoop 的相同位置启动 Hive。然后你会找到你的桌子。
【解决方案2】:

无需在 hive 中创建表。参考以下查询

sqoop import --connect jdbc:mysql://xxxx.com/Database name --username root --password admin --table tablename (mysql table) --direct -m 1 --hive-import --create-hive-table --hive-table table name --target-dir '/user/hive/warehouse/Tablename(which u want create in hive)' --fields-terminated-by '\t'

【讨论】:

    【解决方案3】:

    在我的例子中,Hive 将数据存储在 HDFS 的 /user/hive/warehouse 目录中。这是 Sqoop 应该放的地方。

    所以我猜你必须添加:

    --target-dir /user/hive/warehouse
    

    这是 Hive 表的默认位置(在您的情况下可能会有所不同)。

    您可能还想在 Hive 中创建此表:

    sqoop create-hive-table --connect jdbc:mysql://host/database --table tableName --username user --password password
    

    【讨论】:

    • 感谢 wojtek,你的意思是我应该总是在 hive-import 之前创建 hive 表吗?
    • 即使我使用create hive table,我仍然无法通过show table 命令看到表格。
    • @elprup - 不,您只需创建一次 - 第一次导入数据时。但可能有自动创建它的导入选项。
    【解决方案4】:

    在我的例子中,它在 hive 默认数据库中创建表,你可以试一试。

    sqoop import --connect jdbc:mysql://xxxx.com/数据库名 --username root --password admin --table NAME --hive-import --warehouse-dir DIR --create-hive-table --hive-table NAME -m 1

    【讨论】:

      【解决方案5】:

      Hive 表将由 Sqoop 导入过程创建。请确保在您的 HDFS 中创建了 /user/hive/warehouse。您可以浏览 HDFS (http://localhost:50070/dfshealth.jsp - Browse the File System 选项。

      还在 sqoop 导入命令中包含 HDFS 本​​地 -target 目录,即 hdfs://:9000/user/hive/warehouse。

      【讨论】:

        【解决方案6】:

        首先,在 Hive 中创建表定义,使用与 mysql 中完全相同的字段名称和类型。

        然后,执行导入操作

        用于 Hive 导入

        sqoop import --verbose --fields-terminated-by ','  --connect jdbc:mysql://localhost/test --table tablename --hive-import --warehouse-dir /user/hive/warehouse --fields-terminated-by ',' --split-by id --hive-table tablename
        
        • 'id' 可以是现有表的主键
        • 'localhost'可以是你的本地ip
        • 'test' 是数据库
        • “仓库”目录在 HDFS 中

        【讨论】:

          【解决方案7】:

          我认为您所需要的只是指定数据应该存放的配置单元表。 将"--hive-table database.tablename" 添加到 sqoop 命令并删除--hive-home /opt/hive/。我认为这应该可以解决问题。

          【讨论】:

            猜你喜欢
            • 2013-02-03
            • 2017-08-05
            • 1970-01-01
            • 1970-01-01
            • 2015-11-12
            • 1970-01-01
            • 2015-02-28
            • 2013-10-30
            • 1970-01-01
            相关资源
            最近更新 更多