将数据从 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的主要内容,如果未能解决你的问题,请参考以下文章
将数据从 MySQL 加载到 HDFS 时出现 Sqoop 错误