Hiveは、Avroスキーマを定義できる2つのテーブルプロパティを提供します。avro.schema.literal
およびavro.schema.url
(前者は、スキーマを処理するhdfsパスまたはhttpエンドポイントを指定できます)。私は自分のスキーマサービスとしてSchema Registryを使用したいのですが、問題が大きなJSONオブジェクトに包まれたそのendpoints戻りスキーマです:Hive(avroテーブル)をスキーマレジストリに統合する方法は?
要求:
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によって解析できません。
*はすぐにジョブをDDOS攻撃に変えることができます* - これは明らかです。各マップタスクは、スキーマレジストリに対してGET要求を実行する必要があります。大規模なクラスタでは、何百ものクライアントが同じスキーマURLを使用しています。スキーマファイルをディスク上に置くことでボトルネックが少なくなる –