sqoop导入完成但是hive show tables看不到表

时间:2011-07-01 12:44:20

标签: hadoop hive hdfs sqoop

安装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 /(用户名)/用户存在。

感谢任何帮助。

--- ----------- EDIT

/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)

7 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分: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'

答案 2 :(得分:1)

在我的案例中,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

答案 3 :(得分:0)

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

在sqoop import命令中还包括HDFS local -target dir,即hdfs://:9000 / user / hive / warehouse。

答案 4 :(得分: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
  • 'test'是数据库
  • '仓库'目录在HDFS中

答案 5 :(得分:0)

在我的情况下,它在hive默认数据库中创建表,你可以尝试一下。

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

答案 6 :(得分:0)

我认为你需要的只是指定数据应该去的hive表。 将"--hive-table database.tablename"添加到sqoop命令并删除--hive-home /opt/hive/。我认为应该解决问题。