Mam wiadro z tysiącami plików. Jak mogę przeszukać wiadro? Czy jest jakieś narzędzie, które możesz polecić?
amazon-web-services
amazon-s3
Vinhboy
źródło
źródło
Odpowiedzi:
S3 nie posiada natywny „szukaj Bucket” Od rzeczywistej zawartości jest nieznany - również od S3 jest klucz / wartość na podstawie nie ma natywny sposób na dostęp do wielu węzłów naraz ala bardziej tradycyjnych magazynów danych, które oferują
(SELECT * FROM ... WHERE ...)
(w SQL Model).To, co musisz zrobić, to
ListBucket
uzyskać listę obiektów w zasobniku, a następnie iterować po każdym elemencie, wykonując niestandardową operację, którą zaimplementujesz - czyli wyszukiwanie.źródło
Tylko uwaga do dodania: jest teraz 3 lata później, ale ten post jest na pierwszym miejscu w Google, gdy wpiszesz „Jak przeszukać wiadro S3”.
Być może szukasz czegoś bardziej złożonego, ale jeśli wylądowałeś tutaj, próbując dowiedzieć się, jak po prostu znaleźć obiekt (plik) według jego tytułu, to jest szalenie proste:
otwórz zasobnik, wybierz „brak” po prawej stronie i zacznij wpisywać nazwę pliku.
http://docs.aws.amazon.com/AmazonS3/latest/UG/ListingObjectsinaBucket.html
źródło
Oto krótki i brzydki sposób wyszukiwania nazw plików za pomocą interfejsu wiersza polecenia AWS :
źródło
cut -c 32-
po prostu odcina informacje o sygnaturze czasowej i rozmiarze pliku z danych wyjściowych, które w moim systemie zajmują 32 znaki. Nie potrzebujesz tego, ale jeśli przesyłasz dane wyjściowe do innej komendy, przydatne może być „czyste” wyjście.include/exclude
. A więcaws s3 ls s3://bucket --recursive --exclude '*' --include 'myfile*'
Istnieją (co najmniej) dwa różne przypadki użycia, które można opisać jako „przeszukaj zasobnik”:
Wyszukaj coś w każdym obiekcie przechowywanym w wiadrze; zakłada to wspólny format dla wszystkich obiektów w tym zasobniku (powiedzmy, plików tekstowych) itd. W przypadku czegoś takiego, musisz zrobić to, na co właśnie odpowiedział Cody Caughlan. Dokumentacja AWS S3 zawiera przykładowy kod pokazujący, jak to zrobić z AWS SDK for Java: Listing Keys Using the AWS SDK for Java (znajdziesz tam również przykłady PHP i C #).
Element listy Szukaj czegoś w kluczach obiektów zawartych w tym zasobniku; S3 ma mieć częściowe wsparcie dla tego, w postaci prefiksu umożliwiając dokładne mecze + zawaleniem mecze po ogranicznik. Jest to wyjaśnione bardziej szczegółowo w podręczniku programisty AWS S3 . Pozwala to na przykład na implementację "folderów" poprzez użycie czegoś w rodzaju kluczy obiektowych
Jeśli zastosujesz się do tej konwencji, większość graficznych interfejsów użytkownika S3 (takich jak konsola AWS) pokaże ci widok folderu twojego zasobnika.źródło
AWS wydało nową usługę do wysyłania zapytań do zasobników S3 za pomocą SQL: Amazon Athena https://aws.amazon.com/athena/
źródło
Dostępnych jest wiele opcji, z których żadna nie jest prostym rozwiązaniem pełnego tekstu „jednorazowego”:
Wyszukiwanie wzorców nazw kluczy : Wyszukiwanie kluczy zaczynających się od jakiegoś ciągu - jeśli starannie projektujesz nazwy kluczy, możesz mieć raczej szybkie rozwiązanie.
Przeszukuj metadane dołączone do kluczy : podczas wysyłania pliku do AWS S3 możesz przetworzyć zawartość, wyodrębnić niektóre metadane i dołączyć te metadane w postaci niestandardowych nagłówków do klucza. Pozwala to na pobieranie nazw kluczy i nagłówków bez konieczności pobierania całej zawartości. Wyszukiwanie musi być wykonywane sekwencyjnie, nie ma do tego opcji wyszukiwania typu „sql like”. W przypadku dużych plików może to zaoszczędzić sporo ruchu sieciowego i czasu.
Przechowuj metadane w SimpleDB : jak w poprzednim punkcie, ale z przechowywaniem metadanych w SimpleDB. Tutaj masz instrukcje sql jak select. W przypadku dużych zbiorów danych możesz przekroczyć limity SimpleDB, które można pokonać (metadane partycji w wielu domenach SimpleDB), ale jeśli zajdziesz naprawdę daleko, może być konieczne użycie innego typu bazy danych metedanych.
Sekwencyjne wyszukiwanie pełnotekstowe treści - przetwarzanie wszystkich kluczy jeden po drugim. Bardzo wolno, jeśli masz zbyt wiele kluczy do przetworzenia.
Przechowujemy 1440 wersji pliku dziennie (jedna na minutę) przez kilka lat, używając wersjonowanego wiadra, jest to łatwe. Ale uzyskanie starszej wersji zajmuje trochę czasu, ponieważ trzeba przechodzić sekwencyjnie z wersji na wersję. Czasami używam prostego indeksu CSV z rekordami, pokazującego czas publikacji plus identyfikator wersji, mając to, mogłem dość szybko przeskoczyć do starszej wersji.
Jak widać, AWS S3 nie jest sam w sobie przeznaczony do wyszukiwania pełnotekstowego, jest to prosta usługa przechowywania.
źródło
Wyszukaj według prefiksu w konsoli S3
bezpośrednio w widoku zasobnika konsoli AWS.
Skopiuj potrzebne pliki za pomocą s3-dist-cp
Jeśli masz tysiące lub miliony plików, innym sposobem na uzyskanie potrzebnych plików jest skopiowanie ich do innej lokalizacji przy użyciu kopii dystrybucyjnej . Uruchamiasz to na EMR w zadaniu Hadoop. Fajną rzeczą w AWS jest to, że zapewniają swoją niestandardową wersję S3 s3-dist-cp . Umożliwia grupowanie żądanych plików za pomocą wyrażenia regularnego w polu GroupBy. Możesz tego użyć na przykład w niestandardowym kroku dotyczącym EMR
źródło
Jeśli korzystasz z systemu Windows i nie masz czasu na znalezienie fajnej
grep
alternatywy, szybkim i nieprzyjemnym sposobem byłoby:aws s3 ls s3://your-bucket/folder/ --recursive > myfile.txt
a następnie wykonaj szybkie wyszukiwanie w pliku myfile.txt
Bit „folderu” jest opcjonalny.
PS, jeśli nie masz zainstalowanego interfejsu wiersza polecenia AWS - oto jedna linijka używająca menedżera pakietów Chocolatey
choco install awscli
PPS Jeśli nie masz menedżera pakietów Chocolatey - weź go! Twoje życie w systemie Windows będzie 10 razy lepsze. (Nie jestem w żaden sposób powiązany z Chocolatey, ale hej, to naprawdę pozycja obowiązkowa).
źródło
Biorąc pod uwagę, że jesteś w AWS ... myślę, że chciałbyś użyć ich narzędzi CloudSearch. Umieść dane, które chcesz przeszukać w ich usługach ... niech wskazują na klucze S3.
http://aws.amazon.com/cloudsearch/
źródło
Inną opcją jest dublowanie zasobnika S3 na serwerze internetowym i przechodzenie lokalnie. Sztuczka polega na tym, że lokalne pliki są puste i używane tylko jako szkielet. Alternatywnie, lokalne pliki mogą zawierać przydatne metadane, które normalnie musiałbyś uzyskać z S3 (np. Rozmiar pliku, typ MIME, autor, znacznik czasu, identyfikator UUID). Podając adres URL do pobrania pliku, wyszukaj lokalnie i podaj łącze do adresu S3.
Przechodzenie przez pliki lokalne jest łatwe, a to podejście do zarządzania S3 jest niezależne od języka. Przechodzenie przez lokalne pliki pozwala również uniknąć utrzymywania i wysyłania zapytań do bazy danych plików lub opóźnień w wykonaniu serii zdalnych wywołań interfejsu API w celu uwierzytelnienia i pobrania zawartości zasobnika.
Możesz zezwolić użytkownikom na przesyłanie plików bezpośrednio na serwer przez FTP lub HTTP, a następnie przesyłanie partii nowych i zaktualizowanych plików do Amazon poza godzinami szczytu, po prostu powtarzając katalogi dla plików o dowolnym rozmiarze. Po zakończeniu przesyłania pliku do Amazon zastąp plik serwera WWW pustym plikiem o tej samej nazwie. Jeśli plik lokalny ma jakikolwiek rozmiar pliku, podaj go bezpośrednio, ponieważ oczekuje na transfer wsadowy.
źródło
Sposób, w jaki to zrobiłem, jest następujący: mam tysiące plików w s3. Widziałem panel właściwości jednego pliku na liście. Możesz zobaczyć URI tego pliku i skopiowałem go, wkleiłem go do przeglądarki - był to plik tekstowy i ładnie się wyrenderował. Teraz zamieniłem uuid w adresie URL na uuid, który miałem pod ręką i bum tam jest.
Chciałbym, żeby AWS miał lepszy sposób wyszukiwania pliku, ale to zadziałało.
źródło
Wypróbuj to polecenie:
Następnie możesz przesłać to do grepa, aby uzyskać określone typy plików, aby robić z nimi, co chcesz.
źródło
--output text
określa, że dane wyjściowe będą zwykłym tekstem, a nie JSON itp. I--query 'Contents[].{Key: Key, Size: Size}'
po prostu filtrują dane wyjściowe listy według nazwy i rozmiaru pliku. Nie wyszukujeKey: Key
ani tym podobnych.Spróbowałem w następujący sposób
Spowoduje to wyświetlenie rzeczywistej ścieżki do miejsca, w którym plik istnieje
źródło
To trochę stary wątek - ale może pomóc komuś, kto wciąż szuka - to ja szukam tego przez rok.
Rozwiązaniem może być „ AWS Athena ”, w którym można przeszukiwać takie dane
https://aws.amazon.com/blogs/developer/introducing-support-for-amazon-s3-select-in-the-aws-sdk-for-javascript/
Obecnie cena wynosi 5 USD za 1 TB danych - na przykład, jeśli zapytanie przeszukuje jeden plik o pojemności 1 TB 3 razy, gdy koszt wyniesie 15 USD, ale na przykład, jeśli jest tylko 1 kolumna w „przekonwertowanym formacie kolumnowym”, co chcesz przeczytać, zapłacisz 1 / 3 ceny oznacza 1,67 USD / TB.
źródło
Spójrz na tę dokumentację: http://docs.aws.amazon.com/AWSSDKforPHP/latest/index.html#m=amazons3/get_object_list
Do filtrowania nazw można użyć wyrażenia regularnego zgodnego z Perl (PCRE).
źródło
Zrobiłem coś jak poniżej, aby znaleźć wzory w moim wiadrze
W przypadku większych zasobników zajmuje to zbyt dużo czasu, ponieważ wszystkie podsumowania obiektów są zwracane przez Aws, a nie tylko te, które pasują do przedrostka i separatora. Szukam sposobów na poprawę wydajności i do tej pory odkryłem, że powinienem tylko nazwać klucze i odpowiednio uporządkować je w wiadrach.
źródło
Miałem ten sam problem. Wyszukiwanie w S3 powinno być dużo łatwiejsze niż obecna sytuacja. Dlatego wdrożyłem to narzędzie open source do wyszukiwania w S3.
SSEARCH to w pełni otwarte narzędzie wyszukiwania S3. Został wdrożony zawsze mając na uwadze, że wydajność jest czynnikiem krytycznym i zgodnie z testami porównawczymi przeszukuje zasobnik zawierający ~ 1000 plików w ciągu kilku sekund.
Instalacja jest prosta. Pobierasz tylko plik docker-compose i uruchamiasz go z
SSEARCH zostanie uruchomione i możesz przeszukiwać wszystko w dowolnym posiadanym zasobniku.
źródło
Przewiń do roku 2020 i używając aws-okta jako naszego 2fa, następujące polecenie, choć powolne jak diabli, aby iterować przez wszystkie obiekty i foldery w tym konkretnym zasobniku (+270 000) działało dobrze.
źródło
Użyj usługi Amazon Athena, aby wysłać zapytanie do zasobnika S3. Załaduj również dane do wyszukiwania Amazon Elastic. Mam nadzieję że to pomoże.
źródło
Nie jest to techniczna odpowiedź, ale stworzyłem aplikację, która umożliwia wyszukiwanie za pomocą symboli wieloznacznych: https://bucketsearch.net/
Asynchronicznie zindeksuje Twój zasobnik, a następnie umożliwi przeszukiwanie wyników.
To nic nie kosztuje (darowizny).
źródło
Stan 2018-07: Amazon ma natywne sql, takie jak wyszukiwanie plików csv i json!
https://aws.amazon.com/blogs/developer/introducing-support-for-amazon-s3-select-in-the-aws-sdk-for-javascript/
źródło