Como gravar dados em um bucket do Amazon S3 que não é de sua propriedade com o Amazon EMR - Amazon EMR

Como gravar dados em um bucket do Amazon S3 que não é de sua propriedade com o Amazon EMR

Ao gravar um arquivo em um bucket do Amazon Simple Storage Service (Amazon S3), por padrão, você é o único usuário capaz de ler esse arquivo. A suposição é a de que você gravará arquivos em seus próprio buckets, e essa configuração padrão protege a privacidade desses arquivos.

No entanto, se você estiver executando um cluster e quiser que a saída seja gravada no bucket do Amazon S3 de outro usuário da AWS e quiser que esse outro usuário da AWS seja capaz de ler a saída, será necessário fazer duas coisas:

  • Fazer com que o outro usuário da AWS conceda permissões de gravação no próprio bucket do Amazon S3. O cluster que executa é operado com suas credenciais da AWS e, portanto, todos os clusters que você executar também poderão gravar no bucket desse outro usuário da AWS.

  • Definir permissões de leitura para o outro usuário da AWS nos arquivos que você ou o cluster gravam no bucket do Amazon S3. A maneira mais fácil de definir essas permissões de leitura é usar listas de controle de acesso (ACLs) pré-configuradas, um conjunto predefinido de políticas de acesso definidas pelo Amazon S3.

Para obter informações sobre como o outro usuário da AWS pode lhe conceder permissões para gravar arquivos no bucket do Amazon S3 que pertence ao outro usuário, consulte Editing bucket permissions no Guia do usuário do Amazon Simple Storage Service.

Para o seu cluster usar ACLs pré-configuradas ao gravar arquivos no Amazon S3, defina a opção de configuração de cluster fs.s3.canned.acl para a ACL pré-configurada usar. A tabela a seguir lista as ACLs pré-configuradas atualmente definidas.

ACL pré-configurada Descrição
AuthenticatedRead Especifica que o proprietário recebe Permission.FullControl e o favorecido do grupo GroupGrantee.AuthenticatedUsers recebe o acesso Permission.Read.
BucketOwnerFullControl Especifica que o proprietário do bucket recebe Permission.FullControl. O proprietário do bucket não é necessariamente o proprietário do objeto.
BucketOwnerRead Especifica que o proprietário do bucket recebe Permission.Read. O proprietário do bucket não é necessariamente o proprietário do objeto.
LogDeliveryWrite Especifica que o proprietário recebe Permission.FullControl e o favorecido do grupo GroupGrantee.LogDelivery recebe o acesso Permission.Write, permitindo que logs de acesso sejam fornecidos.
Private Especifica que o proprietário recebe Permission.FullControl.
PublicRead Especifica que o proprietário recebe Permission.FullControl e o favorecido do grupo GroupGrantee.AllUsers recebe o acesso Permission.Read.
PublicReadWrite Especifica que o proprietário recebe Permission.FullControl e o favorecido do grupo GroupGrantee.AllUsers recebe os acessos Permission.Read e Permission.Write.

Há muitas maneiras de definir opções de configuração do cluster, dependendo do tipo de cluster que você está executando. Os procedimentos a seguir mostram como definir a opção para casos comuns.

Para gravar arquivos usando ACLs pré-configuradas no Hive
  • No prompt de comando do Hive, defina a opção de configuração fs.s3.canned.acl como a ACL pré-configurada desejada na qual você deseja que o cluster defina os arquivos que ele grava no Amazon S3. Para acessar o prompt de comando do Hive, conecte-se ao nó principal usando o SSH e digite Hive no prompt de comando do Hadoop. Para ter mais informações, consulte Como se conectar ao nó primário do cluster do Amazon EMR usando SSH.

    O exemplo a seguir define a configuração de opção fs.s3.canned.acl como BucketOwnerFullControl, que dá ao proprietário do bucket do Amazon S3 controle total sobre o arquivo. Observe que o comando definido faz distinção entre maiúsculas e minúsculas e não contém aspas ou espaços.

    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;

    As duas últimas linhas do exemplo criam uma tabela que é armazenada no Amazon S3 e gravam dados nessa tabela.

Para gravar arquivos usando ACLs pré-configuradas no Pig
  • No prompt de comando do Pig, defina a opção de configuração fs.s3.canned.acl como a ACL pré-configurada na qual você deseja que o cluster defina os arquivos que gravará no Amazon S3. Para acessar o prompt de comando do Pig, conecte-se ao nó principal usando o SSH e digite Pig no prompt de comando do Hadoop. Para ter mais informações, consulte Como se conectar ao nó primário do cluster do Amazon EMR usando SSH.

    O exemplo a seguir define a configuração de opção fs.s3.canned.acl como BucketOwnerFullControl, que dá ao proprietário do bucket do Amazon S3 controle total sobre o arquivo. Observe que o comando definido inclui um espaço antes do nome da ACL pré-configurada e não contém aspas.

    pig> set fs.s3.canned.acl BucketOwnerFullControl; store some data into 's3://amzn-s3-demo-bucket/pig/acl';
Para gravar arquivos usando ACLs pré-configuradas em um JAR personalizado
  • Defina a opção de configuração fs.s3.canned.acl usando o Hadoop com o sinalizador -D. Isso é mostrado no exemplo a seguir.

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