我正在尝试hadoop及其相关的东西。为此,我在Ubuntu机器中配置了hadoop,hase,hive,sqoop。
raghu@system4:~/sqoop$ bin/sqoop-import --connect jdbc:mysql://localhost:3306/mysql --username root --password password --table user --hive-import -m 1
一切顺利,但是当我进入hive命令行并执行show tables时,什么都没有。我能够看到这些表是在HDFS中创建的。
我在Sqoop导入中看到了一些选项 - 它可以导入到Hive / HDFS / HBase。 导入Hive时,它确实直接导入HDFS。那为什么Hive?
我在哪里可以执行HiveQL来检查数据。
从cloudera支持,我明白我可以Hue并检查它。但是,我认为Hue只是Hive的用户界面。
有人可以帮助我。
提前致谢,
Raghu
答案 0 :(得分: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中保存数据的位置。
答案 1 :(得分: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
答案 2 :(得分:1)
当我们没有在sqoop import命令中给出任何数据库时,该表将在默认数据库中创建,其名称与RDBMS表名相同。 您可以通过" - hive-database"指定要在hive中导入RDBMS表的数据库名称。
答案 3 :(得分:0)
您可以使用sqoop的create-hive-table命令在hive中导入表结构,而不是每次都创建Hive表。它将表导入为managed_table,然后您可以通过将表属性更改为外部表然后添加分区将该表转换为外部表。这将减少找到正确数据类型的工作量。请注意,将进行精确更改
答案 4 :(得分:0)
每当您使用带有Hive导入选项的Sqoop时,sqoop直接连接相应的数据库的Metastore并获取相应表的元数据(表的模式),因此不需要在Hive中创建表结构。当与Hive-import选项一起使用时,此模式将提供给Hive。
因此HDFS上所有sqoop数据的输出默认存储在默认目录.i.e / user / sqoop / tablename / part-m files
使用hive导入选项,表格将直接下载到默认仓库目录中,即
/用户/蜂巢/仓库/表名 命令:sudo -u hdfs hadoop fs -ls -R / user / 这会以递归方式列出用户中的所有文件。
现在转到Hive并输入show databases.如果只有默认数据库, 然后输入show tables: 记住OK是常见的默认系统输出,不是命令输出的一部分。
蜂房>显示数据库;
行
默认
所用时间:0.172秒
蜂房> show tables;
行
类型
log_apache
电影
moviegenre
movierating
职业
用户
所用时间:0.111秒
答案 5 :(得分:0)
尝试像这样的sqoop命令,它为我工作并直接创建hive表,你不必每次都创建外部表
sqoop import --connect DB_HOST --username ***** --password ***** --query"从SCHEMA.TABLE中选择*其中\ $ CONDITIONS"
--num-mappers 5 --split-by PRIMARY_KEY --hive-import --hive-table HIVE_DB.HIVE_TABLE_NAME --target-dir SOME_DIR_NAME;
答案 6 :(得分:0)
您使用的命令将数据导入$ HIVE_HOME目录。如果未设置HIVE_HOME环境变量或指向错误的目录,您将无法看到导入的表。
查找配置单元主目录的最佳方法是使用Hive QL SET命令:
hive -S -e 'SET' | grep warehouse.dir
检索配置单元主目录后,将--hive-home <hive-home-dir>
选项附加到命令中。
另一个可能的原因是,在某些Hive设置中,元数据会被缓存,您无法立即看到更改。在这种情况下,您需要使用INVALIDATE METADATA;
命令刷新元数据缓存。