AWS Sagemaker Spark S3 访问问题

Posted

技术标签:

【中文标题】AWS Sagemaker Spark S3 访问问题【英文标题】:AWS Sagemaker Spark S3 access issue 【发布时间】:2020-03-09 19:19:10 【问题描述】:

我是 AWS sagemaker 的新手。我在具有私有子网、kms 默认加密密钥、root 访问权限、没有直接 Internet 访问权限的 VPC 中创建了一个笔记本。我已根据文档附加了对 IAM 中的 Sagemaker 和 S3 具有完全访问权限的策略。现在,当一位数据科学家试图在 jupyter 中运行他的代码时,遇到了错误。我可以看到jar文件(/home/ec2-user/anaconda3/envs/python3/lib/python3.6/site-packages/sagemaker_pyspark/jars/),我什至在代码中给出了访问密钥和密钥,有什么我们在这里做错了

import os
import boto3

from pyspark import SparkContext, SparkConf
from pyspark.sql import SparkSession

import sagemaker
from sagemaker import get_execution_role
import sagemaker_pyspark
import pyspark

role = get_execution_role()
spark = SparkSession.builder \
            .appName("app_name2") \
            .getOrCreate()

sc=pyspark.SparkContext.getOrCreate()
sc.setSystemProperty("com.amazonaws.services.s3.enableV4", "true")

hadoop_conf = spark.sparkContext._jsc.hadoopConfiguration()
spark._jsc.hadoopConfiguration().set("fs.s3a.access.key", 'access_key')
spark._jsc.hadoopConfiguration().set("fs.s3a.secret.key", 'secret_key')
spark._jsc.hadoopConfiguration().set("fs.s3a.endpoint", "s3.us-east-2.amazonaws.com")
spark._jsc.hadoopConfiguration().set("com.amazonaws.services.s3a.enableV4", "true")
spark._jsc.hadoopConfiguration().set("fs.s3a.connection.ssl.enabled", "false");
spark._jsc.hadoopConfiguration().set("fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem")
df= spark.read.csv("s3a://mybucket/ConsolidatedData/my.csv",header="true")


Py4JJavaError: An error occurred while calling o579.csv.
: java.lang.RuntimeException: java.lang.ClassNotFoundException: Class org.apache.hadoop.fs.s3a.S3AFileSystem not found
    at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2195)
    at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2654)
    at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2667)
    at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:94)
    at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2703)
    at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2685)
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:373)
    at org.apache.hadoop.fs.Path.getFileSystem(Path.java:295)
    at org.apache.spark.sql.execution.datasources.DataSource$.org$apache$spark$sql$execution$datasources$DataSource$$checkAndGlobPathIfNecessary(DataSource.scala:709)

【问题讨论】:

【参考方案1】:

/home/ec2-user/anaconda3/envs/python3/lib/python3.6/site-packages/pyspark/jars 中缺少 Jar 文件,我正在查看 (/home/ec2-user/anaconda3/envs /python3/lib/python3.6/site-packages/sagemaker_pyspark/jars/。在第一个位置复制文件解决了问题。

【讨论】:

以上是关于AWS Sagemaker Spark S3 访问问题的主要内容,如果未能解决你的问题,请参考以下文章

AWS SageMaker:使用托管在 S3 中的经过训练的模型创建终端节点

从 AWS SageMaker 访问 Google BigQuery

如何从 Apache Spark 访问 s3a:// 文件?

用于 AWS SageMaker 实例的 GitHub 访问令牌范围

PySpark:AWS s3n 正在工作,但 s3a 没有

Spark的S3角色授权?