HDFS — katta fayllarni ko‘p serverdan iborat clusterda blocklarga bo‘lib saqlaydigan distributed filesystem. Uning to‘liq nomi Hadoop Distributed File System hisoblanadi.
HDFS yirik fayllarni yuqori throughput bilan ketma-ket o‘qish va yozish uchun optimallashtirilgan. U node failure holatini replication orqali boshqaradi.
Fayl va block
HDFS faylni yirik blocklarga bo‘ladi.
Masalan, katta file:
Block 1
Block 2
Block 3
...
ko‘rinishida turli DataNode’larda saqlanadi.
Block hajmi oddiy local filesystem blockidan ancha katta bo‘lishi mumkin.
NameNode
NameNode filesystem metadata’sini boshqaradi.
U:
- directory tree;
- file nomi;
- permission;
- file blocklari;
- block qaysi DataNode’da;
- replication policy
haqida ma’lumot saqlaydi.
NameNode odatda file contentni o‘zi uzatmaydi.
DataNode
DataNode block fayllarini lokal storage’da saqlaydi.
U:
- block read;
- block write;
- checksum;
- replication;
- deletion;
- block report
amallarini bajaradi.
Client NameNode’dan block manzilini olib, DataNode bilan bevosita aloqa qiladi.
Read jarayoni
- NameNode’dan file block locationlarini so‘raydi;
- eng yaqin replica tanlanadi;
- DataNode’dan block o‘qiladi;
- keyingi blockka o‘tiladi.
Agar DataNode xato bersa boshqa replica ishlatiladi.
Checksum data corruptionni aniqlashga yordam beradi.
Write jarayoni
Client NameNode’dan yangi block uchun DataNode pipeline oladi.
Data oqimi birinchi DataNode’ga, keyin replica pipeline bo‘ylab boshqalarga uzatiladi.
Acknowledgement teskari yo‘nalishda qaytadi.
Replica soni va pipeline holati write durabilityga ta’sir qiladi.
Replication factor
Har block nechta nusxada saqlanishini belgilaydi.
Masalan:
replication factor = 3
Bitta block uch DataNode’da mavjud bo‘ladi.
Ko‘p replica availability va read imkoniyatini oshiradi, ammo storage sarfini ko‘paytiradi.
Rack awareness
Replica’lar bir rack ichida yig‘ilib qolmasligi uchun NameNode network topology’dan foydalanadi.
Agar rack power yoki switch failure yuz bersa boshqa rackdagi nusxa saqlanadi.
Placement locality va fault tolerance o‘rtasida muvozanat qiladi.
Heartbeat
DataNode NameNode’ga muntazam heartbeat yuboradi.
Heartbeat uzoq vaqt kelmasa node ishlamayapti deb hisoblanadi.
Uning blocklari boshqa node’larda kerakli replication factorgacha ko‘paytiriladi.
Block report
DataNode o‘zida mavjud blocklar ro‘yxatini yuboradi.
NameNode metadata bilan solishtirib:
- missing block;
- ortiqcha replica;
- noma’lum block;
- replication zarurati
ni aniqlaydi.
Katta clusterda block report hajmi sezilarli bo‘lishi mumkin.
Under-replicated block
Replica soni kerakli qiymatdan kam bo‘lsa block under-replicated.
NameNode boshqa DataNode’ga yangi nusxa yaratishni buyuradi.
Cluster disk yoki networki yetishmasa recovery sekinlashadi.
Over-replicated block
Replica soni policy’dan ko‘p bo‘lsa ortiqcha nusxalar o‘chiriladi.
Qaysi replica o‘chirilishi rack topology va disk balansiga qarab tanlanadi.
Node qaytib kelganda vaqtincha over-replication yuz berishi mumkin.
Append va immutable model
HDFS katta faylni bir marta yozib, ko‘p marta o‘qish modeliga yaqin.
Random in-place update oddiy local filesystem kabi qulay emas.
Data pipeline yangi file yoki partition yaratadi.
Ayrim append imkoniyatlari mavjud bo‘lsa ham workload modeli hisobga olinadi.
Kichik fayllar
Har kichik file NameNode metadata’sida alohida entry va block yaratadi.
Ko‘p kichik file:
yukini oshiradi.
Ular yirik columnar file yoki archive’ga birlashtiriladi.
High availability
NameNode critical service bo‘lgani sabab active va standby model ishlatilishi mumkin.
Standby metadata loglarini kuzatib boradi.
Failoverda:
bajariladi.
Checkpoint
Namespace image va edit loglar davriy birlashtiriladi.
Bu NameNode restartida replay qilinadigan log hajmini kamaytiradi.
Checkpoint backupning to‘liq o‘rnini bosmaydi.
Metadata image va edit loglar himoyalanadi.
Balancer
Cluster node’lari disk foydalanishi notekis bo‘lsa balancer blocklarni ko‘chiradi.
Balancing:
bilan muvofiqlashtiriladi.
Yangi node qo‘shilganda data avtomatik darhol teng taqsimlanmasligi mumkin.
Decommission
DataNode rejalashtirilgan olib tashlashdan oldin decommission qilinadi.
Undagi blocklar boshqa node’larda kerakli replica soniga yetkaziladi.
Shundan keyin node xavfsiz o‘chiriladi.
To‘g‘ridan-to‘g‘ri o‘chirish ko‘p under-replicated block yaratishi mumkin.
Erasure coding
Katta, sovuq data uchun to‘liq replica o‘rniga data va parity fragmentlari saqlanishi mumkin.
Bu storage sarfini kamaytiradi.
Kamchiligi:
- recovery compute;
- ko‘proq fragment read;
- kichik file uchun samarasizlik;
- network.
Permission
HDFS Unixga o‘xshash owner, group va permission modeliga ega bo‘lishi mumkin.
Qo‘shimcha ACL va authentication ishlatiladi.
Filesystem permission application-level row securityning o‘rnini bosmaydi.
Safemode
NameNode ishga tushganda vaqtincha safemode’da bo‘lishi mumkin.
Bu davrda u DataNode block reportlarini kutadi va yetarli replica mavjudligini baholaydi.
Safemode vaqtida read ishlashi mumkin, ammo namespace write va replication operationlari cheklanadi.
Federation
Juda katta namespace bir nechta mustaqil NameNode orqali bo‘linishi mumkin.
Har NameNode alohida namespace va block poolni boshqaradi.
DataNode bir nechta block poolga xizmat qilishi mumkin.
Bu metadata scale’ini oshiradi, ammo namespace’lar orasidagi operationlar murakkabroq.
Snapshot
Directory snapshoti ma’lum vaqtdagi namespace holatini saqlashi mumkin. U accidental delete’dan tez tiklashga yordam beradi, ammo boshqa clusterda saqlanadigan mustaqil backupning o‘rnini bosmaydi.
Bog‘liq tushunchalar
Hadoop Distributed File System, NameNode, DataNode, Block, Replication factor, Rack awareness, Checkpoint, Erasure coding, Distributed storage