我在一个包含25个4gb json文件的目录上并行运行gsutil cp命令(使用-m选项)(我也使用-z选项进行压缩)。
gsutil -m cp -z json -R dir_with_4g_chunks gs://my_bucket/
当我运行它时,它将打印到终端,它正在复制除了其中一个文件之外的所有文件。我的意思是它每个文件打印其中一行:
Copying file://dir_with_4g_chunks/a_4g_chunk [Content-Type=application/octet-stream]...
一旦完成其中一个的转移,就会说它将复制最后一个文件。
这样做的结果是只有一个文件只在其中一个文件完成复制时才开始复制,从而大大减慢了进程的速度
我可以使用-m选项上传的文件数量是否有限制?这可以在boto配置文件中配置吗?
答案 0 :(得分:6)
来自the description of the -m option:
gsutil使用组合执行指定的操作 多线程和多处理,使用多个线程和 处理器由parallel_thread_count和 boto配置文件中设置的parallel_process_count值。您 可能想要试验这些值,因为最佳值可能会有所不同 基于多种因素,包括网络速度,CPU数量, 和可用的记忆。
如果您查看.boto文件,您应该会看到此生成的评论:
# 'parallel_process_count' and 'parallel_thread_count' specify the number
# of OS processes and Python threads, respectively, to use when executing
# operations in parallel. The default settings should work well as configured,
# however, to enhance performance for transfers involving large numbers of
# files, you may experiment with hand tuning these values to optimize
# performance for your particular system configuration.
# MacOS and Windows users should see
# https://github.com/GoogleCloudPlatform/gsutil/issues/77 before attempting
# to experiment with these values.
#parallel_process_count = 12
#parallel_thread_count = 10
我猜你是在Windows或Mac上,因为非Linux机器的默认值是24个线程和1个进程。这将导致首先复制24个文件,然后复制最后1个文件。尝试尝试增加这些值,以便一次传输所有25个文件。
答案 1 :(得分:6)
我无法在Mac上找到.boto文件(根据jterrace的回答),而是使用-o开关指定了这些值:
gsutil -m -o "Boto:parallel_thread_count=4" cp directory1/* gs://my-bucket/
这似乎控制了转移率。