将数据从 HDFS 加载到 Kudu

Posted

技术标签:

【中文标题】将数据从 HDFS 加载到 Kudu【英文标题】:Loading data from HDFS to Kudu 【发布时间】:2017-12-19 16:17:18 【问题描述】:

我正在尝试将数据加载到 Kudu 表但得到一个奇怪的结果。

在 Impala 控制台中,我从 Sqoop 导入的四个 HDFS 文件创建了一个外部表:

drop table if exists hdfs_datedim;
create external table hdfs_datedim
( ... )
row format
 delimited fields terminated by ','
location '/user/me/DATEDIM';

A SELECT COUNT(*) 告诉我存在很多行。查询时数据看起来不错。

我使用标准的 select into 来复制结果

INSERT INTO impala_kudu.DATEDIM
SELECT * FROM hdfs_datedim;

SELECT COUNT(*) 告诉我 impala_kudu.DATEDIM 有四行(HDFS 中的文件数不是表中的行数。

有什么想法吗?

【问题讨论】:

你能做一个select * from hdfs_datedim limit 10 看看结果是否确实是正确的形式? 是的。 'Select Count(*)' 返回 17,000 而不是 4。 'Select * ... limit 10' 返回十行看起来很完美。我也有同样的想法。源表看起来是正确的,但我很缺乏经验,很容易出错 这只发生在 kudu 表上吗?对我来说听起来像是一个错误。 我会尝试其他数据来源。好建议 【参考方案1】:

目前 Sqoop 还不支持 Kudu。您可以导入到 HDFS,然后使用 Impala 将数据写入 Kudu。

【讨论】:

我也试过了。它给了我一个通用的“权限被拒绝”消息。不幸的是,我不知道哪个权限被拒绝。另一位用户声称它会为任何类型的故障提供错误消息。【参考方案2】:

由 sqoop 创建的数据隐藏在一系列格式不佳的 csv 文件中。由于平面文件中的数据,导入失败且没有错误。注意日期格式和字符串中嵌入了分隔符的文本字符串。

【讨论】:

【参考方案3】:

如果你有 (csv/avro/parquet) 格式的 HDFS 数据,那么你可以使用下面的命令将文件导入 Kudu 表。

先决条件: Kudu jar 兼容版本(1.6 或更高版本)

spark2-submit  --master yarn/local  --class org.apache.kudu.spark.tools.ImportExportFiles <path of kudu jar>/kudu-spark2-tools_2.11-1.6.0.jar --operation=import --format=<parquet/avro/csv> --master-addrs=<kudu master host>:<port number>  --path=<hdfs path for data> --table-name=impala::<table name>

【讨论】:

以上是关于将数据从 HDFS 加载到 Kudu的主要内容,如果未能解决你的问题,请参考以下文章

将数据从hdfs加载到本地系统的有效方法?

将数据从 MySQL 加载到 HDFS 时出现 Sqoop 错误

将数据从 HDFS 加载到 HBASE

如何使用 PIG 将数据从本地系统加载到 hdfs

如何在不删除源文件的情况下将数据从 HDFS 加载到配置单元?

kudu表数据备份还原说明