我在s3中存储大型数据集,但是在我的集群中的一台计算机上,我的程序只需要读取一小部分数据。
我第一次尝试s3fs,但它首先下载整个文件,这需要很长的时间。
是否有任何s3支持的文件系统使用S3 API 字节参数,以便内部读取(和查找)命令只读取文件的所需部分?
作为一个实际的例子,如果我运行:
tail -c 1024 huge_file_on_s3
只应该请求最后的1kb(通过字节参数),这意味着我应该得到的结果真的很快。
(我不关心写回S3,只能从中读取)
您可以使用HTTP范围从S3文件中获取字节范围,这是在S3 API文档中实现这一点的文档化方式。 一个可以帮助的图书馆是boto ,用python编写。 用博托,你可以做这样的事情:
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标准。 另外,我无法想象你会find一个公开S3的HTTP API的工具。
但是,在查看最近的s3fs问题时,我发现如果closurescaching(use_cache选项),那么s3fs将不会下载整个文件。 问题: https : //code.google.com/p/s3fs/source/detail? r=458默认情况下, 最新的 s3fs似乎已closuresuse_cache。
我想大多数服务器将支持HTTP范围标题。 '字节'听起来像是一个内部的S3唯一的function,而我知道每个现代的networking服务器支持范围头。