S3 Support in Apache Hadoop

Amazon S3 (Simple Storage Service) is a data storage service. You are billed monthly for storage and data transfer. Transfer between S3 and AmazonEC2 instances in the same geographical location are free. Most importantly, the data is preserved when a transient Hadoop cluster is shut down

This makes use of S3 common in Hadoop clusters on EC2. It is also used sometimes for backing up remote cluster.

Hadoop provides multiple filesystem clients for reading and writing to and from Amazon S3 or compatible service.

Recommended: S3A (URI scheme: s3a://) - Hadoop 2.7+

S3A is the recommended S3 Client for Hadoop 2.7 and later

A successor to the S3 Native, s3n:// filesystem, the S3a: system uses Amazon's libraries to interact with S3. This allows S3a to support larger files (no more 5GB limit), higher performance operations and more. The filesystem is intended to be a replacement for/successor to S3 Native: all objects accessible from s3n:// URLs should also be accessible from s3a simply by replacing the URL schema.

S3A has been usable in production since Hadoop 2.7, and is undergoing active maintenance for enhanced security, scalability and performance.


  1. Hadoop 2.6: Initial Implementation: HADOOP-10400

  2. Hadoop 2.7: Production Ready: HADOOP-11571

  3. Hadoop 2.8: Performance, robustness and security HADOOP-11694

  4. Hadoop 2.9: Even more features: HADOOP-13204

July 2016: For details of ongoing work on S3a, consult Hadoop & Cloud Storage: Object Store Integration in Production

important: S3A requires the exact version of the amazon-aws-sdk against which Hadoop was built (and is bundled with). If you try to upgrade the library by dropping in a later version, things will break.

Unmainteained: S3N FileSystem (URI scheme: s3n://)

S3N is the S3 Client for Hadoop 2.6 and earlier. From Hadoop 2.7+, switch to s3a

A native filesystem for reading and writing regular files on S3.With this filesystem is that you can access files on S3 that were written with other tools. Conversely, other tools can access files written using Hadoop. The S3N code is stable and widely used, but is not adding any new features (which is why it remains stable).

S3N requires a compatible version of the jets3t JAR on the classpath.

Since Hadoop 2.6, all work on S3 integration has been with S3A. S3N is not maintained except for security risks —this helps guarantee security. Most bug reports against S3N will be closed as WONTFIX and the text "use S3A". Please switch to S3A if you can -and do try it before filing bug reports against S3N.

(Deprecated) S3 Block FileSystem (URI scheme: s3://)

S3 is deprecated and will be removed from Hadoop 3.0

important: this section covers the s3:// filesystem support from the Apache Software Foundation. The one in Amazon EMR is different —see the details at the bottom of this page.

A block-based filesystem backed by S3. Files are stored as blocks, just like they are in HDFS. This permits efficient implementation of renames. This filesystem requires you to dedicate a bucket for the filesystem - you should not use an existing bucket containing files, or write other files to the same bucket. The files stored by this filesystem can be larger than 5GB, but they are not interoperable with other S3 tools. Nobody is/should be uploading data to S3 via this scheme any more; it will eventually be removed from Hadoop entirely. Consider it (as of May 2016), deprecated.


Working with S3 from Apache Hadoop

Consult the Latest Hadoop documentation for the specifics on using any of the S3 clients.

Important: you cannot use S3 as a replacement for HDFS

You cannot use any of the S3 filesystem clients as a drop-in replacement for HDFS. Amazon S3 is an "object store" with

S3 is not a filesystem. The Hadoop S3 filesystem bindings make it pretend to be a filesystem, but it is not. It can act as a source of data, and as a destination -though in the latter case, you must remember that the output may not be immediately visible.


Your Amazon Secret Access Key is that: secret. If it gets known you have to go to the Security Credentials page and revoke it. Try and avoid printing it in logs, or checking the XML configuration files into revision control.

  1. Do not ever check it in to revision control systems.
  2. Although the clients (currently) support embedding the credentials in the URI, this is very dangerous: it will appear in logs and error messages. Avoid this.
  3. S3A supports more authentication mechanisms: consult the documentation and, ideally, use one.

Running bulk copies in and out of S3

Support for the S3 block filesystem was added to the ${HADOOP_HOME}/bin/hadoop distcp tool in Hadoop 0.11.0 (See HADOOP-862). The distcp tool sets up a MapReduce job to run the copy. Using distcp, a cluster of many members can copy lots of data quickly. The number of map tasks is calculated by counting the number of files in the source: i.e. each map task is responsible for the copying one file. Source and target may refer to disparate filesystem types. For example, source might refer to the local filesystem or hdfs with S3 as the target.

The distcp tool is useful for quickly prepping S3 for MapReduce jobs that use S3 for input or for backing up the content of hdfs.

Here is an example copying a nutch segment named 0070206153839-1998 at /user/nutch in hdfs to an S3 bucket named 'nutch' (Let the S3 AWS_ACCESS_KEY_ID be 123 and the S3 AWS_ACCESS_KEY_SECRET be 456):

% ${HADOOP_HOME}/bin/hadoop distcp hdfs://domU-12-31-33-00-02-DF:9001/user/nutch/0070206153839-1998 s3a://nutch/

Flip the arguments if you want to run the copy in the opposite direction.

Other schemes supported by distcp include file: (for local), and http:.

S3 Support in Amazon EMR

Amazon's EMR Service is based upon Apache Hadoop, but contains modifications and their own, proprietary, S3 client. Consult Amazon's documentation on this. Due to the fact that their code is proprietary, only Amazon can provide support and/or field bug reports related to their S3 support.

AmazonS3 (last edited 2016-11-29 17:14:21 by SteveLoughran)