【问题标题】:Loading data from HDFS to Kudu将数据从 HDFS 加载到 Kudu
【发布时间】:2026-01-08 03:55:01
【问题描述】:

我正在尝试将数据加载到 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 表上吗?对我来说听起来像是一个错误。
  • 我会尝试其他数据来源。好建议

标签: hdfs impala sqoop apache-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>
    

    【讨论】: