

# Amazon S3 en Outposts con Amazon EMR en Outposts local
<a name="s3-outposts-emr"></a>

Amazon EMR es una plataforma de clúster administrada que simplifica la ejecución de marcos de macrodatos, tales como Apache Hadoop y Apache Spark en AWS para procesar y analizar grandes cantidades de datos. Mediante el uso de estos marcos de trabajo y proyectos de código abierto relacionados, puede procesar datos para fines de análisis y cargas de trabajo de inteligencia empresarial. Además, Amazon EMR permite transformar y trasladar grandes cantidades de datos hacia y desde otros almacenes y bases de datos de AWS, como Amazon S3 en Outposts. Para obtener más información sobre Amazon EMR, consulte [Clústeres de EMR en AWS Outposts](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-outposts.html) en la *Guía de administración de Amazon EMR*. 

Para Amazon S3 en Outposts, Amazon EMR comenzó a admitir el conector S3A de Apache Hadoop en la versión 7.0.0. Las versiones anteriores de Amazon EMR no admiten S3 en Outposts localmente y tampoco son compatibles con el sistema de archivos de EMR (EMRFS).

**Aplicaciones compatibles**  
Amazon EMR con Amazon S3 en Outposts admite las siguientes aplicaciones: 
+ Hadoop
+ Spark
+ Hue
+ Hive
+ Sqoop
+ Pig
+ Hudi
+ Flink

Para obtener más información, consulte la [Guía de publicación de Amazon EMR](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-release-components.html).

## Creación y configuración de un bucket de Amazon S3 en Outposts
<a name="create-outposts-bucket"></a>

Amazon EMR utiliza el AWS SDK para Java con Amazon S3 en Outposts para almacenar datos de entrada y de salida. Los archivos de registro de Amazon EMR se almacenan en la ubicación regional de Amazon S3 que elija pero no se almacenan localmente en Outpost. Para obtener más información, consulte [Ver archivos de registro](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-manage-view-web-log-files.html) en la *Guía de administración de Amazon EMR*. 

Los buckets de S3 on Outposts aplican ciertas restricciones y limitaciones de nomenclatura para cumplir con los requisitos de Amazon S3 y DNS. Para obtener más información, consulte [Creación de un bucket de S3 en Outposts](S3OutpostsCreateBucket.md).

Con la versión 7.0.0 y posteriores de Amazon EMR, puede usar Amazon EMR con S3 en Outposts y el sistema de archivos S3A.

**Requisitos previos**  
**Permisos de S3 en Outposts**: al crear el perfil de instancia de Amazon EMR, su rol debe incluir el espacio de nombres de AWS Identity and Access Management (IAM) para S3 en Outposts. S3 en Outposts tiene su propio espacio de nombres: `s3-outposts*`. Para ver un ejemplo de política que utiliza este espacio de nombres, consulte [Configuración de IAM con S3 en Outposts](S3OutpostsIAM.md).

**Conector S3A**: para configurar el clúster de EMR para que pueda acceder a los datos de un bucket de Amazon S3 en Outposts, debe utilizar el conector S3A de Apache Hadoop. Para usar el conector, asegúrese de que todos sus URI de S3 usen el esquema `s3a`. Si no es así, puede configurar la implementación del sistema de archivos que utiliza para el clúster de EMR para que sus URI de S3 funcionen con el conector S3A.

Para configurar la implementación del sistema de archivos para que funcione con el conector S3A, utilice las propiedades de configuración `fs.file_scheme.impl` y `fs.AbstractFileSystem.file_scheme.impl` del clúster de EMR, donde `file_scheme` equivale al tipo de URI de S3 que tenga. Para utilizar el ejemplo siguiente, sustituya *`user input placeholders`* con su propia información. Por ejemplo, para cambiar la implementación del sistema de archivos para los URI de S3 que utilizan el esquema `s3`, especifique las siguientes propiedades de configuración del clúster:

```
1. [
2.   {
3. "Classification": "core-site",
4.     "Properties": {
5.     "fs.s3.impl": "org.apache.hadoop.fs.s3a.S3AFileSystem",
6.     "fs.AbstractFileSystem.s3.impl": "org.apache.hadoop.fs.s3a.S3A"
7.     }
8.   }
9. ]
```

Para usar S3A, defina la propiedad de configuración `fs.file_scheme.impl` en `org.apache.hadoop.fs.s3a.S3AFileSystem` y establezca la propiedad `fs.AbstractFileSystem.file_scheme.impl` en `org.apache.hadoop.fs.s3a.S3A`.

Por ejemplo, si accede a la ruta `s3a://bucket/...`, defina la propiedad `fs.s3a.impl` en `org.apache.hadoop.fs.s3a.S3AFileSystem` y establezca la propiedad `fs.AbstractFileSystem.s3a.impl` en `org.apache.hadoop.fs.s3a.S3A`.

## Introducción al uso de Amazon EMR con Amazon S3 en Outposts
<a name="getting-started-outposts"></a>

En los temas que siguen se explica cómo empezar a utilizar Amazon EMR con Amazon S3 en Outposts.

**Topics**
+ [Creación de una política de permisos](#create-permission-policy)
+ [Creación y configuración de un clúster](#configure-cluster)
+ [Información general sobre las configuraciones](#configurations-overview)
+ [Consideraciones](#considerations)

### Creación de una política de permisos
<a name="create-permission-policy"></a>

Antes de poder crear un clúster de EMR que utilice Amazon S3 en Outposts, debe crear una política de IAM para adjuntarla al perfil de instancia de Amazon EC2 para el clúster. La política debe tener permisos de acceso al Nombre de recurso de Amazon (ARN) del punto de acceso de S3 en Outposts. Para obtener más información acerca de la creación de políticas de IAM para S3 en Outposts, consulte [Configuración de IAM con S3 en Outposts](S3OutpostsIAM.md). 

En la siguiente política de ejemplo se muestra cómo conceder los permisos necesarios. Después de crear la política, adjúntela al rol de perfil de instancia que utilice para crear su clúster de EMR, tal y como se describe en la sección [Creación y configuración de un clúster](#configure-cluster). Para utilizar este ejemplo, sustituya *`user input placeholders`* por su propia información.

```
 1. {
 2. "Version":"2012-10-17",		 	 	  
 3.   "Statement": [
 4.         {
 5.   "Effect": "Allow",
 6.             "Resource": "arn:aws:s3-outposts:us-west-2:111122223333:outpost/op-01ac5d28a6a232904/accesspoint/access-point-name,
 7.             "Action": [
 8.                 "s3-outposts:*"
 9.             ]
10.         }
11.     ]
12.     
13.  }
```

### Creación y configuración de un clúster
<a name="configure-cluster"></a>

Para crear un clúster que ejecute Spark con S3 en Outposts, complete los siguientes pasos en la consola.

**Para crear un clúster que ejecute Spark con S3 en Outposts**

1. Abra la consola de Amazon EMR en[https://console.aws.amazon.com/elasticmapreduce/](https://console.aws.amazon.com/elasticmapreduce/).

1. En el panel de navegación izquierdo, elija **Clusters (Clústeres)**.

1. Elija **Create cluster**.

   

1. Para la **versión de Amazon EMR**, elija **emr-7.0.0** o posterior.

1. Para el paquete de aplicaciones, elija **Interactivo con Spark**. Seleccione cualquier otra aplicación que desee incluir en el clúster.

1. Para habilitar Amazon S3 en Outposts, realice la siguiente configuración.

**Ejemplo de configuración**  
Para usar esta configuración de ejemplo, sustituya `user input placeholders` por su información.

   ```
    1. [
    2.  {
    3.    "Classification": "core-site",
    4.    "Properties": {
    5.      "fs.s3a.bucket.DOC-EXAMPLE-BUCKET.accesspoint.arn": "arn:aws:s3-outposts:us-west-2:111122223333:outpost/op-01ac5d28a6a232904/accesspoint/access-point-name"
    6.      "fs.s3a.committer.name": "magic", 
    7.      "fs.s3a.select.enabled": "false"
    8.     }
    9.   },
   10.   {
   11.     "Classification": "hadoop-env",
   12.     "Configurations": [
   13.       {
   14.         "Classification": "export",
   15.         "Properties": {
   16.           "JAVA_HOME": "/usr/lib/jvm/java-11-amazon-corretto.x86_64" 
   17.           }
   18.        }
   19.      ],
   20.      "Properties": {}
   21.    },
   22.    {
   23.      "Classification": "spark-env",
   24.      "Configurations": [
   25.        {
   26.          "Classification": "export",
   27.          "Properties": {
   28.            "JAVA_HOME": "/usr/lib/jvm/java-11-amazon-corretto.x86_64"
   29.          }
   30.        }
   31.       ],
   32.       "Properties": {}
   33.      },
   34.      {
   35.       "Classification": "spark-defaults",
   36.       "Properties": {
   37.         "spark.executorEnv.JAVA_HOME": "/usr/lib/jvm/java-11-amazon-corretto.x86_64",
   38.         "spark.sql.sources.fastS3PartitionDiscovery.enabled": "false"
   39.       }
   40.      }
   41.   ]
   ```

1. En la sección **Redes**, elija una nube privada virtual (VPC) y una subred que estén en su bastidor de AWS Outposts. Para obtener más información sobre Amazon EMR en Outposts, consulte [Clústeres de EMR en AWS Outposts](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-outposts.html) en la *Guía de administración de Amazon EMR*.

1. En la sección **Perfil de instancia de EC2 para Amazon EMR**, elija el rol de IAM que tenga adjunta la [política de permisos que ha creado anteriormente](#create-permission-policy).

1. Configure los ajustes de clúster restantes y, a continuación, elija **Crear clúster**.

### Información general sobre las configuraciones
<a name="configurations-overview"></a>

En las siguientes tablas se describen las configuraciones de S3A y los valores que se deben especificar para los parámetros al configurar un clúster que utiliza S3 en Outposts con Amazon EMR.


| Parámetro | Predeterminado | Valor obligatorio para S3 en Outposts | Explicación | 
| --- | --- | --- | --- | 
|  `fs.s3a.aws.credentials.provider`  |  Si no se especifica, S3A buscará el bucket de S3 de la región con el nombre del bucket de Outposts.  |  El ARN del punto de acceso del bucket de S3 en Outposts  |  Amazon S3 en Outposts admite puntos de acceso únicamente de la virtual private cloud (VPC) como el único medio para acceder a los buckets de Outposts.  | 
|  `fs.s3a.committer.name`  | file |  `magic`  |  Magic es el único confirmador compatible con S3 en Outposts.   | 
|  `fs.s3a.select.enabled`  |  `TRUE`  |  `FALSE`  | S3 Select no es compatible con Outposts. | 
|  `JAVA_HOME`  |  `/usr/lib/jvm/java-8`  |  `/usr/lib/jvm/java-11-amazon-corretto.x86_64`  |  S3 en Outposts en S3A requiere la versión 11 de Java.  | 

En las siguientes tablas, se describen las configuraciones de Spark y los valores que se deben especificar para los parámetros al configurar un clúster que utiliza S3 en Outposts con Amazon EMR.


| Parámetro | Predeterminado | Valor obligatorio para S3 en Outposts | Explicación | 
| --- | --- | --- | --- | 
|  `spark.sql.sources.fastS3PartitionDiscovery.enabled`  |  `TRUE`  |  `FALSE`  |  S3 en Outposts no admite la partición rápida.  | 
|  `spark.executorEnv.JAVA_HOME`  |  `/usr/lib/jvm/java-8`  |  `/usr/lib/jvm/java-11-amazon-corretto.x86_64`  |  S3 en Outposts en S3A requiere la versión 11 de Java.  | 

### Consideraciones
<a name="considerations"></a>

Tenga en cuenta lo siguiente cuando integre Amazon EMR con los buckets de S3 en Outposts:
+ Amazon S3 en Outposts es compatible con la versión 7.0.0 y posteriores de Amazon EMR.
+ Se requiere el conector S3A para utilizar S3 en Outposts con Amazon EMR. Solo S3A tiene las características necesarias para interactuar con los buckets de S3 en Outposts. Para obtener información sobre la configuración del conector S3A, consulte el apartado [Requisitos previos](#s3a-outposts-prerequisites). 
+ Amazon S3 en Outposts solo admite el cifrado del servidor con claves administradas por Amazon S3 (SSE-S3) con Amazon EMR. Para obtener más información, consulte [Cifrado de datos en S3 en Outposts](s3-outposts-data-encryption.md).
+ Amazon S3 en Outposts no admite la escritura con el FileOutputCommitter de S3A. Al escribir con el FileOutputCommitter de S3A en los buckets de S3 en Outposts, se produce el siguiente error: InvalidStorageClass: The storage class you specified is not valid.
+ Amazon S3 en Outposts no es compatible con Amazon EMR sin servidor ni Amazon EMR en EKS.
+ Los registros de Amazon EMR se almacenan en la ubicación regional de Amazon S3 que haya elegido pero no se almacenan localmente en el bucket de S3 en Outposts.