优化使用awk生成文本文件的s5cmd命令

问题描述 投票:0回答:1

我有一个命令:

s5cmd --endpoint-url http://192.168.1.40:9000 ls "s3://ccdata/minhash/20*/**" | awk '{print $NF}' > minhash_listings.txt

我有一个本地 Minio 部署,到目前为止,其中有 16-1700 万个文件。 minhash的文件夹结构有84个子文件夹,其下有5000个子文件夹,每个文件夹下最多有15个文件。一个例子是 /minhash/2014-01/0001/filename.json.gz

底层硬件是 Dell R370,配有 40 个 16TB 驱动器和 3 个在 zfs 池上保存元数据的 NVME 驱动器。

此命令大约需要 3 天才能完成。当它运行时,我没有看到对网络、CPU、内存、磁盘 IO 产生任何真正的影响。这让我认为整个命令是单线程的。

我的问题是,鉴于我正在尝试创建的内容,是否有更好/更快的方法?我需要每天重新生成这个文件。

linux file awk
1个回答
0
投票
  1. 利用并行处理:
带有 -c 标志的 s5cmd:s5cmd 工具本身可能提供并行处理功能。检查它是否支持 -c(并发)标志。您可以指定更多的并发连接数以同时列出文件。有关详细信息,请参阅 s5cmd --help。 Python 脚本:使用 boto3(用于 Minio 交互)和多处理等库编写 Python 脚本,以跨多个核心并行化列表过程。这允许同时列出来自不同子文件夹的文件。 2. 利用 Minio 服务器端列表:

Minio CLI stat 命令:Minio CLI 提供了 stat 命令,可以检索存储桶统计信息,包括对象数量。您可以使用它来获取大致的文件计数,而无需单独列出每个文件。 Minio Python SDK:Minio Python SDK 提供了诸如 list_objects 之类的方法,允许使用过滤选项列出对象。您可以按前缀过滤以仅列出“s3://ccdata/minhash/20*”文件夹结构中的对象,从而减少检索到的对象数量。 3.优化命令结构:

减少 awk 使用:awk 命令可能会增加一些开销。考虑修改 s5cmd 命令以直接输出文件名部分(使用 --csv 或自定义格式等选项),而不是通过 awk 进行管道传输。 4.Minio 服务器端过滤(如果支持):

Minio 生命周期规则:如果您的 Minio 服务器支持生命周期规则,您可以配置一条规则来自动生成包含 minhash 文件列表的每日清单文件。这将完全不需要运行 s5cmd 命令。

© www.soinside.com 2019 - 2024. All rights reserved.