2016-03-24 26 views
4

Küçük dosyalar sorununu, hadoop'ta yer alan Bölüm üzerine yazma komutuyla kovan bölümleri altındaki dosyaları sıkıştırarak gidermeyi deneyin.Eklenti üzerine yazma ekleme bölümünü kullanma

Sorgu:

SET hive.exec.compress.output=true; 
SET mapred.max.split.size=256000000; 
SET mapred.output.compression.type=BLOCK; 
SET mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec; 
set hive.merge.mapredfiles=true; 
set hive.merge.size.per.task=256000000; 
set hive.merge.smallfiles.avgsize=256000000; 


INSERT OVERWRITE TABLE tbl1 PARTITION (year=2016, month=03, day=11) 
SELECT col1,col2,col3 from tbl1 
WHERE year=2016 and month=03 and day=11; 

Girdi Dosyalar: test amaçla

Ben 40 MB büyüklüğünde HDF'ler içinde kovan bölümü (2016/03/11) altında üç dosya var her./11/file1.csv

2016/03/11/file2.csv

2016/03/11/file3.csv

Örnek benim bloğu

2016/03 boyut 128, bu yüzden sadece bir çıktı dosyası oluşturmak istiyorum. Ama 3 farklı sıkıştırılmış dosya alıyorum.

Lütfen çıktı dosya boyutunu kısıtlamak için kovan yapılandırmasını almama yardım edin. Sıkıştırma kullanmıyorsam, tek dosyayı alıyorum.

Hive Versiyon: 1.1

cevap

1

Bu dinamik bölümleme içine bakmak veya bölümleme hendek ve haritacılarla ve düşürücüler sayısına odaklanmak isteyebilirsiniz sıkıştırma kullanırken bölüm belirtirken yine 3 dosya alıyorsanız olması ilginç işiniz tarafından yaratılıyor. Dosyalarınız küçükse, bunların hepsini hedefinizdeki tek bir dosyada nasıl görmek istediğinizi görebiliyordum, ancak daha sonra bunlara sıkıştırma ihtiyacını da sorgulayacağım.

hedefinize oluşturulan dosyaların sayısı doğrudan düşürücüler ya da haritacılarımızdan sayısına bağlıdır. Yazdığınız SQL'in düşürülmesi gerekiyorsa, oluşturulan dosya sayısı işte kullanılan redüktörlerin sayısıyla aynı olacaktır. Bu, işte kullanılan redüktörlerin sayısı ayarlanarak kontrol edilebilir. orada örnek SQL

set mapred.reduce.tasks = 1; 

büyük olasılıkla kullanılan herhangi düşürücüler olmaz, bu nedenle hedefteki dosya sayısı kaynaktaki dosyaların sayısına eşittir kullanılan haritacıları sayısına eşittir. Yalnızca bir işteki çıktı dosyalarının sayısını kontrol etmek kolay değildir, ancak denenebilecek birçok yapılandırma ayarı vardır. küçük giriş böylece daha az haritacılar kökenli dosyaları birleştirmek için ayarlama

varsayılan yanlıştır.

set hive.hadoop.supports.splittable.combineinputformat = true; 

girdi dosyaları için bayt olarak bir eşik ayarlamayı deneyin, bu eşiğin altında bir şey çıktı dosya sayısını etkileyebilir katılmak bir harita dönüştürülebilir çalışacaktı. Ben sıkıştırma türünü değiştirme ile oynayacağı sıkıştırma gelince
set hive.mapjoin.smalltable.filesize = 25000000; 

o çıktınıza Bir değişiklik olup olmadığını görmek için sadece kullanılan.

set hive.exec.orc.default.compress = gzip, snappy, etc... 
+0

#Salmonerd, onun harita tek işi, temelde kovan bölümünde üzerine ekleme kullanarak daha büyük dosyalar halinde birleştirerek küçük dosyalar sorunu gidermek için çalışıyorum çünkü hiçbir redüktör çalışan bulunmadığını söyledi gibi. Sizin tarafınızdan önerilen konfigürasyonu deneyeyim ve geri döneceğim. –

+0

Beklendiği gibi çalışır. Birden fazla küçük dosyadan sadece tek bir dosya oluşturuldu. –

+0

Harika, hangi ayarları uyguladınız? – Jared