2013-05-03 9 views
6

Jeśli mam katalog zawierający ~ 5000 małych plików na S3, czy istnieje sposób na łatwe skompresowanie całego katalogu i pozostawienie wynikowego pliku zip na S3? Muszę to zrobić bez konieczności ręcznego dostępu do każdego pliku.Rozpakuj cały katalog na S3

Dzięki!

+0

http://www.w2lessons.com/2012/01/fast-zipping-in-amazon-s3.html –

+0

Widziałem to, ale nadal wymaga pobrania każdego plik indywidualnie na ec2, który jest obecnie naszym wąskim gardłem. – Jin

Odpowiedz

4

Nie, nie ma magicznej kuli.

(Odkładając na bok, musisz zdać sobie sprawę, że nie ma czegoś takiego jak "katalog" w S3, istnieją tylko obiekty ze ścieżkami, możesz uzyskać katalogowe aukcje, ale znak "/" nie jest " t magic - możesz uzyskać prefiksy dowolną postacią.)

Jak ktoś zauważył, "wstępne zipowanie" ich może pomóc zarówno w zwiększeniu prędkości, jak i przyspieszeniu. (Kosztem duplikowania pamięci).

Jeśli pobieranie jest wąskie gardło, to brzmi jak pobieranie jest szeregowe. S3 może obsługiwać 1000-tych jednoczesnych połączeń z tym samym obiektem bez przerywania potu. Będziesz musiał uruchomić testy porównawcze, aby sprawdzić, ile połączeń jest najlepsze, ponieważ zbyt wiele połączeń z jednej skrzynki może zostać zdławione przez S3. I może być konieczne wykonanie pewnych TCP tuning podczas wykonywania 1000 połączeń na sekundę.

"Rozwiązanie" zależy w dużej mierze od wzorców dostępu do danych. Spróbuj ponownie uporządkować problem. Jeśli pliki do pobrania pojedynczego pliku są rzadkie, bardziej sensowne może być zgrupowanie ich po 100 na raz w S3, a następnie podzielenie ich na żądanie. Jeśli są to małe pliki, może być sens buforowanie ich w systemie plików.

Może być sensem przechowywanie wszystkich 5000 plików jako jednego dużego pliku zip w S3 i używanie "inteligentnego klienta", który będzie mógł pobierać określone zakresy pliku zip, aby wyświetlać poszczególne pliki. (S3 obsługuje bajty, jak pamiętam.)

+0

Widzę ... Tak myślałem. Nasze wąskie gardło to w rzeczywistości EMR z dostępem do S3 w kółko dla tych plików. Próbowaliśmy użyć 's3distcp', aby skopiować wszystko, ale wciąż jest niesamowicie powolny. Przemyślę platformę i ewentualnie połączę wszystkie pliki razem, a następnie wyślę je do S3 (prawdopodobnie też poprawi to wydajność EMR). Dzięki za wgląd! – Jin

+0

To jest takie powszechne zadanie. Szkoda, że ​​nikt publicznie nie podzielił się ich rozwiązaniem i wszyscy muszą ponownie wymyślić koło. –