Apache spark fs.s3配置,带有两个s3帐户和EMR
我有使用lambda和EMR的管道,我从一个s3帐户A读取csv,并将拼花写入帐户B中的另一个s3。 我在帐户B中创建了EMR,并且可以访问帐户B中的s3。 我无法在EMR_EC2_DefaultRole中添加帐户A s3 bucket访问权限(因为此帐户是企业范围的数据存储),因此我使用accessKey、secret key访问帐户A s3 bucket。这是通过congnito令牌完成的 方法1 我正在使用fs.s3协议从帐户A读取s3中的csv,并在帐户B上写入s3。 我有pyspark代码,它读取s3(A)并写入拼花地板s3(B)。我每次提交100个作业。这个pyspark代码在EMR中运行 使用以下设置进行读取Apache spark fs.s3配置,带有两个s3帐户和EMR,apache-spark,amazon-s3,pyspark,amazon-emr,Apache Spark,Amazon S3,Pyspark,Amazon Emr,我有使用lambda和EMR的管道,我从一个s3帐户A读取csv,并将拼花写入帐户B中的另一个s3。 我在帐户B中创建了EMR,并且可以访问帐户B中的s3。 我无法在EMR_EC2_DefaultRole中添加帐户A s3 bucket访问权限(因为此帐户是企业范围的数据存储),因此我使用accessKey、secret key访问帐户A s3 bucket。这是通过congnito令牌完成的 方法1 我正在使用fs.s3协议从帐户A读取s3中的csv,并在帐户B上写入s3。 我有pyspark
hadoop_config = sc._jsc.hadoopConfiguration()
hadoop_config.set("fs.s3.awsAccessKeyId", dl_access_key)
hadoop_config.set("fs.s3.awsSecretAccessKey", dl_secret_key)
hadoop_config.set("fs.s3.awsSessionToken", dl_session_key)
spark_df_csv = spark_session.read.option("Header", "True").csv("s3://somepath")
写作:
我正在使用s3a协议s3a://some\u bucket/
它是有效的,但有时我会看到
hadoop_config = sc._jsc.hadoopConfiguration()
hadoop_config.unset("fs.s3.awsAccessKeyId")
hadoop_config.unset("fs.s3.awsSecretAccessKey")
hadoop_config.unset("fs.s3.awsSessionToken")
spark_df_csv.repartition(1).write.partitionBy(['org_id', 'institution_id']). \
mode('append').parquet(write_path)
问题:
这是可行的,但问题是如果我触发lambda,它反过来提交100个文件的作业(在循环中),大约10多个文件会导致在将文件写入s3 bucket时拒绝访问
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\n。。。1更多\n使用者:com.amazon.ws.emr.hadoop.fs.shade.com.amazonaws.services.s3.model.amazons3异常:拒绝访问(服务:
这可能是因为此unset有时不工作或
因为并行运行Spark上下文/会话集unset发生在并行中?我的意思是一个作业的Spark上下文正在破坏hadoop配置,而另一个正在进行设置,这可能会导致此问题,尽管不确定Spark上下文如何并行工作
不是每个作业都有单独的Spark上下文和会话。
请针对我的情况提出备选方案。您能否更具体地说明您收到的错误/异常?它是在从A读取还是向B写入时发生的?@CharlieFlowers在第二种方法中,我得到了10个文件的AWS 400访问被拒绝错误,其余100个文件工作正常。@CharlieFlowers更新了问题