重置hadoop aws键,以使用不同的用户名

时间:2018-09-28 15:09:57

标签: python amazon-s3 pyspark amazon-redshift databricks

对不起,标题太恐怖了,但这是我的情况

  1. 我有一个pyspark databricks笔记本,正在其中加载其他笔记本。
  2. 其中一台笔记本电脑正在设置一些redshift配置,以从redshift(某些临时S3存储桶)读取数据。我无法更改任何此配置。
  3. 在此配置下,这两个都返回True。这在第5步中很有用
  

sc._jsc.hadoopConfiguration()。get(“ fs.s3n.awsAccessKeyId”)==无   sc._jsc.hadoopConfiguration()。get(“ fs.s3n.awsSecretAccessKey”)==无

  1. 我有一个Apache Spark模型,需要将其存储到S3存储桶中,该存储桶与为redshift配置的存储桶不同
  2. 我正在腌制其他对象并使用boto3将其存储到AWS中,并且工作正常,但我认为我们无法像其他对象一样腌制apache模型。因此,我必须将模型的save方法与S3 url结合使用,为此,我要像这样设置AWS凭证,并且这样可以正常工作(如果同一集群中没有人不干扰AWS配置)。
  

sc._jsc.hadoopConfiguration()。set(“ fs.s3n.awsAccessKeyId”,   AWS_ACCESS_KEY_ID)           sc._jsc.hadoopConfiguration()。set(“ fs.s3n.awsSecretAccessKey”,AWS_SECRET_ACCESS_KEY)

  1. 保存此模型后,我还需要从redshift读取其他数据,此处它失败并出现以下错误。我认为,S3的redshift配置已被上述代码更改。
  

org.apache.spark.SparkException:由于阶段失败,作业被中止:   阶段1844.0中的任务0失败4次,最近一次失败:丢失的任务   在阶段1844.0中为0.3(TID 63816,10.0.63.188,执行者3):com.amazonaws.services.s3.model.AmazonS3Exception:Forbidden(Service:   亚马逊S3;状态码:403;错误代码:403禁止;禁止。要求编号:   3219CD268DEE5F53; S3扩展请求ID:   rZ5 / zi2B + AsGuKT0iW1ATUyh9xw7YAt9RULoE33WxTaHWUWqHzi1 + 0sRMumxnnNgTvNED30Nj4o =),S3扩展请求ID:   rZ5 / zi2B + AsGuKT0iW1ATUyh9xw7YAt9RULoE33WxTaHWUWqHzi1 + 0sRMumxnnNgTvNED30Nj4o =

现在我的问题是为什么我不能再次读取数据。将模型保存到S3后,如何显式设置redshift的S3配置?

我也不了解的是,最初的aws值为“无”,当我尝试自行重置为“无”时,会返回错误信息

The value of property fs.s3n.awsAccessKeyId must not be null

现在,我正在考虑一种解决方法,其中将模型本地保存在数据块上,然后将其压缩并上传到S3,但这仍然只是一个补丁。我想以适当的方式做到这一点。

很抱歉将引号框用于代码,因为它由于某些原因不能用于多行代码

先谢谢您!

1 个答案:

答案 0 :(得分:0)

重新导入用于设置redshift连接的笔记本。或者找到它的设置位置并复制该代码。

如果您没有权限修改要导入的笔记本,那么我想您没有权限在群集上设置角色。如果您使用角色,则不需要AWS键。