aws要求我正在开发的产品能够识别它代表用户向s3资源发出的请求,以便他们能够评估它的影响。
为了实现这一点,我们必须为针对来自emr应用程序的s3 bucket执行的每个上传请求设置user-agent头。我想知道如何才能做到这一点?
hadoop的医生提到 fs.s3a.user.agent.prefix
属性(core default.xml)。然而,协议 s3a
似乎已弃用(用于存储和文件系统),因此我不确定此属性是否有效。
为了给我需要做的更多的上下文,使用aws java sdk,可以设置用户代理头的前缀,例如:
AWSCredentials credentials;
ClientConfiguration conf = new ClientConfiguration()
.withUserAgentPrefix("APN/1.0 PARTNER/1.0 PRODUCT/1.0");
AmazonS3Client client = new AmazonS3Client(credentials, conf);
然后,每个请求的用户代理http头将具有类似于以下值的值: APN/1.0 PARTNER/1.0 PRODUCT/1.0, aws-sdk-java/1.11.234 Linux/4.15.0-58-generic Java_HotSpot(TM)_64-Bit_Server_VM/25.201-b09 java/1.8.0_201
. 我需要实现类似的东西时,上传文件从电子病历应用程序。
2条答案
按热度按时间yrdbyhpb1#
s3a在asf hadoop中没有被弃用;我要说的是,它现在领先于emr自己的连接器。如果您使用的是emr,您可能可以使用它,否则您就可以使用它们实现的内容。
fwiw在s3a中,我们正在研究如何动态地更改特定查询的头,这样您就可以超越特定用户,在共享集群中实现特定的hive/spark查询。但要做到这一点相当复杂,因为您需要在每个请求设置上进行。
ws51t4hk2#
在我的案例中,解决方案是包括
awssdk_config_default.json
提交给emr作业的jar中的文件。aws sdk使用此文件来允许开发人员覆盖某些自定义设置。我在提交给emr的jar中添加了这个json文件,内容如下:
注:通过
fs.s3a.user.agent.prefix
emr作业的属性无效。aws emr在处理存储在使用aws sdk的s3中的文件时使用emrfs。我意识到这是因为我有时看到aws emr中抛出了一个异常,它的堆栈跟踪的一部分是:我把答案贴在这里以备将来参考。一些兴趣链接:
aws sdk中使用此配置文件的类:internalconfig.java
https://stackoverflow.com/a/31173739/1070393
电子病历