【发布时间】:2018-05-05 14:14:54
【问题描述】:
我正在做一个实验,以了解哪种文件大小最适合 s3 和 [EMR + Spark]
输入数据:
Incompressible data: Random Bytes in files
Total Data Size: 20GB
Each folder has varying input file size: From 2MB To 4GB file size.
集群规格:
1 master + 4 nodes : C3.8xls
--driver-memory 5G \
--executor-memory 3G \
--executor-cores 2 \
--num-executors 60 \
代码:
scala> def time[R](block: => R): R = {
val t0 = System.nanoTime()
val result = block // call-by-name
val t1 = System.nanoTime()
println("Elapsed time: " + (t1 - t0) + "ns")
result
}
time: [R](block: => R)R
scala> val inputFiles = time{sc.textFile("s3://bucket/folder/2mb-10240files-20gb/*/*")};
scala> val outputFiles = time {inputFiles.saveAsTextFile("s3://bucket/folder-out/2mb-10240files-20gb/")};
观察
- 2MB - 32MB:大部分时间花在打开文件句柄上[效率不高]
- 64MB 直到 1GB:Spark 本身正在为所有这些文件大小启动 320 个任务,它不再是 20GB 存储桶中的文件数 数据例如512 MB 的文件有 40 个文件来制作 20gb 的数据,并且可以 只有 40 项任务要完成,但有 320 项
每个任务处理 64MB 数据。- 4GB 文件大小:0 字节输出 [无法处理内存/数据甚至无法拆分???]
问题
- 任何强制输入大小为 64MB 的默认设置??
- 由于我使用的数据是随机字节并且已经被压缩,它如何进一步拆分这些数据?如果它可以拆分此数据,为什么它不能拆分 4gb 目标文件的文件大小 尺寸?
- 为什么通过spark上传后压缩文件变大了? 2MB 的压缩输入文件在输出存储桶中变为 3.6 MB。
【问题讨论】:
标签: amazon-web-services apache-spark amazon-s3 gzip