[HADOOP] Spark가 s3에서 정보를 읽거나 쓰지 않습니다 (ResponseCode = 400, ResponseMessage = Bad Request).
HADOOPSpark가 s3에서 정보를 읽거나 쓰지 않습니다 (ResponseCode = 400, ResponseMessage = Bad Request).
스파크 응용 프로그램을 구현했습니다. 스파크 컨텍스트를 만들었습니다.
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=
하둡 버전 : 2.7
AWS 엔드 포인트 : s3.eu-central-1.amazonaws.com
(hadoop 2.8에서-모두 잘 작동합니다)
해결법
-
==============================
1.문제는 프랑크푸르트가 s3n을 지원하지 않는다는 것입니다. s3a를 사용해야합니다. 이 지역에는 V4 인증 버전이 있습니다. http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region
문제는 프랑크푸르트가 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-> true
conf.set("com.amazonaws.services.s3.enableV4", "true");//doesn't work for me
로컬 컴퓨터에서 다음을 사용했습니다.
System.setProperty("com.amazonaws.services.s3.enableV4", "true");
AWS EMR에서 실행하려면 spark-submit에 params를 추가해야합니다.
spark.executor.extraJavaOptions=-Dcom.amazonaws.services.s3.enableV4=true spark.driver.extraJavaOptions=-Dcom.amazonaws.services.s3.enableV4=true
또한 파일 시스템에 대한 클래스 구현을 추가해야합니다.
conf.set("spark.hadoop.fs.s3a.impl", org.apache.hadoop.fs.s3a.S3AFileSystem.class.getName()); conf.set("spark.hadoop.fs.hdfs.impl", org.apache.hadoop.hdfs.DistributedFileSystem.class.getName()); conf.set("spark.hadoop.fs.file.impl", org.apache.hadoop.fs.LocalFileSystem.class.getName());
from https://stackoverflow.com/questions/46152202/spark-doesnt-read-write-information-from-s3-responsecode-400-responsemessage by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Scala (또는 Java)에서 HBase 액세스를위한 화상 대체 (0) | 2019.08.10 |
---|---|
[HADOOP] 저장소 : 샌드 박스에 대한 저장소 메타 데이터 (repomd.xml)를 검색 할 수 없습니다. 경로를 확인하고 다시 시도하십시오 (0) | 2019.08.10 |
[HADOOP] HADOOP YARN-응용 프로그램이 스케줄러에 추가되었으며 아직 활성화되지 않았습니다. 클러스터 리소스가 비어 있으므로 AM 할당 건너 뛰기 (0) | 2019.08.10 |
[HADOOP] 2 개의 다른 소스 입력 파일에서 읽은 Hadoop 맵퍼 (0) | 2019.08.10 |
[HADOOP] oozie Sqoop 작업이 하이브로 데이터를 가져 오지 못함 (0) | 2019.08.09 |