[HADOOP] Spark에서 S3 (프랑크푸르트) 사용하기
HADOOPSpark에서 S3 (프랑크푸르트) 사용하기
누구나 hadoop / spark 1.6.0을 사용하여 프랑크푸르트에서 s3을 사용하고 있습니까?
내 직업에 대한 결과를 s3에 저장하려고 할 때, 나의 의존성은 다음과 같이 선언된다 :
"org.apache.spark" %% "spark-core" % "1.6.0" exclude("org.apache.hadoop", "hadoop-client"),
"org.apache.spark" %% "spark-sql" % "1.6.0",
"org.apache.hadoop" % "hadoop-client" % "2.7.2",
"org.apache.hadoop" % "hadoop-aws" % "2.7.2"
다음 구성을 설정했습니다.
System.setProperty("com.amazonaws.services.s3.enableV4", "true")
sc.hadoopConfiguration.set("fs.s3a.endpoint", ""s3.eu-central-1.amazonaws.com")
내 RDD에서 saveAsTextFile을 호출하면 S3에서 모든 내용을 저장하고 ok를 시작합니다. 그러나 _temporary에서 최종 출력 결과로 전송되는 시간이 지나면 오류가 발생합니다.
Exception in thread "main" com.amazonaws.services.s3.model.AmazonS3Exception: Status Code: 403, AWS Service: Amazon S3, AWS Request ID: XXXXXXXXXXXXXXXX, AWS Error Code: SignatureDoesNotMatch, AWS Error Message: The request signature we calculated does not match the signature you provided. Check your key and signing method., S3 Extended Request ID: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX=
at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:798)
at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:421)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:232)
at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3528)
at com.amazonaws.services.s3.AmazonS3Client.copyObject(AmazonS3Client.java:1507)
at com.amazonaws.services.s3.transfer.internal.CopyCallable.copyInOneChunk(CopyCallable.java:143)
at com.amazonaws.services.s3.transfer.internal.CopyCallable.call(CopyCallable.java:131)
at com.amazonaws.services.s3.transfer.internal.CopyMonitor.copy(CopyMonitor.java:189)
at com.amazonaws.services.s3.transfer.internal.CopyMonitor.call(CopyMonitor.java:134)
at com.amazonaws.services.s3.transfer.internal.CopyMonitor.call(CopyMonitor.java:46)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
spo 패키지에서 hadoop-client를 사용하면 전송을 시작하지 않습니다. 오류는 무작위로 발생하며 때로는 작동하고 때때로 그렇지 않습니다.
해결법
-
==============================
1.아래 값을 설정하십시오.
아래 값을 설정하십시오.
System.setProperty("com.amazonaws.services.s3.enableV4", "true") hadoopConf.set("fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem") hadoopConf.set("com.amazonaws.services.s3.enableV4", "true") hadoopConf.set("fs.s3a.endpoint", "s3." + region + ".amazonaws.com")
내 버킷이있는 지역을 설정하십시오. 내 경우에는 : eu-central-1
gradle 또는 다른 방법으로 종속성을 추가하십시오.
dependencies { compile 'org.apache.hadoop:hadoop-aws:2.7.2' }
도움이되기를 바랍니다.
-
==============================
2.당신이 pyspark를 사용하고있는 경우에, 다음이 나를 위해 일했다.
당신이 pyspark를 사용하고있는 경우에, 다음이 나를 위해 일했다.
aws_profile = "your_profile" aws_region = "eu-central-1" s3_bucket = "your_bucket" # see https://github.com/jupyter/docker-stacks/issues/127#issuecomment-214594895 os.environ['PYSPARK_SUBMIT_ARGS'] = "--packages=org.apache.hadoop:hadoop-aws:2.7.3 pyspark-shell" # If this doesn't work you might have to delete your ~/.ivy2 directory to reset your package cache. # (see https://github.com/databricks/spark-redshift/issues/244#issuecomment-239950148) import pyspark sc=pyspark.SparkContext() # see https://github.com/databricks/spark-redshift/issues/298#issuecomment-271834485 sc.setSystemProperty("com.amazonaws.services.s3.enableV4", "true") # see https://stackoverflow.com/questions/28844631/how-to-set-hadoop-configuration-values-from-pyspark hadoop_conf=sc._jsc.hadoopConfiguration() # see https://stackoverflow.com/questions/43454117/how-do-you-use-s3a-with-spark-2-1-0-on-aws-us-east-2 hadoop_conf.set("fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem") hadoop_conf.set("com.amazonaws.services.s3.enableV4", "true") hadoop_conf.set("fs.s3a.access.key", access_id) hadoop_conf.set("fs.s3a.secret.key", access_key) # see https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region hadoop_conf.set("fs.s3a.endpoint", "s3." + aws_region + ".amazonaws.com") sql=pyspark.sql.SparkSession(sc) path = s3_bucket + "your_file_on_s3" dataS3=sql.read.parquet("s3a://" + path)
-
==============================
3.다른 사람들의 대답에서 영감을 얻은 다음, pyspark 셸에서 직접 다음을 실행하면 원하는 출력을 얻을 수 있습니다.
다른 사람들의 대답에서 영감을 얻은 다음, pyspark 셸에서 직접 다음을 실행하면 원하는 출력을 얻을 수 있습니다.
sc.setSystemProperty("com.amazonaws.services.s3.enableV4", "true") # fails without this hc=sc._jsc.hadoopConfiguration() hc.set("fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem") hc.set("com.amazonaws.services.s3.enableV4", "true") hc.set("fs.s3a.endpoint", end_point) hc.set("fs.s3a.access.key",access_key) hc.set("fs.s3a.secret.key",secret_key) data = sc.textFile("s3a://bucket/file") data.take(3)
엔드 포인트 목록에서 엔드 포인트를 선택하십시오. 버전 4 전용 지역 인 아시아 태평양 (뭄바이) (ap-south-1)에서 데이터를 가져올 수있었습니다.
from https://stackoverflow.com/questions/36647087/using-s3-frankfurt-with-spark by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] TaskTracker 하위 프로세스에 메모리를 구성하는 다양한 방법 (Mapper 및 Reduce Tasks) (0) | 2019.06.17 |
---|---|
[HADOOP] 잘못된 구성 : namenode 주소 dfs.namenode.rpc-address가 구성되지 않았습니다. (0) | 2019.06.16 |
[HADOOP] hadoop HDFS에 있나요? (0) | 2019.06.16 |
[HADOOP] Java : Hadoop 프로그램을 컴파일 할 때 com.sun.tools.javac.Main을 찾을 수 없습니다. (0) | 2019.06.16 |
[HADOOP] 첫 번째 hadoop 프로젝트 오류 : "입력 경로가 존재하지 않습니다" (0) | 2019.06.16 |