hive提供了两个表属性,允许定义avro架构: avro.schema.literal
以及 avro.schema.url
,其中前者可以指定为模式服务的hdfs路径或http端点。我想使用schema registry作为我的模式服务,但问题是它的端点返回 Package 在更大json对象中的模式:
请求:
GET /schemas/ids/1
答复:
HTTP/1.1 200 OK
Content-Type: application/vnd.schemaregistry.v1+json
{
"schema": "{\"type\": \"string\"}"
}
请求:
GET /subjects/test/versions/1
答复:
HTTP/1.1 200 OK
Content-Type: application/vnd.schemaregistry.v1+json
{
"name": "test",
"version": 1,
"schema": "{\"type\": \"string\"}"
}
配置单元无法解析上述响应。
2条答案
按热度按时间oxiaedzo1#
我想做和你一样的事。我登录了https://github.com/confluentinc/schema-registry/issues/629 对schema注册表的增强使这变得容易。希望这个项目能接受这个想法。它似乎应该是一个简单的增强来实现。
4ioopgfo2#
到目前为止,我的想法是在schema registry前面放置一个代理服务(服务于纯avro模式)并用haproxy扩展它。模式注册表本身似乎有可扩展的读体系结构。老实说,我不明白这段关于
avro.schema.url
avroserde配置单元文档中的属性:指定从中访问架构的url。对于http模式,这适用于测试和小规模集群,但由于该模式将从作业中的每个任务至少访问一次,因此这可以快速将作业转化为针对url提供者(例如web服务器)的ddos攻击。将此参数用于测试以外的任何操作时,请小心。
我认为我的建议是一个可行的解决办法。
在集中式repo中拥有模式允许模式演化和检查向后/向前兼容性,因此它比在avroserde文档中推荐的定义hdfs路径要好。