本文已参与「新人创作礼」活动,一起开启掘金创作之路。
1.5.7 Schema
schema.compatibility
连接器观察架构更改时要使用的架构兼容性规则。支持的配置为NONE,BACKWARD,FORWARD和FULL。
- 类型:字符串
- 默认值:无
- 重要性:高
1.6 格式和分区
如果要将其他格式写入HDFS或使用其他分区程序format.class,partitioner.class则需要指定和。以下示例配置演示了如何编写Parquet格式和使用每小时分区程序:
format.class=io.confluent.connect.hdfs.parquet.ParquetFormat
partitioner.class=io.confluent.connect.hdfs.partitioner.HourlyPartitioner
注意:
如果要使用字段分区器,则还需要指定
partition.field.name配置以指定记录的字段名称。
1.7 蜂巢整合
至少,你需要指定hive.integration,hive.metastore.uris并 schema.compatibility整合蜂巢时。这是一个示例配置:
hive.integration=true
hive.metastore.uris=thrift://localhost:9083 # FQDN for the host part
schema.compatibility=BACKWARD
您应该hive.metastore.uris根据您的Hive配置进行调整。
注意
如果您未指定hive.metastore.uris,则连接器将在运行连接器的目录中将本地元存储与Derby一起使用。您需要在此目录中运行Hive才能查看Hive元数据的更改。
注意
由于连接器任务长时间运行,因此与Hive Metastore的连接将保持打开状态,直到任务停止为止。在默认的Hive配置中,重新连接到Hive Metastore将创建一个新连接。当任务数量很大时,重试可能导致打开的连接数超过操作系统中允许的最大连接数。因此建议设置hcatalog.hive.client.cache.disabled为truein hive.xml。
此外,为了支持模式演变的schema.compatibility是BACKWARD,FORWARD和 FULL。这样可以确保Hive可以使用最新的Hive表架构查询使用不同架构写入HDFS的数据。有关架构兼容性的更多信息,请参见Schema Evolution。
1.8 安全的HDFS和Hive Metastore
要使用安全的HDFS和蜂巢metastore工作,你需要指定hdfs.authentication.kerberos, connect.hdfs.principal,connect.keytab,hdfs.namenode.principal:
hdfs.authentication.kerberos=true
connect.hdfs.principal=connect-hdfs/_HOST@YOUR-REALM.COM
connect.hdfs.keytab=path to the connector keytab
hdfs.namenode.principal=namenode principal
您需要通过Kerberos创建Kafka连接主体和密钥表文件,并将密钥表文件分发给运行连接器的所有主机,并确保只有连接器用户具有对密钥表文件的读取访问权限。
注意
当启用安全,您需要使用的FQDN的主机部分 hdfs.url和hive.metastore.uris。
注意
当前,连接器要求在运行连接器的所有主机上,主体和密钥表路径必须相同。hdfs.namenode.prinicipal需求的主机部分必须是Namenode主机的实际FQDN,而不是_HOST占位符。
1.9 模式演变
重要
仅当使用默认命名策略()生成记录时,方案演化才有效TopicNameStrategy。如果使用其他命名策略,则可能会发生错误。这是因为记录彼此不兼容。如果使用其他命名策略,schema.compatibility则应设置为NONE。这可能会导致目标文件较小,因为每次模式ID在记录之间更改时,接收器连接器都会创建一个新文件。有关命名策略的更多信息,请参见主题名称策略。
HDFS连接器支持架构演变,并根据schema.compatibility配置对数据的架构更改做出反应 。在本部分中,我们将说明连接器如何在不同的值下对架构演变做出反应schema.compatibility。的 schema.compatibility可设置为NONE,BACKWARD,FORWARD和FULL,这意味着没有兼容性,向后兼容性,前向兼容性和FULL兼容性分别。
-
否兼容性:默认情况下,
schema.compatibility设置为NONE。在这种情况下,连接器确保每个写入HDFS的文件都具有正确的架构。当连接器观察到数据中的架构更改时,它会为受影响的主题分区提交当前文件集,并将具有新架构的数据写入新文件中。 -
向后兼容性:如果以向后兼容的方式发展模式,我们总是可以使用最新的模式统一查询所有数据。例如,删除字段是对模式的向后兼容更改,因为当我们遇到使用旧模式编写的包含这些字段的记录时,我们可以忽略它们。添加具有默认值的字段也向后兼容。
如果
BACKWARD在中指定schema.compatibility,则连接器将跟踪用于将数据写入HDFS的最新模式,并且如果到达具有比当前最新模式更大的模式版本的数据记录,则连接器将提交当前文件集并写入数据记录与新架构的新文件。对于使用较早版本的架构在以后到达的数据记录,连接器将数据记录投影到最新的架构,然后再写入HDFS中的同一组文件。 -
FORWARD兼容性:如果以向前兼容的方式发展模式,我们总是可以使用最早的模式统一查询所有数据。删除具有默认值的字段是向前兼容的,因为缺少该字段时,旧模式将使用默认值。
如果
FORWARD在中指定schema.compatibility,则连接器会将数据投影到最早的架构,然后再写入HDFS中的同一组文件。 -
完全兼容性:完全兼容性意味着可以使用新架构读取旧数据,也可以使用旧架构读取新数据。
如果
FULL在中指定schema.compatibility,则连接器执行与相同的操作BACKWARD。
如果蜂巢集成启用时,我们需要指定schema.compatibility为BACKWARD, FORWARD或FULL。这样可以确保Hive表架构能够查询使用不同架构编写的主题下的所有数据。如果将schema.compatibility设置为BACKWARD或 FULL,则主题的Hive表架构将等同于该主题下的HDFS文件中的最新架构,该架构可以查询该主题的整个数据。如果将schema.compatibility设置为FORWARD,则主题的Hive表架构等同于该主题下的HFDS文件的最早架构,该架构可以查询该主题的整个数据。