【问题标题】:How to integrate Hive (avro tables) with Schema Registry?如何将 Hive(avro 表)与 Schema Registry 集成?
【发布时间】:2017-11-07 06:15:08
【问题描述】:

Hive 提供了两个表属性允许定义 Avro 模式:avro.schema.literalavro.schema.url,其中前者可以指定 hdfs 路径或服务于模式的 http 端点。我想使用 Schema Registry 作为我的架构服务,但问题是它的 endpoints 返回架构包装在一个更大的 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\"}"
}

Hive 无法解析上述响应。

【问题讨论】:

    标签: hive registry schema avro


    【解决方案1】:

    我希望做和你一样的事情。我登录https://github.com/confluentinc/schema-registry/issues/629 以增强模式注册表以使其变得容易。希望该项目能够接受这个想法。看起来它应该是一个简单的增强实现。

    【讨论】:

    【解决方案2】:

    到目前为止,我的想法是在 Schema Registry 前面放置一个代理服务(服务纯 avro 模式)并使用 HAProxy 对其进行扩展。 Schema Registry 本身似乎有 scalable architecture 用于读取。老实说,我不明白AvroSerDe hive documentation中关于avro.schema.url属性的段落:

    指定用于访问架构的 URL。对于 http 模式,这 适用于测试和小规模集群,但架构将是 从作业中的每个任务至少访问一次,这可以快速 将作业变成针对 URL 提供程序的 DDOS 攻击(网络 服务器,例如)。使用此参数时要小心 除了测试之外的任何东西。

    我认为我的建议是一个可行的解决方案。

    在集中式存储库中包含架构允许架构演变和检查向后/向前兼容性,因此它比定义 hdfs 路径更好,这是 AvroSerDe 文档中推荐的。

    【讨论】:

    • 可以快速将作业变成 DDOS 攻击——这应该是显而易见的。每个映射任务都需要对 Schema 注册表执行 GET 请求。在大型集群中,您有数百个客户端访问相同的架构 url。将架构文件放在磁盘上不是瓶颈
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-06
    • 2019-10-24
    • 1970-01-01
    • 2018-09-27
    • 2018-07-30
    相关资源
    最近更新 更多