Amazon web services 读取拼花地板文件时,什么控制分区的数量?
我的设置: 两个火花团。一个在EC2上,一个在亚马逊EMR上。这两个都使用Spark 1.3.1 EMR群集已与一起安装。EC2集群是使用Spark的默认EC2脚本安装的 代码: 读取包含12个拼花文件的文件夹,并计算分区数Amazon web services 读取拼花地板文件时,什么控制分区的数量?,amazon-web-services,apache-spark,parquet,Amazon Web Services,Apache Spark,Parquet,我的设置: 两个火花团。一个在EC2上,一个在亚马逊EMR上。这两个都使用Spark 1.3.1 EMR群集已与一起安装。EC2集群是使用Spark的默认EC2脚本安装的 代码: 读取包含12个拼花文件的文件夹,并计算分区数 val logs = sqlContext.parquetFile(“s3n://mylogs/”) logs.rdd.partitions.length 观察结果: 在EC2上,这段代码为我提供了12个分区(每个文件一个,有意义) 在EMR上,这段代码给了我138(!
val logs = sqlContext.parquetFile(“s3n://mylogs/”)
logs.rdd.partitions.length
观察结果:
- 在EC2上,这段代码为我提供了12个分区(每个文件一个,有意义)李>
- 在EMR上,这段代码给了我138(!)个分区李>
com.amazon.ws.EMR.hadoop.fs.EmrFileSystem
)
移除时
<property><name>fs.s3n.impl</name><value>com.amazon.ws.emr.hadoop.fs.EmrFileSystem</value></property>
当使用
EmrFileSystem
时,是否有一种更干净的方法来控制分区的数量?如果数据驻留在EMR中的HDFS上,它是否仍然会提供同样多的分区?似乎许多分区来自EMR S3文件系统实现(com.amazon.ws.EMR.hadoop.fs.EmrFileSystem
)。查看我的更新。这使我假设从HDFS读取将返回一个“正常”数量的分区,因为这将使用Hadoop自己的fs实现(但尚未测试)。我得出了相同的结论,默认块大小为64MB。这是否值得关注?更多的分区允许更多的并行任务。S3并不关注文件系统块结构,数据是通过HTTP从S3获取的。可能需要根据块大小平衡任务开销。可以使用sc.hadoopConfiguration.set(“fs.s3n.block.size”)调整块大小。你说得对,克里斯托弗。感谢Hadoop的配置技巧,我没有想到这一点。我想我将不得不接受近似的分区数量。ERMFS怪异:)
<property><name>fs.s3n.block.size</name><value>xxx</value></property>