2016-04-15 62 views
6

Hadoop -getmerge nasıl çalışır? Hadoop getmerge açıklamada

Kullanımı: HDF'ler dfs -getmerge src localdst [addnl]

getmerge neden kendisini HDF'ler değil yerel hedefe birleştirerek neden Sorum şu? Bu soru şu soruna sahip olduğum için sorulmuştum

  1. Birleştirilecek dosyalar yerel boyuttan daha fazlaysa ne olur?
  2. hadoop -getmerge komutunu yalnızca yerel hedefle birleştirmek için kısıtlamanın ardında belirli bir neden var mı?
+0

Bunun sorununun olmadığını biliyorum, ancak belki de bu yazıyı yararlı bulabilirsin: http: //stackoverflow.com/questions/21776339/hadoop-getmerge-to-another-machine – vefthym

cevap

6

getmerge komutu, özellikle HDFS dosyalarının yerel dosya sistemindeki tek bir dosyaya birleştirilmesi için oluşturulmuştur.

Bu komut, bir MapReduce işinin çıktısını indirmek için çok kullanışlıdır. Bu, birden çok part-* dosyası oluşturabilir ve bunları yerel olarak tek bir dosyada birleştirebilir, diğer işlemler için kullanabilirsiniz (örneğin, Sunum için Excel sayfası). Sorularınıza

Yanıtlar:

  1. hedef dosya sistemi yeterli alan yoksa, o zaman IOException atılır. getmerge dahili olarak, bir dosyayı bir defada HDFS'den yerel dosyaya kopyalamak için IOUtils.copyBytes() (bkz. IOUtils.copyBytes()) işlevini kullanır. Bu işlev, kopyalama işleminde bir hata olduğunda IOException'u atar.

  2. Bu komut, dosyayı HDFS'den yerel dosya sistemine alan hdfs fs -get komutu gibi benzer satırlardadır. Tek fark, hdfs fs -getmerge, HDFS'den yerel dosya sistemine birçok dosyayı birleştirir.

Eğer HDF'ler içinde birden fazla dosya birleştirme istiyorsanız

, sen FileUtil sınıfı ( FileUtil.copyMerge() bakınız) den copyMerge() yöntemini kullanarak bunu başarabilirsiniz. Bu API bir dizindeki tüm dosyaları tek bir dosyaya kopyalar (tüm kaynak dosyaları birleştirir).

+0

Cevabınız için teşekkürler, – monic

+1

Dosyaları hdfs'tan hdfs'a direkt olarak birleştirebileceğim bir alternatif var mı? – monic

+1

Bunun için komut satırı işlevi yoktur. Cevapta bahsettiğim gibi, program aracılığıyla "FileUtil.copyMerge()" yi kullanmanız veya burada belirtildiği gibi bazı Linux kabuk betiklerini kullanmanız gerekir: http://stackoverflow.com/questions/3548259/merging-multiple-files-into- bir mesafede-Hadoop'un. Örneğin hadoop fs -cat [dir]/* | hadoop fs -put - [hedef dosya] –