我知道这个问题可能被问过多次,但是我尝试了这些解决方案,但没有进行锻炼。因此,在新线程中要求它提供确定的解决方案。
我创建了一个具有S3只读权限的IAM用户(在所有S3资源上获取和列出),但是当我尝试使用HDFS命令从EMR群集访问S3时,它将为某些文件夹引发“错误代码403禁止访问”异常。其他职位的人回答这是一个权限问题;我没有找到正确的解决方案,因为它是“禁止访问”而不是“访问被拒绝”。仅对于存储桶中的某些文件夹(包含对象)和某些空文件夹,才会出现此错误的行为。有人观察到,如果我使用本机API调用,则它的正常工作如下:
使用s3a调用时出现“禁止”异常:hdfs dfs -ls s3a://<bucketname>/<folder>
使用s3本机调用s3n
和s3
时没有错误:hdfs dfs -ls s3://<bucketname>/<folder>
hdfs dfs -ls s3n://<bucketname>/<folder>
对于空文件夹也观察到了类似的行为,我了解在S3上,只有对象是物理文件,而其余的“存储桶和文件夹”只是占位符。但是,如果我创建一个新的空文件夹,则s3a
调用不会引发此异常。
附言-根IAM访问密钥超过了此异常。
最佳答案
我建议您在issue.apache.org,HADOOP项目,组件fs / s3上使用要使用的确切hadoop版本提交JIRA。将堆栈跟踪添加为第一条注释,因为这是我们开始计算正在发生的事情的唯一方法。
FWIW,除了简单的只读和R / W,我们没有测试受限权限;沿着路径混合权限不可避免地会破坏事情,因为客户端代码希望能够对存储桶中的任何内容进行HEAD,GET和LIST。
顺便说一句,Hadoop S3客户端通过创建带有“/”后缀e / g“folder /”的0字节对象来模拟所有空目录。然后在其上使用HEAD来查找空存储桶。将数据添加到空目录下时,模拟父目录为DELETE-d。