Я храню большие наборы данных в s3, но на данном компьютере в моем кластере моей программе нужно читать только небольшое подмножество данных.
Сначала я попробовал s3fs, но сначала он загружает весь файл, что занимает очень много времени.
Существуют ли какие-либо файловые системы с поддержкой s3, которые используют S3 API байты параметр, чтобы внутренние команды чтения (и поиска) читали только желаемую часть файла?
В качестве практического примера, если я бегу:
хвост -c 1024 огромный_файл_он_s3
следует запрашивать только последний 1 КБ (через параметр bytes), то есть я должен получить результат очень быстро.
(Меня не интересует обратная запись в S3; только чтение с него)
Вы можете использовать диапазон HTTP для получения диапазона байтов из файла S3, это документированный способ достижения этого в Документация по S3 API. Библиотека, которая может помочь, - это бото, написанный на питоне. С помощью boto вы можете делать что-то вроде:
tempfile = open(tempFilePath, 'wb')
S3Key.get_contents_to_file(tempfile, headers={'Range': 'bytes=0-100000'}
видеть https://stackoverflow.com/questions/16788290/boto-get-byte-range-returns-more-than-expected
Если вы можете заменить файловую систему программой на Python или аналогичной, она будет работать лучше всего. S3 не предназначен для использования в качестве файловой системы, и такие инструменты, как s3fs, не одобряются. Некоторое время я использовал s3fs в производстве, и это всегда доставляло больше хлопот, чем пользы. Это хорошо для некритичных частей, но не совместимо с posix. Кроме того, я не могу представить, что вы найдете инструмент, который предоставляет HTTP API S3.
Однако, изучая недавние проблемы с s3fs, я обнаружил, что если вы отключите кеш (параметр use_cache), то s3fs не будет загружать весь файл. Проблема: https://code.google.com/p/s3fs/source/detail?r=458 В последний s3fs похоже, что по умолчанию use_cache отключен.
Я предполагаю, что большинство серверов будут поддерживать заголовки HTTP Range. 'bytes' звучит так, как будто это внутренняя функция S3, в то время как заголовки Range поддерживаются всеми современными веб-серверами, о которых я знаю.