2011-12-06 13 views
6

hadoop, SequenceFile anahtar-değer çifti (kayıt) biçiminde yazar. Büyük bir sınırsız günlük dosyasına sahip olduğumuzu düşünün. Hadoop dosyayı blok büyüklüğüne göre böler ve çoklu veri düğümlerine kaydeder. Her bir anahtar/değer çiftinin tek bir blokta yer alması garanti edilir mi? ya da anahtarın, düğüm 1'de bir blokta ve düğüm 2'de ikinci blokta değer (veya bunun parçaları) olacak şekilde bir durumumuz olabilir. Eğer baştan çıkarıcı-tam bölünmeler olabilirse, o zaman çözüm nedir? senkronizasyon işaretçileriBölme Sırası Denetimli bir şekilde - Hadoop

Başka bir soru şudur: hadoop otomatik olarak senkronizasyon işaretleri yazıyor mu yoksa el ile mi yazmalıyız?

cevap

9

Bu soruyu hadoop posta listesinde buldum. Cevap:

Senkronlama işaretçileri, sıralı dosyalara yazılmıştır, bunlar biçiminin parçasıdır. Bu endişelenecek bir şey değil - ve testine yetecek kadar basit ve emin olun. Mekanizma, yeni satırlarla bir metin dosyasının okunmasıyla aynıdır - okuyucu, gerekiyorsa bir kaydı tamamlamak için sınırın verilerini okumayı sağlayacaktır.

yüzden günlük dosyanın sadece ikinci bloğu analiz harita işi varsa, bu o kısmı çünkü diğer düğümlerden o başka hiçbir kısmını aktarmak olmamalı:

sonra sordum tek başına ve tam bölünme anlamına mı geliyor? Ben haklı mıyım

Onlar cevap verdi:

Evet. Basitçe söylemek gerekirse, kayıtlarınız asla kırılmaz. Yalnızca 'u bölünmüş sınırlarda okumaz, kayıtlarının veya kayıtlarının bir dizisini tamamlamak için senkronizasyona kadar sınırların ötesine uzanabiliriz. Sonraki haritacılar her zaman ilk senkronizasyon işaretine kadar atlarlar ve daha sonra okumaya devam ederler - çoğaltmayı önlemek için. Bu, metin dosyası okumasının tam olarak nasıl çalıştığını - sadece burada yeni satırdır.