我正在使用 s3distcp 将 500GB 数据集复制到我的 EMR 集群中。这是一个 12 节点 r4.4xlarge 集群,每个集群都有 750GB 磁盘。它使用 EMR 发布标签emr-5.13.0
,我正在添加 Hadoop: Amazon 2.8.3
、 Ganglia:3.7.2
和 Spark 2.3.0
。我正在使用以下命令将数据复制到集群中:
s3-dist-cp --src=s3://bucket/prefix/ --dest=hdfs:///local/path/ --groupBy=.*(part_).* --targetSize=128 --outputCodec=none
当我查看 Ganglia 或 namenode UI(EMR 集群上的端口 50070)中的磁盘使用情况时,我可以看到一个节点的大部分磁盘已填满,而其他节点的使用百分比相似。单击大量文件(〜50)我可以看到文件的副本始终出现在完整节点上。
我正在使用 Spark 转换这些数据,将其写入 HDFS,然后复制回 S3。我在处理这个数据集时遇到了问题,因为我的任务被杀死了。我不确定这是问题的原因。我不需要在本地复制数据,也不需要解压缩。最初我认为 BZIP2 编解码器不可拆分,解压缩有助于在我的 Spark 作业中获得并行性,但我错了,它是可拆分的。我还发现了hdfs balancer
我用来重新分配副本的命令,看看这是否解决了我的 Spark 问题。
但是,现在我已经看到了我认为奇怪的行为,我想了解 s3distcp/HDFS 始终在一个节点上创建文件副本是否正常?