/ / Як працює еволюція схеми Avro? - hadoop, avro

Як працює еволюція схеми Avro? - хадоп, авро

Я новачок у Hadoop і програмуванні, і я трохи заплутався в еволюції схеми Avro. Поки я поясню, що я розумію про Авро.

Avro - це інструмент серіалізації, який зберігає двійкові дані зі своєю схемою json у верхній частині. Схема виглядає так.

{
"namespace":"com.trese.db.model",
"type":"record",
"doc":"This Schema describes about Product",
"name":"Product",
"fields":[
{"name":"product_id","type": "long"},
{"name":"product_name","type": "string","doc":"This is the name of the product"},
{"name":"cost","type": "float", "aliases":["price"]},
{"name":"discount","type": "float", "default":5}
]
}

Тепер моє питання, чому нам потрібно еволюції? Я прочитав, що ми можемо використовувати default у схемі для нових полів; але якщо додати нову схему у файл, то попередня схема буде перезаписана. Ми не можемо мати дві схеми для одного файлу.

Інше питання, які схеми читача і письменника і як вони допомагають?

Відповіді:

8 для відповіді № 1

Якщо у вас є один файл avro і ви хочете змінитийого схему, ви можете переписати цей файл з новою схемою всередині. Але що, якщо у вас є терабайти файлів avro, і ви хочете змінити їх схему? Чи будете ви перезаписувати всі дані, кожен раз при зміні схеми?

Еволюція схеми дозволяє оновити схемувикористовується для запису нових даних, зберігаючи зворотна сумісність зі схемою (ами) ваших старих даних. Тоді ви можете прочитати всі разом, як якщо б всі дані мали одну схему. Звичайно, існують чіткі правила, що регулюють дозволені зміни, щоб підтримувати сумісність. Ці правила перелічені нижче Роздільна схема.

Є й інші випадки використання для читача і письменникасхеми, що виходять за межі еволюції. Можна використовувати пристрій читання як фільтр. Уявіть собі дані з сотнями полів, про які вас цікавить лише жменька. Ви можете створити схему для кількох полів, щоб прочитати лише потрібні дані. Ви можете піти в іншу сторону і створити схему читача, яка додає дані за замовчуванням, або використовувати схему, щоб приєднатися до схем двох різних наборів даних.

Або можна просто використовувати одну схему, яка ніколи не змінюється, як для читання, так і для запису. Це найпростіший випадок.