【发布时间】:2019-08-23 20:22:34
【问题描述】:
我正在为 MR 作业使用框架代码。该作业的输入和输出都是 NullWritable。我必须使用这个骨架,但我还必须将这个作业中的数据写入 HDFS。此外,我写的数据必须可以通过 Hive 查询。
有没有办法做到这一点?
我知道如何通过 Java 中的 hadoop 文件系统 API 导航和操作文件。我遇到的主要问题是使这些文件可通过 Hive 查询。
【问题讨论】:
我正在为 MR 作业使用框架代码。该作业的输入和输出都是 NullWritable。我必须使用这个骨架,但我还必须将这个作业中的数据写入 HDFS。此外,我写的数据必须可以通过 Hive 查询。
有没有办法做到这一点?
我知道如何通过 Java 中的 hadoop 文件系统 API 导航和操作文件。我遇到的主要问题是使这些文件可通过 Hive 查询。
【问题讨论】:
最简单的方法是创建一个指向 HDFS 中某个位置的外部 Hive 表。然后让您的 MR 作业以与 Hive 方案一致的格式将文件写入同一位置(反之亦然,创建 Hive 模式以匹配 MR 作业输出的预期格式)。
create external table if not exists dbname.tblname
(field1 STRING
,field2 STRING
,field3 STRING)
row format delimited
lines terminated by ‘\n’
fields terminated by ‘,’
stored as textfile
location ‘hdfs_path’;
那么如果你的 MR 作业将包含 field1、field2 和 field3 的 CSV 文件写入 hdfs_path,它们将可以通过这个外部表进行查询。
【讨论】: