我使用flink 1.6,我知道我可以使用自定义接收器和配置单元jdbc来写入配置单元,或者使用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文件合并到配置单元表中。
那么如何使用flink将增量数据写入配置单元?
答案 0 :(得分:0)
正如您已经写过的,没有HIVE接收器。我猜默认模式是将文件(文本,avro,parquett)写入HDFS,并在该目录上定义一个外部配置单元表。那里是单个文件还是多个文件都没有关系。但是您很可能必须定期修复此表(msck repair table <db_name>.<table_name>;
)。这将更新元数据,并且新文件将可用。
对于大量数据,我建议对表进行分区并按需添加分区(此博客文章可能会提示您:https://resources.zaloni.com/blog/partitioning-in-hive)。