Cómo escribir datos en un bucket de Amazon S3 que no es de tu propiedad con Amazon EMR - Amazon EMR

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Cómo escribir datos en un bucket de Amazon S3 que no es de tu propiedad con Amazon EMR

Cuando escriba un archivo en un bucket de Amazon Simple Storage Service (Amazon S3), de forma predeterminada, usted es el único capaz de leer dicho archivo. La suposición es que escribirá archivos en sus propios buckets y esta configuración predeterminada protege la privacidad de sus archivos.

Sin embargo, si está ejecutando un clúster y quiere que el resultado se escriba en el bucket de Amazon S3 de otro AWS usuario y quiere que ese otro AWS usuario pueda leer ese resultado, debe hacer dos cosas:

  • Pide al otro AWS usuario que te conceda permisos de escritura para su bucket de Amazon S3. El clúster que lance se ejecuta con sus AWS credenciales, por lo que cualquier clúster que lance también podrá escribir en el bucket de ese otro AWS usuario.

  • Establezca permisos de lectura para el otro AWS usuario en los archivos que usted o el clúster escriban en el bucket de Amazon S3. La forma más sencilla de configurar estos permisos de lectura es utilizar listas de control de acceso predefinidas (ACLs), un conjunto de políticas de acceso predefinidas definidas por Amazon S3.

Para obtener información sobre cómo el otro AWS usuario puede concederle permisos para escribir archivos en el bucket de Amazon S3 del otro usuario, consulte Edición de permisos de bucket en la Guía del usuario de Amazon Simple Storage Service.

Para que su clúster utilice el modo predeterminado ACLs al escribir archivos en Amazon S3, defina la opción de configuración del fs.s3.canned.acl clúster en el valor predeterminado ACL para su uso. En la siguiente tabla se enumeran las opciones predefinidas actualmenteACLs.

Enlatado ACL Descripción
AuthenticatedRead Especifica que al usuario se le otorga Permission.FullControl y al beneficiario del grupo GroupGrantee.AuthenticatedUsers se le otorga acceso Permission.Read.
BucketOwnerFullControl Especifica que al propietario del bucket se le otorga Permission.FullControl. El propietario del bucket no es necesariamente el mismo que el propietario del objeto.
BucketOwnerRead Especifica que al propietario del bucket se le otorga Permission.Read. El propietario del bucket no es necesariamente el mismo que el propietario del objeto.
LogDeliveryWrite Especifica que al propietario se le otorga Permission.FullControl y al beneficiario del grupo GroupGrantee.LogDelivery se le otorga acceso Permission.Write, de modo que se puedan enviar los registros de acceso.
Private Especifica que al propietario se le otorga Permission.FullControl.
PublicRead Especifica que al usuario se le otorga Permission.FullControl y al beneficiario del grupo GroupGrantee.AllUsers se le otorga acceso Permission.Read.
PublicReadWrite Especifica que al usuario se le otorga Permission.FullControl y al beneficiario del grupo GroupGrantee.AllUsers se le otorga acceso Permission.Read y Permission.Write.

Existen muchas formas de definir las opciones de configuración del clúster, en función del tipo de clúster que esté ejecutando. Los siguientes procedimientos muestran cómo definir la opción para casos comunes.

Para escribir archivos con archivos preconfigurados ACLs en Hive
  • Desde la línea de comandos de Hive, defina la opción de fs.s3.canned.acl configuración en la configuración predeterminada en la ACL que desee que el clúster esté configurado en los archivos que graba en Amazon S3. Para acceder a la línea de comandos de HiveSSH, conéctese al nodo maestro mediante Hive y escriba Hive en la línea de comandos de Hadoop. Para obtener más información, consulte Conéctese al nodo principal EMR del clúster de Amazon mediante SSH.

    El ejemplo siguiente establece la opción de configuración fs.s3.canned.acl en BucketOwnerFullControl, que proporciona al propietario del bucket de Amazon S3 un control completo sobre el archivo. Tenga en cuenta que el comando definido distingue entre mayúsculas y minúsculas y no contiene comillas ni espacios.

    hive> set fs.s3.canned.acl=BucketOwnerFullControl; create table acl (n int) location 's3://amzn-s3-demo-bucket/acl/'; insert overwrite table acl select count(*) from acl;

    Las dos últimas líneas del ejemplo crean una tabla que se almacena en Amazon S3 y escribe datos en la tabla.

Para escribir archivos en Pig, utilice la función «enlatada» ACLs
  • En la línea de comandos de Pig, defina la opción de fs.s3.canned.acl configuración en la configuración ACL predeterminada en la que desee que el clúster esté configurado en los archivos que graba en Amazon S3. Para acceder a la línea de comandos de PigSSH, conéctese al nodo maestro mediante Pig y escriba Pig en la línea de comandos de Hadoop. Para obtener más información, consulte Conéctese al nodo principal EMR del clúster de Amazon mediante SSH.

    El siguiente ejemplo establece la opción de fs.s3.canned.acl configuración en BucketOwnerFullControl, lo que proporciona al propietario del bucket de Amazon S3 el control total sobre el archivo. Tenga en cuenta que el comando set incluye un espacio antes del ACL nombre predeterminado y no contiene comillas.

    pig> set fs.s3.canned.acl BucketOwnerFullControl; store some data into 's3://amzn-s3-demo-bucket/pig/acl';
Para escribir archivos, utilice el formato ACLs predefinido de forma personalizada JAR
  • Defina la opción de configuración fs.s3.canned.acl utilizando Hadoop con la marca -D. Esto se muestra en el siguiente ejemplo.

    hadoop jar hadoop-examples.jar wordcount -Dfs.s3.canned.acl=BucketOwnerFullControl s3://amzn-s3-demo-bucket/input s3://amzn-s3-demo-bucket/output