Как установить oop fs.s3a.acl.default на AWS EMR? - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть приложение для уменьшения карты, работающее на AWS EMR, которое записывает некоторые данные в другую (aws учетную запись) корзину s3. У меня есть настройка прав доступа, и задание можно записать во внешнее хранилище, но владельцем по-прежнему является root из учетной записи, в которой выполняется задание Had oop. Я хотел бы изменить это на внешнюю учетную запись, которая владеет корзиной.

Я обнаружил, что могу установить fs.s3a.acl.default на bucket-owner-full-control, однако это не похоже на работу. Вот что я делаю:

conf.set("fs.s3a.acl.default", "bucket-owner-full-control");
FileSystem fileSystem = FileSystem.get(URI.create(s3Path), conf);
FSDataOutputStream fsDataOutputStream = fileSystem.create(new Path(filePath));
PrintWriter writer  = new PrintWriter(fsDataOutputStream);
writer.write(contentAsString);
writer.close();
fsDataOutputStream.close();

Любая помощь приветствуется.

Ответы [ 2 ]

2 голосов
/ 29 апреля 2020
conf.set("fs.s3a.acl.default", "bucket-owner-full-control");

- это правильное свойство, которое вы устанавливаете.

Как это свойство в core-site. xml, чтобы предоставить полный контроль владельцу корзины.

<property>
  <name>fs.s3a.acl.default</name>
  <description>Set a canned ACL for newly created and copied objects. Value may be private,
     public-read, public-read-write, authenticated-read, log-delivery-write,
     bucket-owner-read, or bucket-owner-full-control.</description>
</property>

BucketOwnerFullControl

    Specifies that the owner of the bucket is granted Permission.FullControl. The owner of the bucket is not necessarily the same as the owner of the object.

Я рекомендую установить fs.s3.canned.acl также в значение BucketOwnerFullControl

Для отладки вы можете использовать приведенный ниже фрагмент, чтобы понять какие параметры фактически передаются ..

for (Entry<String, String> entry: conf) {
      System.out.printf("%s=%s\n", entry.getKey(), entry.getValue());
    }

Для целей тестирования выполните эту команду с командной строкой

aws s3 cp s3://bucket/source/dummyfile.txt s3://bucket/target/dummyfile.txt --sse --acl bucket-owner-full-control

Если это работает, то через API также будет.

Бонус с Spark, полезный для пользователей spark scala:

Чтобы Spark получил доступ к файловой системе s3 и установил правильные конфигурации, как показано в примере ниже ...

val hadoopConf = spark.sparkContext.hadoopConfiguration
    hadoopConf.set("fs.s3a.fast.upload","true")
    hadoopConf.set("mapreduce.fileoutputcommitter.algorithm.version","2")
    hadoopConf.set("fs.s3a.server-side-encryption-algorithm", "AES256")
    hadoopConf.set("fs.s3a.canned.acl","BucketOwnerFullControl")
    hadoopConf.set("fs.s3a.acl.default","BucketOwnerFullControl")
0 голосов
/ 29 апреля 2020

Если вы используете EMR, вы должны использовать S3-коннектор команды AWS с URL-адресами «s3: //» и использовать их документированные параметры конфигурации. Они не поддерживают apache, поэтому любая опция с "fs.s3a" в начале не будет иметь никакого эффекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...