我使用了flink 1.6,我知道我可以使用自定义接收器和hive jdbc来写入hive,或者使用JDBCAppendTableSink,但它仍然使用jdbc。问题是配置单元jdbc不支持batchExecute方法。我想它会很慢。
然后我寻求另一种方法,我用writeAsText方法将数据集写入hdfs,然后从hdfs创建配置单元表。但仍然存在一个问题:如何附加增量数据。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月份的数据写到蜂箱,然后我得到10月份的数据,我想把它附加上去
但如果我对同一个hdfs文件使用OVERWRITE
,9月份的数据将不再存在,如果我使用NO_OVERWRITE
,我必须将其写入一个新的hdfs文件,然后写入一个新密单元表,我们需要它们在同一个密单元表中。我不知道如何将2个hdfs文件组合成一个hive表。
那么,如何使用flink将增量数据写入hive?
正如您已经写过的,没有HIVE接收器。我想默认模式是将(text、avro、parquett(文件写入HDFS,并在该目录上定义一个外部配置单元表。在那里,不管你有一个文件还是多个文件。但您很可能必须定期修复此表(msck repair table <db_name>.<table_name>;
(。这将更新元数据,并且新文件将可用。
对于较大的数据量,我建议对表进行分区,并根据需要添加分区(这篇博客文章可能会给你一个提示:https://resources.zaloni.com/blog/partitioning-in-hive)。