from pyspark.sql import SparkSession
import boto3
import os
import pandas as pd
spark = SparkSession.builder.getOrCreate()
hadoop_conf = spark.sparkContext._jsc.hadoopConfiguration()
hadoop_conf.set("fs.s3.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem")
hadoop_conf.set("fs.s3a.access.key", "myaccesskey")
hadoop_conf.set("fs.s3a.secret.key", "mysecretkey")
hadoop_conf.set("fs.s3a.endpoint", "s3.amazonaws.com")
hadoop_conf.set("fs.s3a.aws.credentials.provider", "org.apache.hadoop.fs.s3a.BasicAWSCredentialsProvider")
hadoop_conf.set("fs.s3a.connection.ssl.enabled", "true")
conn = boto3.resource("s3", region_name="us-east-1")
df = spark.read.csv("s3a://mani-test-1206/test/test.csv", header=True)
df.show()
spark.stop()
運行上面的代碼時,我遇到了以下錯誤:
java.io.IOException: From option fs.s3a.aws.credentials.provider java.lang.ClassNotFoundException: Class org.apache.hadoop.fs.s3a.BasicAWSCredentialsProvider not found
Hadoop 和 aws jars 程式正在使用:
spark-hadoop-分布: spark-3.2.0-bin-hadoop3.2
hadoop jars:
hadoop-annotations-3.2.0.jar
hadoop-auth-3.2.0.jar
hadoop-aws-3.2.0.jar
hadoop-client-api-3.3.1.jar
hadoop-client-runtime-3.3.1.jar
hadoop-common-3.2.0.jar
hadoop-hdfs-3.2.0.jar
aws jars:
aws-java-sdk-1.11.624.jar
aws-java-sdk-core-1.11.624.jar
aws-java-sdk-dynamodb-1.11.624.jar
aws-java-sdk-s3-1.11.624.jar
任何幫助將不勝感激,謝謝。
uj5u.com熱心網友回復:
您沒有為執行代碼的 ec2 實體正確設定實體組態檔(一種型別的 IAM 角色)。
所以它沒有適當的權限來訪問指定的 s3 存盤桶。
其次,檢查 java 庫是否是最新的并支持從 instance profile 獲取 aws 憑證。
uj5u.com熱心網友回復:
我有同樣的問題。什么對我有幫助:
- 將 hadoop-aws-3.2.0 更新為 3.2.2 版本
- 使用“fs.s3a.aws.credentials.provider”:“org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider”(它看起來更名)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/389726.html
標籤:亚马逊网络服务 阿帕奇火花 Hadoop 亚马逊-s3 火花
上一篇:如何在Scala中創建鑲木地板?
