title: Technically what is the difference between s3n, s3a and s3?
body: <p>I'm aware of the existence of <a href="https://wiki.apache.org/hadoop/AmazonS3" rel="noreferrer">https://wiki.apache.org/hadoop/AmazonS3</a> and the following words:</p>
  <blockquote>
  <p>S3 Native FileSystem (URI scheme: s3n) A native filesystem for reading and writing regular files on S3. The advantage of 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 disadvantage is the 5GB limit on file size imposed by S3.</p>
  <p>S3A (URI scheme: s3a) A successor to the S3 Native, s3n fs, 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.</p>
  <p>S3 Block FileSystem (URI scheme: s3) 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.</p>
  </blockquote>
  <p>Why a letter change on the URI could make such difference? For example</p>
  <pre><code>val data = sc.textFile(&quot;s3n://bucket-name/key&quot;)
  </code></pre>
  <p>to</p>
  <pre><code>val data = sc.textFile(&quot;s3a://bucket-name/key&quot;)
  </code></pre>
  <p>What is the technical difference underlying this change? Are there any good articles that I can read on this?</p>