只有在将文件公开后将“anon”参数更改为 True 时,我才能加载数据。
df = dd.read_csv('s3://mybucket/some-big.csv', storage_options = {'anon':False})
Run Code Online (Sandbox Code Playgroud)
出于明显的原因,不建议这样做。如何安全地从 S3 加载数据?
我必须将文件夹从本地移动到 s3。我想知道是否有办法做到这一点。
我的文件夹包含嵌套子文件夹,其中包含文件(通常为 .pdf 或 .doc 或 docx)。
s3fs我知道我可以使用(https://s3fs.readthedocs.io/en/latest/api.html )将单个文件从本地移动到 s3 :
S3FileSystem.put(filename, path, **kwargs) Stream data from local filename to file at path
Run Code Online (Sandbox Code Playgroud)
我的代码看起来像
def upload_data(filepath, file_name):
s3 = s3fs.S3FileSystem()
s3_path = f"name-of-my-bucket/{file_name}"
s3.put(filepath, s3_path)
Run Code Online (Sandbox Code Playgroud)
然而,这允许我上传单个文件。我想发送整个文件夹。
我可以递归地执行此操作,将每个文件一一添加,但是:
1)我认为如果我可以发送文件夹会更容易。
2)维护文件夹的结构会更困难。这意味着我的本地文件folders/subfolders/myfile.pdf将保存在 s3 中,而mypdf.pdf不是folders/subfolders/myfile.pdf
我正在 Linux/Fedora 下使用扩展文件属性,目前我遇到了一些困难,因为我无法添加/更改文件的属性,而在/tmp我家里它工作正常 - 虽然两个路径都在同一个挂载点上,即,
/dev/mapper/fedora-root on / type ext4 (rw,relatime,seclabel,data=ordered)
Run Code Online (Sandbox Code Playgroud)
例如,我可以成功添加和检索主目录中文件的属性,例如
> setfattr -n user.test.md5 -v 58d8e4cd0e60facf386838cbe8b11767 ~/foo.bar
> getfattr -n user.test.md5 ~/foo.bar
# file: foo.bar
user.test.md5="58d8e4cd0e60facf386838cbe8b11767"
Run Code Online (Sandbox Code Playgroud)
但是,对于 中的同一文件,同样会失败/tmp。
> cp ~/foo.bar /tmp/foo.bar
> setfattr -n user.test.md5 -v 58d8e4cd0e60facf386838cbe8b11767 /tmp/foo.bar
setfattr: /tmp/foo.bar: Operation not supported
Run Code Online (Sandbox Code Playgroud)
我假设,对扩展属性的支持仅取决于使用 xattr 支持“正确”安装的文件系统。但是,它似乎也依赖于目录(??),我想知道,是什么阻止我在 /tmp 中设置扩展属性以及如何更改它?(这似乎与 SELinux 无关——至少我在审核日志中没有找到任何内容。)
我们有一个数据中心,带有一个到AWS的10G直接连接电路.在数据中心,我们有一个IBM XIV存储基础架构,其GPFS文件系统在单个顶级目录中包含1.5亿个图像(每个约50k).我们可以整天争论这是多么愚蠢,但我宁愿为我的任务寻求建议,将所有这些文件转移到s3桶中.
我不能使用任何物理传输解决方案,因为数据中心被物理锁定并且获得本地物理清除是一个为期6个月的过程.
执行此文件迁移的最佳方法是什么?
我到目前为止最好的想法是在AWS中构建EC2 linux服务器,使用s3fs-fuse安装s3目标存储桶(https://github.com/s3fs-fuse/s3fs-fuse/wiki/Fuse-Over-Amazon)作为EC2服务器上的文件系统,然后在持有GPFS挂载的数据中心服务器和EC2服务器之间运行一些netcat + tar命令.我在另一篇文章中找到了这个建议:目标框:nc -l -p 2342 | tar -C/target/dir -xzf - 源框:tar -cz/source/dir | nc Target_Box 2342
在我踏上这可能需要一个月的任务,我想看看是否有人在这里有一个更好的方式来做到这一点?
我在将文件夹上传到我的 google-cloud-storage 存储桶时遇到问题:它们不会显示在已安装的驱动器 /mnt/willferbucket 中(使用 gcsfuse)
我是否通过 webfrontend 或使用 gsutil 上传它们并不重要,唯一显示的文件夹是我创建的文件夹(不是上传!,通过 webfrontend 或直接在安装的驱动器上上传并不重要,在下面的示例中:“canvas ”和“打印”,所以这是有效的)
所以..安装的驱动器上的“ls”看起来像这样:
root@ubuntu-2:/mnt/willferbucket# ls
canvas helloWorld.py helloWorldSimple.py prints test.txt
Run Code Online (Sandbox Code Playgroud)
但正如您所看到的,使用 gsutil 时:
我上传的文件夹显示出来,我可以下载(在网络前端中相同:它们显示):
root@ubuntu-2:/mnt/w# gsutil ls gs://willferbucket
gs://willferbucket/helloWorld.py
gs://willferbucket/helloWorldSimple.py
gs://willferbucket/test.txt
gs://willferbucket/canvas/
gs://willferbucket/prints/
gs://willferbucket/test/
gs://willferbucket/testfolder/
gs://willferbucket/tst/
Run Code Online (Sandbox Code Playgroud)
我无法找出这种行为的原因是什么:(也许有人可以提供帮助或面临同样的问题
感谢您的回复
cloud-storage google-cloud-storage google-cloud-platform gcsfuse
我知道 AWS S3 API 对上传大于 5 GB 的文件有限制。在boto3我应该使用multipart
我正在尝试配置S3File对象s3fs以执行相同的操作,但我无法弄清楚。
我正在使用(作为错误示例)一个非常基本的代码:
import s3fs
s3 = s3fs.S3FileSystem()
with s3.open("s3://bucket/huge_file.csv", "w") as s3_obj:
with open("huge_file.csv") as local_file
s3_obj.write(local_file.read())
Run Code Online (Sandbox Code Playgroud)
哪里huge_file.csv有尺寸 > 5Gb。
我得到的错误是
...
botocore.exceptions.ClientError: An error occurred (EntityTooLarge) when calling the PutObject operation: Your proposed upload exceeds the maximum allowed size
...
File ... /s3fs/core.py" line 1487, in __exit__
self.close()
File ... /s3fs/core.py" line 1454, in close
Run Code Online (Sandbox Code Playgroud)
所以,问题是如何(如果可能)我可以设置s3fs上传大于5Gb(How shoud …
我是芭蕾舞女演员的新手。我将平台库作为可执行 jar 导入,这是使用 jclouds 的 openstack swift api 在 java 中的互操作方法调用。
JCLOUDS 存在一个已知问题,即在Spring Boot 应用程序中使用 Rackspace 时,由于高于 2.5 的 gson 版本问题与 jclouds Apache jclouds java.lang.NoSuchMethodError不兼容而无法构建 。
尝试从我的 bal 文件中执行这个 inter op 方法调用时,我遇到了同样的错误,该文件是在芭蕾舞演员构建期间构建的。检查芭蕾舞女演员在项目构建期间创建的 jar 后,发现该 jar 是使用一组预构建的 gson 2.7 依赖项创建的。
有什么办法可以改变这种依赖关系,我也不太清楚芭蕾舞女演员如何在 bal 文件的构建阶段打包所有这些 jar。
这将有助于详细了解调用 ballerina build 时会发生什么。
因此,我只想将来自亚马逊的s3存储桶添加到我的docker群中。我在互联网上看到了许多“可能的”解决方案,但是我无法连接它们以将存储桶中的内容添加为卷。
所以我最后尝试过的命令是statet命令(s3fs 无法安装在docker容器内吗?):
docker run --rm -t -i --privileged -e AWS_ACCESS_KEY_ID=XXXX -e AWS_SECRET_ACCESS_KEY=XXXX -e AWS_STORAGE_BUCKET_NAME=XXXX docker.io/panubo/s3fs bash
Run Code Online (Sandbox Code Playgroud)
它工作得很好,但是如果我现在退出bash,容器将停止,并且我无法执行任何操作。是否可以保留此东西并将其添加为卷?
还是将存储桶安装在Docker实例上,然后将其添加为本地卷,将是更好的解决方案?这会是个更好的主意吗?
我尝试使用goofys在安装目录中创建一个 zip 文件,但失败并显示以下错误消息:
$ su - foo-user
$ zip hoge.zip hoge
updating: hoge
zip I/O error: Operation not supported
zip error: Input file read failure (was zipping hoge)
Run Code Online (Sandbox Code Playgroud)
有什么线索可以解决这个问题吗?
在其他目录中制作 zip 文件并将其复制到挂载点会成功。所以这看起来不像许可/授权问题。
$ zip /tmp/hoge.zip hoge
adding: hoge (stored 0%)
$ ll /tmp/hoge.zip
-rw-rw-r-- 1 foo-user foo-user 163 Apr 4 17:52 hoge.zip
$ cp /tmp/hoge.zip (path of the mount-point)
$ ll
total 5
-rw-r--r-- 1 foo-user foo-user 5 Mar 26 10:56 hoge
-rw-r--r-- 1 foo-user foo-user 163 Apr …Run Code Online (Sandbox Code Playgroud) 我正在尝试从 s3 中获取子目录和子目录的子目录(等等)内的镶木地板文件路径列表。
如果是我的本地文件系统,我会这样做:
import glob
glob.glob('C:/Users/user/info/**/*.parquet', recursive=True)
Run Code Online (Sandbox Code Playgroud)
我试过使用glob方法,s3fs但是它没有递归 kwarg。
是否有我可以使用的功能或我需要自己实现它?