2013-01-24 40 views
13

Mam plik 17,7GB na S3. Został wygenerowany jako wynik zapytania Hive i nie jest skompresowany.Kompresuj plik na S3

wiem, że przez ściskanie go, to będzie około 2.2GB (gzip). Jak mogę pobrać ten plik lokalnie tak szybko, jak to możliwe, gdy transfer jest wąskim gardłem (250kB/s).

nie znalazłem żadnego prostego sposobu na skompresować plik na S3 lub włączyć kompresję na przesunięcie s3cmd, boto lub pokrewnych narzędzi.

+1

Czy możesz ponownie wygenerować ten plik, ponownie uruchamiając zapytanie o Hive? Jeśli tak, radziłbym włączyć kompresję wyjściową dla twojego zapytania Hive. –

+0

@CharlesMenguy: Tak naprawdę zrobiłem to po raz pierwszy (chyba). Jednak w instrukcji było 'order by', co miało wpływ na wynik. Zwykle otrzymywałbym plik dla każdego zadania mapowego, ale zamiast tego dostałem pojedynczy plik ze skrótu, który zakładam, gdzie dokonano zamówienia. –

+0

W jaki sposób włączono kompresję wyjściową w zapytaniu? Myślę, że powinieneś być w stanie skompresować dane wyjściowe prawie każdego zapytania Hive niezależnie od tego, czy istnieje 'order by', czy nie. Zakładam, że piszesz do S3, wykonując 'insert overwrite directory 's3n: // ...'', prawda? –

Odpowiedz

1

Późne odpowiedź, ale znalazłem to działa idealnie.

aws s3 sync s3://your-pics . 

for i in `find | grep -E "\.jpg$|\.jpg$"`; do gzip "$i" ; echo $i; done 

aws s3 sync . s3://your-pics --content-encoding gzip --dryrun 

ten pobierze wszystkie pliki w s3 wiadra do maszyny (lub instancji EC2) kompresuje plików graficznych i przesłać je z powrotem do S3 wiadra. Sprawdź dane przed usunięciem flagi Dryrun.