【问题标题】:Copying data from HDFS to hive using SQOOP使用 SQOOP 将数据从 HDFS 复制到配置单元
【发布时间】:2018-04-29 07:26:34
【问题描述】:

我想将数据从HDFS 复制到hive 表。我尝试了下面的代码,但它没有抛出任何错误,并且数据也没有复制到提到的配置单元表中。以下是我的代码:

sqoop import --connect jdbc:mysql://localhost/sampleOne \
--username root \
--password root \
--external-table-dir "/WithFields" \
--hive-import \
--hive-table "sampleone.customers"   

sampleone 是 hive 中的数据库,customers 是 hive 中新创建的表,--external-table-dir 是我要在 hive 表中加载数据的 HDFS 路径。我在上面的代码中还缺少什么??

【问题讨论】:

  • 您不需要 Sqoop 将数据从 HDFS 复制到 Hive。只需使用您的 HDFS 位置创建 Hive 表或使用 hadoop fs -scp 命令将数据复制到现有 Hive 表位置
  • Stack Overflow 是一个编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参阅帮助中心的What topics can I ask about here。也许Super UserUnix & Linux Stack Exchange 会是一个更好的提问地点。

标签: hadoop hive hdfs sqoop


【解决方案1】:

如果数据在HDFS 中,则不需要Sqoop 来填充Hive 表。执行此操作的步骤如下:

这是 HDFS 中的数据

# hadoop fs -ls /example_hive/country
/example_hive/country/country1.csv

# hadoop fs -cat /example_hive/country/*
1,USA
2,Canada
3,USA
4,Brazil
5,Brazil
6,USA
7,Canada

这是 Hive 表创建 DDL

CREATE TABLE sampleone.customers
(
  id int, 
  country string
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n';

验证 Hive 表是否为空

hive (sampleone)> select * from sampleone.customers;
<no rows>

加载 Hive 表

hive (sampleone)> LOAD DATA INPATH '/example_hive/country' INTO TABLE sampleone.customers;

验证 Hive 表是否有数据

hive (sampleone)> select * from sampleone.customers;
1   USA
2   Canada
3   USA
4   Brazil
5   Brazil
6   USA
7   Canada

注意:这种方法会将数据从HDFS 上的/example_hive/country 位置移动到支持表的Hive 仓库目录(将再次位于HDFS)。

【讨论】:

  • 是的,我知道这一点。我想有什么方法可以通过 sqoop 传输数据,这就是我尝试的原因。无论如何,谢谢。
  • @Debugger Sqoop 在 HDFS 和 Hive 之间不使用。它用于 JDBC 数据库(如 Mysql 和 HDFS)之间,可选择创建或导出 Hive 表。
  • @Jagrut 您也可以跳过加载步骤,只需在包含数据文件的文件夹上创建一个外部表
  • @cricket_007 正确,这是另一种方式 - 可以创建指向现有 HDFS 目录的外部 Hive 表。该问题表明 Hive 表 sampleone.customers 已经可用。因此,我建议使用运行命令来填充它的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-25
  • 2014-12-25
  • 2012-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-04
相关资源
最近更新 更多