EMR Hadoop安装包括S3DistCp,它是Apache DistCp的扩展,为在S3下工作进行了优化。S3DisrCp允许你高效率地从亚马逊S3复制大量数据到HDFS。也可以使用S3DistCp在亚马逊S3的桶之间、或者从HDFS到亚马逊S3复制数据。遗憾的是,本地Hadoop集群上不支持S3DistCP。
  这里展示的一个实现利用了S3客户端实现。Setup方法首先从执行上下文获取执行参数,然后创建上传数据到S3的map方法所使用的S3Client。因为HDFS文件可以很大,所以使用一个有固定大小队列的ThreadPoolExecutor。这将确保在同一时刻,内存中只有有限数目的文件片段,从而限制了mapper执行需要的内存大小。
  Map方法去下一个要上传的文件作为下一个值,并使用S3Client来上传文件。它将文件名保存到已处理文件列表,因此如果mapper失败,则可以重试上传。一旦文件被上传,就会从重试列表中删除文件名,以便它不会被上传两次。