Hadoop

2011-05-08 33 views
6

ile büyük boyutlu küçük dosyaların işlenmesi Hadoop örnek programı WordCount kullanarak büyük boyutlu küçük dosya/web sayfalarını (cca. 2-3 kB) işlemek için kullanıyorum. Bu, hadoop dosyaları için en uygun dosya boyutundan uzak olduğu için, program çok yavaş. Sanırım işin ayarlanması ve yırtılması işi işin kendisinden çok daha büyük olduğu için. Bu gibi küçük dosyalar, dosya adlarına yönelik ad boşluklarının tüketilmesine de neden olur. Hadoop

Ben bu durumda ben HDF'ler arşiv (HAR) kullanması gerektiğini okumak, ama bu arşivlerinden okumak için bu programı wordcount nasıl değiştirileceğini emin değilim. Program değişiklik yapmadan çalışmaya devam edebilir mi yoksa bazı değişiklikler gerekli mi?

Arşivlerde çok fazla dosya yüklesem bile, performansın artması durumunda soru devam eder. Birden fazla dosya toplasam bile, bir arşiv içindeki bu dosyaların bir mapper tarafından işlenmeyeceğini, ancak benim durumumda (sanırım) performansın artmayacağını birçok kişi tarafından okunduğumu okudum.

bu soru çok basittir, ben Hadoop için Newbie ve onunla çok az deneyime sahip olduğunu anlamak yeterli.

cevap

4

HDFS'yi kullanmak, büyük miktarda küçük dosya işlemek için hadoop uygulamasına neden olduğunu değiştirmeyecektir. Bu durumda en iyi seçenek muhtemelen dosyaları cat tek (veya birkaç büyük) dosyaya. Bu, sahip olduğunuz eşleştiricilerin sayısını azaltacak ve işlenmesi gereken şeylerin sayısını azaltacaktır.

Dağıtılmış bir sistem üzerinde çalışıyorsanız, HDFS'yi kullanmak performansı artırabilir. Sadece psuedo dağıtılmış (bir makine) yapıyorsanız, HDFS performansı artırmayacaktır. Sınırlama makinedir. Eğer küçük dosyalar çok sayıda faaliyet gösterdiğini zaman

, o haritacılarla ve düşürücüler çok sayıda gerektirecektir. Kurulum/indirme, dosyanın kendisinin işlem süresiyle karşılaştırılabilir ve bu da büyük bir yüke neden olabilir. cat, dosyaların işlenmesinde, iş için çalışan eşleştiricilerin sayısını azaltmalı ve bu da performansı artırmalıdır.

Birden makineleriyle, dağıtık modda olacağını dosyaları depolamak için HDF'ler kullanarak görebiliyordu yarar. Dosyalar makineler arasında bloklar halinde (varsayılan 64MB) saklanacak ve her makine, makinede bulunan bir veri bloğunu işleyebilecek. Bu ağ bant genişliği kullanımını azaltır, bu nedenle işlemede bir darboğaz haline gelmez.

Dosyaların arşivlenmesi, eğer hadoop arşivden çıkmayacaksa, hadoop'un hala çok sayıda küçük dosyaya sahip olmasına neden olacaktır.

Bu, anlayışınıza yardımcı olacağını umarız. Benim hala sınırlı anlayış og Hadoop'un itibaren

1

Eğer Hadoop'un onları göndermeden önce dosyaları birleştirir mi?

+0

Sanırım yapabilirim, ancak sayfanın URL'sini/adresini ilk satırına koyduğum için, yeni bir sayfanın mı yoksa başka bir sayfaya düzenli olarak bağlandığının farkına varmak biraz zor olacaktır. – Sasa

3

, doğru çözüm anahtarı olarak SequenceFile (ler) muhtemelen değerler gibi HTML dosyalarını içeren URL oluşturmak olacağına inanıyorum. SequenceFile (s) üzerinden bir M/R işi yaparsanız, her bir mapper birçok dosyayı işleyecektir (bölünen boyuta bağlı olarak). Her dosya, harita fonksiyonuna tek bir giriş olarak sunulacaktır. Bu dosyaları okumak için SequenceFileAsTextInputFormat'u InputFormat olarak kullanmak isteyebilirsiniz.

Ayrıca bakınız: Providing several non-textual files to a single map in Hadoop MapReduce

0

CombineFileInputFormat küçük dosyaların büyük numaber için iyi çalışıyor bu durumda kullanılabilir. Bu, bu tür dosyaların çoğunu tek bir bölünmüş olarak paketler, böylece her bir eşleştirmenin işlenmesi daha fazladır (1 bölme = 1 harita görevi). Mapreduce için genel işlem süresi, aynı zamanda daha az sayıda eşleştiricinin çalışması nedeniyle düşecektir. CombineFileInputFormat kullanarak arşivi tanımayan bir InputFormat olmadığından, performansı artırır.