我想知道为啥我使用 sqoop 从 sqlserver 导入的 hive db 中的表正在消失

Posted

技术标签:

【中文标题】我想知道为啥我使用 sqoop 从 sqlserver 导入的 hive db 中的表正在消失【英文标题】:I wanted to know why the tables from hive db which I imported from sqlserver using sqoop is disappearing我想知道为什么我使用 sqoop 从 sqlserver 导入的 hive db 中的表正在消失 【发布时间】:2018-01-04 05:01:03 【问题描述】:

所以我正在尝试将所有表导入 hive db,即 hdfs 上的 user/hive/warehouse/...,使用以下命令:

sqoop import-all-tables --connect "jdbc:sqlserver://<servername>;database=<dbname>" \
--username "<username>" \
--password "<password>" \
--warehouse-dir "/user/hive/warehouse/" \
--hive-import \
-m 1

在testdatabase我有3个表,当mapreduce运行时,输出成功, 即,mapreduce 作业已 100% 完成,但在 hive db 上找不到该文件。

【问题讨论】:

你检查了 HDFS 中的哪个路径? 来自 sqlserver 的文件应该进入“/user/hive/warehouse”目录,但现在目录中只看到一个表,我弹出这个:“路径不存在在 HDFS 或 WebHDFS 上已禁用。请检查您的路径或启用 WebHDFS" 【参考方案1】:

它基本上被最后一个表覆盖了,尝试删除目录路径末尾的正斜杠。对于测试,我建议不要使用仓库目录,使用类似'/tmp/sqoop/allTables'

【讨论】:

我不确定它是否会被覆盖,因为现在我正在尝试创建一个 Hive 表,它在创建后显示 OK> 并在“显示表”中给出表名;命令,但是当我手动签入仓库时,该表不存在。这就是我创建表的方式: CREATE EXTERNAL TABLE IF NOT EXISTS XYZ(Code VARCHAR(25), Address(25), Date DATE, Type VARCHAR(25)) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE location ' /user/hive/warehouse/xyz';【参考方案2】:

还有一种方法 1.创建一个指向一个位置的hive数据库说“targetLocation” 2. 使用之前创建的数据库在您的 sqoop 导入中创建 hcatalog 表。 3. 使用目标目录导入选项指向目标位置。

【讨论】:

【参考方案3】:

你不需要定义仓库目录。只需定义hive数据库它会自动找到工作目录。

sqoop import-all-tables --connect "jdbc:sqlserver://xxx.xxx.x.xxx:xxxx;databaseName=master" --username xxxxxx --password xxxxxxx --hive-import --create-hive-table  --hive-database test -m 1

它会像火箭一样运行。

希望它对你有用....

【讨论】:

以上是关于我想知道为啥我使用 sqoop 从 sqlserver 导入的 hive db 中的表正在消失的主要内容,如果未能解决你的问题,请参考以下文章

使用 Sqoop 将来自 MySQL 的数据加载到 PIG

sqoop从mysql导入到hive为啥0变成null

为啥我在 Azkaban 中的 Sqoop 任务在选择列后卡住了?

hadoop:sqoop——为啥jdbc代码是用reducers写的?

Sqoop - 是不是可以在 HDFS 中导入平面文件

Sqoop从hive导数据到mysql中为啥一直报 ERROR tool.ExportTool: