1

安装 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)
4

7 回答 7

3

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

使用绝对路径在 hive-site.xml 中定义此属性值

于 2013-02-19T05:11:28.607 回答
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'
于 2015-02-03T07:35:43.590 回答
1

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

所以我想你必须添加:

--target-dir /user/hive/warehouse

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

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

sqoop create-hive-table --connect jdbc:mysql://host/database --table tableName --username user --password password
于 2011-07-01T15:37:13.987 回答
1

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

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

于 2016-05-06T11:59:15.043 回答
0

首先,在 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
  • “测试”是数据库
  • “仓库”目录在 HDFS 中
于 2012-01-20T09:06:20.633 回答
0

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

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

于 2011-07-22T09:22:12.300 回答
0

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

于 2016-05-06T13:05:12.780 回答