我正在EC2实例上运行Spark 2.4。我承担着IAM角色,并在sparkSession.sparkContext.hadoopConfiguration中设置密钥/秘密密钥/令牌,并将凭据提供程序设置为“ org.apache.hadoop.fs.s3a.TemporaryAWSCredentialsProvider”。
当我尝试从s3中读取数据集时(使用s3a,这也是在hadoop配置中设置的),我收到一条错误消息
com.amazonaws.services.s3.model.AmazonS3Exception:状态代码:403,AWS服务:Amazon S3,AWS请求ID:7376FE009AD36330,AWS错误代码:null,AWS错误消息:禁止
读取命令:
val myData = sparkSession.read.parquet("s3a://myBucket/myKey")
我反复检查了S3路径,它是正确的。我假设的IAM角色在S3存储桶上具有正确的特权。在这一点上,我唯一能想到的是spark具有某种隐藏的凭证链排序,即使我在hadoop配置中设置了凭证,它仍然从其他地方(我的实例配置文件?)获取凭证。但是我无法诊断出来。
感谢您的帮助。很高兴提供更多详细信息。
答案 0 :(得分:1)
public class StartWindowViewModel : BindableBase, IStartWindowViewModel
{
private readonly IRegionManager regionManager;
public StartWindowViewModel(IRegionManager regionManager)
{
this.regionManager = regionManager;
NavigationCommand = new DelegateCommand<string>(Navigate);
}
private void Navigate(string uri)
{
regionManager.RequestNavigate("ContentRegion", new Uri(uri, UriKind.Relative),
r => {
if (r != null) ;
//MessageBox.Show("Result: "+r.Result);
else MessageBox.Show("Error: " + r.Error.Message);
});
}
public DelegateCommand<string> NavigationCommand { get; set; }
}
设置为fs.s3a.aws.credentials.provider
;这将是唯一使用过的进一步阅读:Troubleshooting S3A