2

I am trying something on hadoop and its related things. For this, I have configured hadoop, hase, hive, sqoop in Ubuntu machine.

raghu@system4:~/sqoop$ bin/sqoop-import --connect jdbc:mysql://localhost:3306/mysql --username root --password password --table user --hive-import -m 1

All goes fine, but when I enter hive command line and execute show tables, there are nothing. I am able to see that these tables are created in HDFS.

I have seen some options in Sqoop import - it can import to Hive/HDFS/HBase. When importing into Hive, it is indeed importing directly into HDFS. Then why Hive?

Where can I execute HiveQL to check the data.

From cloudera Support, I understood that I can Hue and check it. But, I think Hue is just an user interface to Hive.

Could someone help me here.

Thanks in advance,

Raghu

4

7 回答 7

2

你可以发布sqoop的输出吗?尝试使用 --verbose 选项。

这是我使用的命令示例,它确实直接导入到 Hive 表。

sqoop import --hive-overwrite --hive-drop-import-delims --warehouse-dir "/warehouse" --hive-table hive_users --connect jdbc:mysql://$MYSQL_HOST/$DATABASE_NAME --table users --username $MYSQL_USER --password $MYSQL_PASS --hive-import
于 2012-12-27T03:17:23.943 回答
2

我遇到了同样的问题。我能够通过将数据直接导入 HDFS 来解决/通过它,然后创建一个外部Hive 表以指向 HDFS 中的特定位置。这是一个对我有用的例子。

create external table test (
    sequencenumber int,
    recordkey int,
    linenumber int,
    type string)
    ROW FORMAT DELIMITED FIELDS TERMINATED BY '\054'
    location '/user/hdfs/testdata';

您需要将您的位置更改为在 HDFS 中保存数据的位置。

于 2012-05-01T17:51:38.120 回答
1

当我们在 sqoop 导入命令中没有给出任何数据库时,该表将在默认数据库中创建,其名称与 RDBMS 表名相同。您可以通过“--hive-database”指定要在hive中导入RDBMS表的数据库名称。

于 2016-06-19T18:32:40.377 回答
0

不用每次都创建 Hive 表,可以使用 sqoop 的 create-hive-table 命令导入 hive 中的表结构。它将表作为 managed_table 导入,然后您可以通过将表属性更改为外部表然后添加分区来将该表转换为外部表。这将减少寻找正确数据类型的工作量。请注意会有精度变化

于 2014-03-26T16:18:15.263 回答
0

每当您使用带有 Hive 导入选项的 Sqoop 时,sqoop 直接连接相应数据库的元存储并获取相应表的元数据(表的架构),因此无需在 Hive 中创建表结构。此架构然后在与 Hive-import 选项一起使用时提供给 Hive。

所以 HDFS 上所有 sqoop 数据的输出将默认存储在默认目录 .ie /user/sqoop/tablename/part-m 文件中

使用 hive 导入选项,表将直接下载到默认仓库目录中,即

/user/hive/warehouse/tablename 命令:sudo -u hdfs hadoop fs -ls -R /user/ 这会递归地列出用户中的所有文件。

现在转到 Hive 并键入 show databases。如果只有默认数据库,则键入 show tables:记住 OK 是常见的默认系统输出,不是命令输出的一部分。

蜂巢>显示数据库;

好的

默认

耗时:0.172 秒

蜂巢>显示表格;

好的

类型

日志阿帕奇

电影

电影类型

电影分级

职业

用户

耗时:0.111 秒

于 2014-08-13T15:43:49.257 回答
0

试试这样的 sqoop 命令,它对我有用,直接创建 hive 表,你不需要每次都创建外部表

sqoop import --connect DB_HOST --username ***** --password ***** --query "select *from SCHEMA.TABLE where \$CONDITIONS"
--num-mappers 5 --split-by PRIMARY_KEY - -hive-import --hive-table HIVE_DB.HIVE_TABLE_NAME --target-dir SOME_DIR_NAME;

于 2015-09-08T13:13:21.443 回答
0

您正在使用的命令将数据导入 $HIVE_HOME 目录。如果未设置 HIVE_HOME 环境变量或指向错误的目录,您将无法看到导入的表。

查找 hive 主目录的最佳方法是使用 Hive QL SET 命令:

hive -S -e 'SET' | grep warehouse.dir

检索到 hive 主目录后,将--hive-home <hive-home-dir>选项附加到命令中。

另一个可能的原因是,在某些 Hive 设置中,元数据被缓存,您无法立即看到更改。在这种情况下,您需要使用INVALIDATE METADATA;命令刷新元数据缓存。

于 2016-12-24T20:40:02.303 回答