Neden bir kovan sorgusunun sonuçları birden çok dosyaya bölünür?

Kovanı çalıştırmak için kurulmuş bir Amazon ElasticMapreduce işim var.

CREATE EXTERNAL TABLE output_dailies (
day string, type string, subType string, product string, productDetails string, 
uniqueUsers int, totalUsers int
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE
LOCATION '${OUTPUT}';

INSERT OVERWRITE TABLE output_dailies
select day, type, subType, product, productDetails, count(distinct accountId) as uniqueUsers, count(accountId) as totalUsers from raw_logs where day = '${QUERY_DATE}' group by day, type, subType, product, productDetails;

İş bittikten sonra, S3 üzerinde olacak şekilde yapılandırılmış çıkış konumu, bu kalıpla task_201110280815_0001_r_00000x olmak üzere 5 dosya içerecektir. Burada x, 0 ile 4 arasındadır. Dosyalar her biri 35 KB küçüktür.

Sonuçları tek bir dosyada saklamak için kovana talimat vermek mümkün mü?

3

2 cevap

Genel anlamda evet bu yapılabilir ancak bazı ölçeklenebilirlik kaybıyla mümkündür.

Ayarı kullanmayı deneyin

"set mapred.reduce.tasks = 1;"

Bu 1 redüktörü zorlar ve bu nedenle sadece 1 dosya çıkışı olacaktır.

2
katma

Farklı veri düğümleri tarafından oluşturulur. Her biri dosyaya ekleniyor - hepsi aynı dosyaya eklenmek zorunda kaldıysa, bu çok sayıda kilitleme gerektiriyor ve yavaşlatıyor.

Birden çok dosyayı, yalnızca dizine ve tüm içeriğine bakarak büyük bir dosya olarak ele alabilirsiniz.

1
katma
2 aylık veriyi içeren günlüklerimden en küçük tarihi ve en büyük tarihi bulmaya çalışıyorum. EMR, her bir farklı veri düğümünden 5 farklı çıkış dosyasına min-max tarihlerini yayar. Sonuç olarak 5 farklı çıkış dosyasında 5 dakikalık tarihler ve 5 maksimum tarihler alıyorum. Bu benim amacım değil mi? Tüm veri kümesi boyunca ONE min tarihini ve ONE max tarihini bulmak için hepsini tek bir çıkış dosyasına nasıl yoğunlaştırırım?
katma yazar Syed Rakib Al Hasan, kaynak
Sağol Alex. Amaçlarımın içindekileri sadece bir dosyada birleştirebilirim.
katma yazar zsolt, kaynak