s3fs在Amazon中挂载Amazon S3存储桶作为本地目录的稳定性如何?对于高需求的生产环境,它是推荐/稳定的吗?
有没有更好/类似的解决方案?
更新:使用EBS并通过NFS将其挂载到所有其他AMI会更好吗?
我在使用 AWS S3 时遇到这个奇怪的问题。我正在开发可以将图像存储到 AWS 存储桶的应用程序。使用 Multer 作为中间件和 S3FS 库连接并上传到 AWS。
但是当我尝试上传内容时,会弹出以下错误。
“MalformedXML:您提供的 XML 格式不正确或未根据我们的发布模式进行验证”
索引.js
var express = require('express');
var router = express();
var multer = require('multer');
var fs = require('fs');
var S3FS = require('s3fs');
var upload = multer({
dest: 'uploads'
})
var S3fsImpl = new S3FS('bucket-name', {
region: 'us-east-1',
accessKeyId: 'XXXXXXXXXXXX',
secretAccessKey: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
});
/* GET home page. */
router.get('/', function (req, res, next) {
res.render('profile', {
title: 'Express'
});
});
router.post('/testupload', upload.single('file'), function (req, res) {
var …Run Code Online (Sandbox Code Playgroud) Redhat with Fuse 2.4.8
S3FS 1.59版
从AWS在线管理控制台,我可以浏览S3存储桶上的文件.
当我登录(ssh)到我的/ s3文件夹时,我无法访问它.
还有命令:"/ usr/bin/s3fs -o allow_other bucket/s3"
return:s3fs:无法访问MOUNTPOINT/s3:传输端点未连接
可能是什么原因?我该如何解决?该文件夹是否需要卸载然后重新安装?
谢谢 !
我正在寻找使用python从s3读取多个分区目录数据的方法.
data_folder/serial_number = 1/cur_date = 20-12-2012/abcdsd0324324.snappy.parquet data_folder/serial_number = 2/cur_date = 27-12-2012/asdsdfsd0324324.snappy.parquet
pyarrow的ParquetDataset模块具有从分区读取的能力.所以我尝试了以下代码:
>>> import pandas as pd
>>> import pyarrow.parquet as pq
>>> import s3fs
>>> a = "s3://my_bucker/path/to/data_folder/"
>>> dataset = pq.ParquetDataset(a)
Run Code Online (Sandbox Code Playgroud)
它引发了以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/my_username/anaconda3/lib/python3.6/site-packages/pyarrow/parquet.py", line 502, in __init__
self.metadata_path) = _make_manifest(path_or_paths, self.fs)
File "/home/my_username/anaconda3/lib/python3.6/site-packages/pyarrow/parquet.py", line 601, in _make_manifest
.format(path))
OSError: Passed non-file path: s3://my_bucker/path/to/data_folder/
Run Code Online (Sandbox Code Playgroud)
根据pyarrow的文档,我尝试使用s3fs作为文件系统,即:
>>> dataset = pq.ParquetDataset(a,filesystem=s3fs)
Run Code Online (Sandbox Code Playgroud)
这会引发以下错误:
Traceback (most recent call last):
File "<stdin>", …Run Code Online (Sandbox Code Playgroud) 我想做什么?
步骤1:将S3 Bucket安装到EC2实例.
步骤2:在EC2实例上安装FTP服务器,并将ftp请求隧道传送到存储桶中的文件.
到目前为止我做了什么?
以下代码:
wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/s3fs/s3fs-1.74.tar.gz
tar -xvzf s3fs-1.74.tar.gz
yum update all
yum install gcc libstdc++-devel gcc-c++ fuse fuse-devel curl-devel libxml2-devel openssl-devel mailcap
cd s3fs-1.74
./configure --prefix=/usr
make
make install
vi /etc/passwd-s3fs # set access:secret keys
chmod 640 /etc/passwd-s3fs
mkdir /s3bucket
cd /s3bucket
Run Code Online (Sandbox Code Playgroud)
和cd anwers: Transport endpoint is not connected
不知道怎么了.也许我使用的是错误的用户?但是目前除了root之外我只有一个用户(出于测试原因).
下一步将是ftp隧道,但是现在我想让它工作.
如何将自定义端点 url 传递给s3fs.S3FileSystem?
我试过了:
kwargs = {'endpoint_url':"https://s3.wasabisys.com",
'region_name':'us-east-1'}
self.client = s3fs.S3FileSystem(key=AWS_ACCESS_KEY_ID,
secret=AWS_SECRET_ACCESS_KEY,
use_ssl=True,
**kwargs)
Run Code Online (Sandbox Code Playgroud)
但是我收到错误:
File "s3fs/core.py", line 215, in connect
**self.kwargs)
TypeError: __init__() got an unexpected keyword argument 'endpoint_url'
Run Code Online (Sandbox Code Playgroud)
我还尝试过将 kwargs 作为参数传递config_kwargs并s3_additional_kwargs出现类似的错误。
我可以验证boto3是否正在使用以下内容:
client = boto3.client("s3",
aws_access_key_id=AWS_ACCESS_KEY_ID,
aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
endpoint_url="https://s3.wasabisys.com",
use_ssl=True,
region_name="us-east-1",
api_version=None,verify=None, config=None)
Run Code Online (Sandbox Code Playgroud) 我正在使用s3fs并osxfuse在我的 Mac 上挂载一个 S3 目录:
s3fs my-bucket-name $PWD/s3
Run Code Online (Sandbox Code Playgroud)
当需要卸载它时,我会这样做:
% s3fs umount $PWD/s3
s3fs: MOUNTPOINT directory /Users/kwilliams/blah/s3 is not empty.
if you are sure this is safe, can use the 'nonempty' mount option.
Run Code Online (Sandbox Code Playgroud)
我不知道这是安全的-我并非故意在创建任何新文件s3的目录,如果创建了任何新的,我需要知道这件事,所以我可以清理它们或弄清楚发生了什么事。
我也不希望它在尝试卸载时对底层 S3 存储桶执行任何操作(创建、删除)。我不确定该nonempty选项会做什么。
当我这样做时ls,该目录肯定显示为非空,因为它向我显示了存储桶的内容。
最后 - 消息说我可以use the 'nonempty' mount option- 是说我应该在挂载时使用该选项,还是在卸载时可以使用它? s3fs --help并不表示s3fs umount可以采取任何选择。
昨天,Google Colab 中的以下单元格序列将起作用。
(我正在使用colab-env从 Google Drive 导入环境变量。)
今天早上,当我运行相同的代码时,出现以下错误。
这似乎是 s3fs 和 aiobotocore 的新问题。我对 Google Colab 和库版本依赖性问题有一些经验,我以前通过按特定顺序升级库来解决这些问题:
!pip install --upgrade library_name
Run Code Online (Sandbox Code Playgroud)
但是今天早上我有点被这个问题困扰。它影响了我所有的 Google Colab 笔记本,所以我认为它可能会影响使用存储在 Amazon AWS S3 中的数据和 Google Colab 的其他人。
安装的 s3fs 版本是 2021.07.0,似乎是最新的。
我可以使用以下命令安装 boto3、s3fs 和 pandas:
pip install boto3 pandas s3fs
Run Code Online (Sandbox Code Playgroud)
但诗歌却失败了:
poetry add boto3 pandas s3fs
Run Code Online (Sandbox Code Playgroud)
这是错误:
Because no versions of s3fs match >2023.3.0,<2024.0.0
and s3fs (2023.3.0) depends on aiobotocore (>=2.4.2,<2.5.0), s3fs (>=2023.3.0,<2024.0.0) requires aiobotocore (>=2.4.2,<2.5.0).
And because no versions of aiobotocore match >2.4.2,<2.5.0
and aiobotocore (2.4.2) depends on botocore (>=1.27.59,<1.27.60), s3fs (>=2023.3.0,<2024.0.0) requires botocore (>=1.27.59,<1.27.60).
And because boto3 (1.26.91) depends on botocore (>=1.29.91,<1.30.0)
and no versions of boto3 match >1.26.91,<2.0.0, s3fs (>=2023.3.0,<2024.0.0) is incompatible with boto3 (>=1.26.91,<2.0.0).
So, because engexploit-k8s-pod-operator-images …Run Code Online (Sandbox Code Playgroud) 在互联网上搜索嵌入式 Java AWS S3 模拟的良好解决方案后,S3Ninja和S3Proxy似乎是最受欢迎的解决方案。
但是,似乎没有一种简单的方法可以以编程方式启动它们。放弃 S3Ninja 后,我尝试使用 S3Proxy 来完成,但效果不佳。
Maven 依赖项
<dependency>
<groupId>org.gaul</groupId>
<artifactId>s3proxy</artifactId>
<version>${s3proxy.version}</version>
<scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
代码
String endpoint = "http://127.0.0.1:8085";
URI uri = URI.create(endpoint);
Properties properties = new Properties();
properties.setProperty("s3proxy.authorization", "none");
properties.setProperty("s3proxy.endpoint", endpoint);
properties.setProperty("jclouds.provider", "filesystem");
properties.setProperty("jclouds.filesystem.basedir", "/tmp/s3proxy");
ContextBuilder builder = ContextBuilder
.newBuilder("filesystem")
.credentials("x", "x")
.modules(ImmutableList.<Module>of(new SLF4JLoggingModule()))
.overrides(properties);
BlobStoreContext context = builder.build(BlobStoreContext.class);
BlobStore blobStore = context.getBlobStore();
S3Proxy s3Proxy = S3Proxy.builder().awsAuthentication("x", "x").endpoint(uri).keyStore("", "").blobStore(blobStore).build();
s3Proxy.start();
BasicAWSCredentials awsCredentials = new BasicAWSCredentials("x", "x");
AmazonS3Client client = new AmazonS3Client(awsCredentials, …Run Code Online (Sandbox Code Playgroud) java integration-testing amazon-s3 amazon-web-services s3proxy
amazon-s3 ×6
s3fs ×4
python ×3
boto3 ×2
python-s3fs ×2
amazon-ec2 ×1
arrow-python ×1
botocore ×1
fastparquet ×1
ftp ×1
java ×1
javascript ×1
linux ×1
mount ×1
node.js ×1
parquet ×1
s3proxy ×1
umount ×1