我实现了spark应用程序。我创建了spark上下文:
private JavaSparkContext createJavaSparkContext() {
SparkConf conf = new SparkConf();
conf.setAppName("test");
if (conf.get("spark.master", null) == null) {
conf.setMaster("local[4]");
}
conf.set("fs.s3a.awsAccessKeyId", getCredentialConfig().getS3Key());
conf.set("fs.s3a.awsSecretAccessKey", getCredentialConfig().getS3Secret());
conf.set("fs.s3a.endpoint", getCredentialConfig().getS3Endpoint());
return new JavaSparkContext(conf);
}
我尝试通过spark dataset api(spark sql)从s3获取数据:
String s = "s3a://" + getCredentialConfig().getS3Bucket();
Dataset<Row> csv = getSparkSession()
.read()
.option("header", "true")
.csv(s + "/dataset.csv");
System.out.println("Read size :" + csv.count());
出现错误:
Exception in thread "main" com.amazonaws.services.s3.model.AmazonS3Exception: Status Code: 400, AWS Service: Amazon S3, AWS Request ID: 1A3E8CBD4959289D, AWS Error Code: null, AWS Error Message: Bad Request, S3 Extended Request ID: Q1Fv8sNvcSOWGbhJSu2d3Nfgow00388IpXiiHNKHz8vI/zysC8V8/YyQ1ILVsM2gWQIyTy1miJc=
hadoop版本:2.7
aws端点:s3.eu-central-1.amazonaws.com
(在Hadoop2.8上-一切正常)
1条答案
按热度按时间ruoxqz4g1#
问题是:法兰克福不支持s3n。需要使用s3a。这个区域有v4身份验证版本。http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region
仅限eu(法兰克福)eu-central-1版本4
这意味着需要在aws客户端上启用它。需要添加系统属性
com.amazonaws.services.s3.enablev4->真
在我使用的本地计算机上:
要在aws emr上运行,需要将参数添加到spark submit: