У меня есть ведро с тысячами файлов. Как я могу искать ведро? Есть ли инструмент, который вы можете порекомендовать?
Как вы ищете ведро amazon s3?
Ответ 1
S3 не имеет собственного "поиска в этом ковше", поскольку фактическое содержимое неизвестно - также, поскольку S3 основан на ключевом/значении, нет никакого способа доступа к множеству узлов одновременно, а также более традиционных хранилищ данных, которые предлагают (SELECT * FROM ... WHERE ...)
(в модели SQL).
Что вам нужно сделать, это выполнить ListBucket
, чтобы получить список объектов в ведре, а затем перебрать все элементы, выполняющие пользовательскую операцию, которую вы реализуете, - это ваш поиск.
Ответ 2
Просто примечание, которое нужно добавить здесь: теперь 3 года спустя, но этот пост является вершиной в Google, когда вы вводите "Как искать ведро S3".
Возможно, вы ищете что-то более сложное, но если вы приземлились здесь, пытаясь понять, как просто найти объект (файл) по названию, это безумно просто:
откройте ведро, выберите "none" с правой стороны и начните вводить имя файла.
http://docs.aws.amazon.com/AmazonS3/latest/UG/ListingObjectsinaBucket.html
Ответ 3
Вот короткий и уродливый способ поиска имени файла поиска с помощью AWS CLI:
aws s3 ls s3://your-bucket --recursive | grep your-search | cut -c 32-
Ответ 4
Существуют (по крайней мере) два разных варианта использования, которые можно охарактеризовать как "поиск в ковше":
-
Найдите что-то внутри каждого объекта, хранящегося в ведре; это предполагает общий формат для всех объектов в этом ковше (скажем, текстовых файлов) и т.д. Иными словами, вы вынуждены делать то, на что ответил Коди Коглан. В документах AWS S3 есть пример кода, показывающий, как это сделать с помощью AWS SDK для Java: Листинговые ключи Использование AWS SDK для Java (там вы" Также найду примеры PHP и С#).
-
Элемент списка Поиск чего-то в объекте ключей, содержащегося в этом ведре; У S3 есть частичная поддержка для этого, в виде разрешающих точных совпадений + совпадений после разграничения. Это объясняется более подробно в Руководство для разработчиков AWS S3. Это позволяет, например, реализовать "папки", используя в качестве объектных ключей что-то вроде
folder/subfolder/file.txt
Если вы следуете этому соглашению, большинство графических интерфейсов S3 (например, AWS Console) покажут вам представление папки вашего ведра.
Ответ 5
Существует несколько вариантов, ни один из которых не является простым решением "одного кадра":
-
Поиск по ключевым словам.. Поиск ключей, начинающихся с некоторой строки, если вы тщательно разрабатываете имена ключей, то у вас может быть довольно быстрое решение.
-
Поиск метаданных, прикрепленных к ключам: при отправке файла в AWS S3 вы можете обрабатывать контент, извлекать некоторую метаинформацию и прикреплять эту метаинформацию в виде пользовательских заголовков в ключ, Это позволяет получать имена ключей и заголовки без необходимости получения полного содержимого. Поиск должен выполняться последовательно, для этого нет опции поиска "sql like". С большими файлами это может сэкономить много сетевого трафика и времени.
-
Сохранить метаданные на SimpleDB: как предыдущий пункт, но с сохранением метаданных в SimpleDB. Здесь у вас есть sql, как select statement. В случае больших наборов данных вы можете столкнуться с ограничениями SimpleDB, которые можно преодолеть (метаданные разделов на нескольких доменах SimpleDB), но если вы заходите очень далеко, вам может понадобиться использовать другую базу данных metedata.
-
Последовательный полнотекстовый поиск содержимого - обработка всех ключей один за другим. Очень медленно, если у вас слишком много ключей для обработки.
Мы сохраняем 1440 версий файла в день (по одной в минуту) в течение нескольких лет, используя веером с версией, это легко возможно. Но получение какой-то более старой версии требует времени, так как нужно последовательно перейти к версии по версии. Когда-то я использую простой индекс CSV с записями, показывающий время публикации плюс идентификатор версии, имея это, я мог бы быстро перейти к более старой версии.
Как вы видите, AWS S3 не предназначен для полнотекстового поиска, это простая служба хранения.
Ответ 6
AWS выпустила новую услугу для запроса кодов S3 с SQL: Amazon Athena https://aws.amazon.com/athena/
Ответ 7
Учитывая, что вы находитесь в AWS... Я бы подумал, что вы захотите использовать свои инструменты CloudSearch. Поместите данные, которые вы хотите найти в своей службе... укажите на клавиши S3.
Ответ 8
Поиск по префиксу в консоли S3
непосредственно в представлении консоли консоли AWS.
Копирование требуемых файлов с помощью s3-dist-cp
Когда у вас есть тысячи или миллионы файлов, другой способ получить нужные файлы - скопировать их в другое место, используя распределенную копию. Вы запускаете это на EMR в задании Hadoop. Замечательная вещь о AWS заключается в том, что они предоставляют свою собственную версию S3 s3-dist-cp. Он позволяет группировать нужные файлы, используя регулярное выражение в поле groupBy. Вы можете использовать это, например, на пользовательском шаге по EMR
[
{
"ActionOnFailure": "CONTINUE",
"Args": [
"s3-dist-cp",
"--s3Endpoint=s3.amazonaws.com",
"--src=s3://mybucket/",
"--dest=s3://mytarget-bucket/",
"--groupBy=MY_PATTERN",
"--targetSize=1000"
],
"Jar": "command-runner.jar",
"Name": "S3DistCp Step Aggregate Results",
"Type": "CUSTOM_JAR"
}
]
Ответ 9
Если вы работаете в Windows и у вас нет времени, чтобы найти хорошую альтернативу grep
, быстрый и грязный способ будет выглядеть так:
aws s3 ls s3://your-bucket/folder / --recursive > myfile.txt
а затем выполните быстрый поиск в myfile.txt
Бит "папка" не является обязательным.
PS если у вас не установлен AWS CLI - вот один вкладыш, использующий менеджер пакетов Chocolatey
choco install awscli
PPS Если у вас нет менеджера пакетов Chocolatey - получите его! Ваша жизнь в Windows станет в 10 раз лучше. (Я никак не связан с Chocolatey, но на самом деле, это просто необходимо).
Ответ 10
Это немного старая ветка - но, возможно, поможет кто-то, кто все еще ищет - я тот, кто ищет это год.
Решением может быть "AWS Athena", где вы можете выполнять поиск по таким данным, как этот
'SELECT user_name FROM S3Object WHERE cast(age as int) > 20'
В настоящее время цена составляет 5 долларов США за данные объемом 1 ТБ - например, если при поиске по одному файлу объемом 1 ТБ в три раза стоимость составляет 15 долларов США, но, например, если в "преобразованном столбчатом формате" есть только 1 столбец, то, что вы хотите прочитать, вы заплатите 1/3 от цены, значит, $ 1,67/ТБ.
Ответ 11
Другая опция - зеркальное отображение ведра S3 на вашем веб-сервере и перемещение по локальной сети. Фокус в том, что локальные файлы пустые и используются только как скелет. В качестве альтернативы, локальные файлы могут содержать полезные метаданные, которые вам обычно нужно получить от S3 (например, файлы, mimetype, author, timestamp, uuid). Когда вы указываете URL-адрес для загрузки файла, выполните поиск локально и укажите ссылку на адрес S3.
Локальное перемещение файлов легко, и этот подход для управления S3 является агностическим. Локальное перемещение файлов также позволяет избежать обслуживания и запросов к базе данных файлов или задержек, делая серию удаленных вызовов API для аутентификации и получения содержимого ведра.
Вы можете разрешить пользователям загружать файлы прямо на ваш сервер через FTP или HTTP, а затем передавать пакет новых и обновленных файлов в Amazon в нерабочее время, просто переписывая каталоги для файлов любого размера. По завершении передачи файла на Amazon замените файл веб-сервера пустым одноименным именем. Если локальный файл имеет какой-либо файл, то он служит непосредственно, потому что его ожидает пакетный перенос.
Ответ 12
Попробуйте выполнить следующую команду:
aws s3api list-objects --bucket your-bucket --prefix sub-dir-path --output text --query 'Contents[].{Key: Key}'
Затем вы можете передать это в grep, чтобы получить конкретные типы файлов, чтобы делать с ними что угодно.
Ответ 13
Взгляните на эту документацию: http://docs.aws.amazon.com/AWSSDKforPHP/latest/index.html#m=amazons3/get_object_list
Для фильтрации имен вы можете использовать регулярное выражение, совместимое с Perl (PCRE).
Ответ 14
Как я это сделал: У меня есть тысячи файлов в s3. Я видел панель свойств одного файла в списке. Вы можете увидеть URI этого файла, и я скопировал его в браузер - это был текстовый файл, и он выглядел красиво. Теперь я заменил uuid в URL-адресе с помощью uuid, который у меня был под рукой, и бум там, файл.
Я бы хотел, чтобы AWS имел лучший способ поиска файла, но это сработало для меня.
Ответ 15
Я сделал что-то, как показано ниже, чтобы найти шаблоны в моем ковше.
def getListOfPrefixesFromS3(dataPath: String, prefix: String, delimiter: String, batchSize: Integer): List[String] = {
var s3Client = new AmazonS3Client()
var listObjectsRequest = new ListObjectsRequest().withBucketName(dataPath).withMaxKeys(batchSize).withPrefix(prefix).withDelimiter(delimiter)
var objectListing: ObjectListing = null
var res: List[String] = List()
do {
objectListing = s3Client.listObjects(listObjectsRequest)
res = res ++ objectListing.getCommonPrefixes
listObjectsRequest.setMarker(objectListing.getNextMarker)
} while (objectListing.isTruncated)
res
}
Для больших копеек это занимает слишком много времени, так как все сводки объектов возвращаются Aws, а не только те, которые соответствуют префиксу и разделителю. Я ищу способы улучшить производительность, и до сих пор я только нашел, что я должен назвать ключи и упорядочить их в ведрах правильно.
Ответ 16
Статус 2018-07: у Amazon есть собственный sql-подобный поиск файлов csv и json!
Ответ 17
Я пробовал следующим образом
aws s3 ls s3://Bucket1/folder1/2019/ --recursive |grep filename.csv
Это выводит фактический путь, где файл существует
2019-04-05 01:18:35 111111 folder1/2019/03/20/filename.csv