【问题标题】:How to write incremental data to hive using flink如何使用 flink 将增量数据写入 hive
【发布时间】:2018-11-05 03:18:02
【问题描述】:

我使用 flink 1.6,我知道我可以使用自定义 sink 和 hive jdbc 写入 hive,或者使用 JDBCAppendTableSink,但它仍然使用 jdbc。问题是 hive jdbc 不支持 batchExecute 方法。我认为它会是很慢。

然后我想办法,我用writeAsText方法将DataSet写入hdfs,然后从hdfs创建hive表。但是还有一个问题:如何追加增量数据。 WriteMode的api是:

Enum FileSystem.WriteMode
Enum Constant and Description
NO_OVERWRITE
Creates the target file only if no file exists at that path already.
OVERWRITE
Creates a new target file regardless of any existing files or directories.

例如,第一批,我将 9 月的数据写入 hive,然后我得到 10 月的数据,我想追加它。

但是如果我在同一个hdfs文件中使用OVERWRITE,9月份的数据将不再存在,如果我使用NO_OVERWRITE,我必须将它写入一个新的hdfs文件,然后一个新的hive表,我们需要它们在同一个配置单元表中。我不知道如何将 2 个 hdfs 文件组合到一个配置单元表中。

那么如何使用flink将增量数据写入hive呢?

【问题讨论】:

    标签: hadoop hive apache-flink


    【解决方案1】:

    正如您已经写的那样,没有 HIVE-Sink。我猜默认模式是将(文本、avro、parquett)文件写入 HDFS 并在该目录上定义一个外部配置单元表。在那里,您是否有单个文件或多个文件都没有关系。但是您很可能必须定期修复此表 (msck repair table <db_name>.<table_name>;)。这将更新元数据并且新文件将可用。

    对于更大量的数据,我建议对表进行分区并按需添加分区(这篇博文可能会给你一个提示:https://resources.zaloni.com/blog/partitioning-in-hive)。

    【讨论】:

      猜你喜欢
      • 2022-07-07
      • 1970-01-01
      • 1970-01-01
      • 2019-07-03
      • 1970-01-01
      • 2018-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多