[HADOOP] Apache Spark에서 s3a : // 파일에 액세스하는 방법?
HADOOPApache Spark에서 s3a : // 파일에 액세스하는 방법?
Hadoop 2.6은 s3a를 즉시 사용할 수 없으므로 다음과 같은 일련의 솔루션과 수정을 시도했습니다.
hadoop-aws와 함께 배포하고 aws-java-sdk => 자격 증명을위한 환경 변수를 읽을 수 없음 hadoop-aws를 maven에 추가 => 다양한 전이 의존성 충돌
누구나 성공적으로 두 작품을 만들었습니까?
해결법
-
==============================
1.s3a에서 전송 된 7.9GB의 데이터는 s3a에서 전송 된 데이터의 양은 약 7 분이었고 s3n의 데이터에서 7.9GB는 73 분이 걸렸습니다. (두 경우 모두 불행히도 us-east-1은 us-west-1이었습니다. Redshift와 Lambda는 현재 우리 동쪽 -1입니다.] 올바른 스택을 얻는 데 매우 중요한 부분이며 좌절감을 느끼는 데 가치가 있습니다.
s3a에서 전송 된 7.9GB의 데이터는 s3a에서 전송 된 데이터의 양은 약 7 분이었고 s3n의 데이터에서 7.9GB는 73 분이 걸렸습니다. (두 경우 모두 불행히도 us-east-1은 us-west-1이었습니다. Redshift와 Lambda는 현재 우리 동쪽 -1입니다.] 올바른 스택을 얻는 데 매우 중요한 부분이며 좌절감을 느끼는 데 가치가 있습니다.
2015 년 12 월 현재 주요 부분은 다음과 같습니다.
이 과정을 진행하면서 작성한 게시물에 대해이 목록을 자세히 설명했습니다. 또한 나는 예외적 인 모든 예외적 인 경우를 다루었으며, 내가 각자의 원인이라고 생각하고 어떻게 고쳐야 하는지를 다뤘다.
-
==============================
2.hadoop 2.6과 함께 Spark 1.4.1 prebuilt 바이너리를 사용하여 작동 시켰습니다. 두 jar (hadoop-aws 및 aws-java-sdk)를 가리키는 spark.driver.extraClassPath 및 spark.executor.extraClassPath를 모두 설정해야합니다. 클러스터에서 실행하는 경우 실행 프로그램이 클러스터의 jar 파일에 액세스 할 수 있는지 확인하십시오.
hadoop 2.6과 함께 Spark 1.4.1 prebuilt 바이너리를 사용하여 작동 시켰습니다. 두 jar (hadoop-aws 및 aws-java-sdk)를 가리키는 spark.driver.extraClassPath 및 spark.executor.extraClassPath를 모두 설정해야합니다. 클러스터에서 실행하는 경우 실행 프로그램이 클러스터의 jar 파일에 액세스 할 수 있는지 확인하십시오.
-
==============================
3.나는이 대답을 Hadoop 2.7.3의 Spark 2.0.1에서 S3A로 파일에 접근하고있다.
나는이 대답을 Hadoop 2.7.3의 Spark 2.0.1에서 S3A로 파일에 접근하고있다.
기본적으로 Hadoop과 함께 제공되는 AWS jar (hadoop-aws-2.7.3.jar 및 aws-java-sdk-1.7.4.jar)를 복사합니다.
모든 스파크 항아리를 보관하는 스파크 클래스 패스에 넣는다.
힌트 : (대부분 /etc/spark/conf/spark-defaults.conf에 위치 할 것입니다)
#make sure jars are added to CLASSPATH spark.yarn.jars=file://{spark/home/dir}/jars/*.jar,file://{hadoop/install/dir}/share/hadoop/tools/lib/*.jar spark.hadoop.fs.s3a.impl=org.apache.hadoop.fs.s3a.S3AFileSystem spark.hadoop.fs.s3a.access.key={s3a.access.key} spark.hadoop.fs.s3a.secret.key={s3a.secret.key} #you can set above 3 properties in hadoop level `core-site.xml` as well by removing spark prefix.
필요한 경우 --driver-class-path에 jar (aws-java-sdk 및 hadoop-aws)를 포함합니다.
spark-submit --master yarn \ --driver-class-path {spark/jars/home/dir}/aws-java-sdk-1.7.4.jar \ --driver-class-path {spark/jars/home/dir}/hadoop-aws-2.7.3.jar \ other options
-
==============================
4.우리는 Mesos와 함께 spark 1.6.1을 사용하고 있으며 spark에서 S3에 쓰는 데 많은 문제가있었습니다. 나는 그 대답에 대해 cfeduke에게 공언했다. 약간의 변경은 spark-defaults.conf 파일의 spark.jar 설정에 maven 좌표를 추가하는 것입니다. hadoop-aws : 2.7.2로 시도했지만 여전히 많은 오류가 발생하여 2.7.1로 돌아갔습니다. 아래는 우리를 위해 일하는 spark-defaults.conf의 변경 사항입니다 :
우리는 Mesos와 함께 spark 1.6.1을 사용하고 있으며 spark에서 S3에 쓰는 데 많은 문제가있었습니다. 나는 그 대답에 대해 cfeduke에게 공언했다. 약간의 변경은 spark-defaults.conf 파일의 spark.jar 설정에 maven 좌표를 추가하는 것입니다. hadoop-aws : 2.7.2로 시도했지만 여전히 많은 오류가 발생하여 2.7.1로 돌아갔습니다. 아래는 우리를 위해 일하는 spark-defaults.conf의 변경 사항입니다 :
spark.jars.packages net.java.dev.jets3t:jets3t:0.9.0,com.google.guava:guava:16.0.1,com.amazonaws:aws-java-sdk:1.7.4,org.apache.hadoop:hadoop-aws:2.7.1 spark.hadoop.fs.s3a.impl org.apache.hadoop.fs.s3a.S3AFileSystem spark.hadoop.fs.s3a.access.key <MY ACCESS KEY> spark.hadoop.fs.s3a.secret.key <MY SECRET KEY> spark.hadoop.fs.s3a.fast.upload true
귀하의 게시물을 쓸 시간을내어 주셔서 감사합니다. 매우 도움이되었습니다.
-
==============================
5.다음은 Spark Summit EU : Apache Spark 및 Object Stores에서 제공되는 2016 년 10 월의 세부 정보입니다.
다음은 Spark Summit EU : Apache Spark 및 Object Stores에서 제공되는 2016 년 10 월의 세부 정보입니다.
키 포인트
제품 배치 : HADOOP-11694의 읽기 성능 측면은 HDP2.5에 포함됩니다. 스파크 및 S3 설명서에 관심이있을 수 있습니다 - 특히 튜닝 옵션.
-
==============================
6.Hadoop 2.6으로 미리 빌드 된 Spark 1.4.1을 사용하여 Hadoop 2.7.1에서 hadoop-aws 및 aws-java-sdk jar 파일을 추가하여 Spark Standalone 클러스터에 배포 할 때 s3a : //를 사용할 수 있습니다. distro (Hadoop 2.7.1의 $ HADOOP_HOME / share / hadoop / tools / lib 아래에 있음)를 $ SPARK_HOME / conf / spark-env.sh 파일의 내 SPARK_CLASSPATH 환경 변수에 추가하십시오.
Hadoop 2.6으로 미리 빌드 된 Spark 1.4.1을 사용하여 Hadoop 2.7.1에서 hadoop-aws 및 aws-java-sdk jar 파일을 추가하여 Spark Standalone 클러스터에 배포 할 때 s3a : //를 사용할 수 있습니다. distro (Hadoop 2.7.1의 $ HADOOP_HOME / share / hadoop / tools / lib 아래에 있음)를 $ SPARK_HOME / conf / spark-env.sh 파일의 내 SPARK_CLASSPATH 환경 변수에 추가하십시오.
-
==============================
7.당신이 말했듯이, hadoop 2.6은 s3a를 지원하지 않으며, 최신 spark release 1.6.1은 hadoop 2.7을 지원하지 않지만, spark 2.0은 hadoop 2.7 및 s3a에서는 전혀 문제가되지 않습니다.
당신이 말했듯이, hadoop 2.6은 s3a를 지원하지 않으며, 최신 spark release 1.6.1은 hadoop 2.7을 지원하지 않지만, spark 2.0은 hadoop 2.7 및 s3a에서는 전혀 문제가되지 않습니다.
spark 1.6.x에서 우리는 EMR의 s3 드라이버를 사용하여 더러운 해킹을 만들었습니다.이 문서는 다음과 같이보실 수 있습니다 : https://github.com/zalando/spark-appliance#emrfs-support
spark 1.6.x에서 s3a를 계속 사용하려면 https://stackoverflow.com/a/37487407/5630352에서 대답을 참조하십시오.
-
==============================
8.spark-defaults.conf를 사용하여 클래스 경로에 S3A 종속성을 추가 할 수도 있습니다.
spark-defaults.conf를 사용하여 클래스 경로에 S3A 종속성을 추가 할 수도 있습니다.
예:
spark.driver.extraClassPath /usr/local/spark/jars/hadoop-aws-2.7.5.jar spark.executor.extraClassPath /usr/local/spark/jars/hadoop-aws-2.7.5.jar spark.driver.extraClassPath /usr/local/spark/jars/aws-java-sdk-1.7.4.jar spark.executor.extraClassPath /usr/local/spark/jars/aws-java-sdk-1.7.4.jar
아니면 그냥 :
spark.jars /usr/local/spark/jars/hadoop-aws-2.7.5.jar,/usr/local/spark/jars/aws-java-sdk-1.7.4.jar
AWS SDK 버전을 Hadoop 버전과 일치 시키십시오. 이에 대한 자세한 내용은이 대답을보십시오. Spark 2.2를 사용하여 S3 데이터에 액세스 할 수 없습니다.
-
==============================
9.pyspark (프록시 사용 가능)에 대한 해결책은 다음과 같습니다.
pyspark (프록시 사용 가능)에 대한 해결책은 다음과 같습니다.
def _configure_s3_protocol(spark, proxy=props["proxy"]["host"], port=props["proxy"]["port"], endpoint=props["s3endpoint"]["irland"]): """ Configure access to the protocol s3 https://sparkour.urizone.net/recipes/using-s3/ AWS Regions and Endpoints https://docs.aws.amazon.com/general/latest/gr/rande.html """ sc = spark.sparkContext sc._jsc.hadoopConfiguration().set("fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem") sc._jsc.hadoopConfiguration().set("fs.s3a.access.key", os.environ.get("AWS_ACCESS_KEY_ID")) sc._jsc.hadoopConfiguration().set("fs.s3a.secret.key", os.environ.get("AWS_SECRET_ACCESS_KEY")) sc._jsc.hadoopConfiguration().set("fs.s3a.proxy.host", proxy) sc._jsc.hadoopConfiguration().set("fs.s3a.proxy.port", port) sc._jsc.hadoopConfiguration().set("fs.s3a.endpoint", endpoint) return spark
-
==============================
10.나는 spark 버전 2.3을 사용하고 있으며 다음과 같이 spark를 사용하여 데이터 세트를 저장할 때 :
나는 spark 버전 2.3을 사용하고 있으며 다음과 같이 spark를 사용하여 데이터 세트를 저장할 때 :
dataset.write().format("hive").option("fileFormat", "orc").mode(SaveMode.Overwrite) .option("path", "s3://reporting/default/temp/job_application") .saveAsTable("job_application");
그것은 완벽하게 작동하고 s3에 내 데이터를 저장합니다.
from https://stackoverflow.com/questions/30385981/how-to-access-s3a-files-from-apache-spark by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] .txt 파일을 Hadoop의 시퀀스 파일 형식으로 변환하는 방법 (0) | 2019.05.29 |
---|---|
[HADOOP] 원사 개념 이해에 촉발 (0) | 2019.05.29 |
[HADOOP] HDFS 오류 : 1 대신에 0 노드로만 복제 할 수있었습니다. (0) | 2019.05.29 |
[HADOOP] Hive에서 레코드를 삭제하고 업데이트하는 방법 (0) | 2019.05.29 |
[HADOOP] HiveQL 쿼리의 결과를 CSV로 어떻게 출력합니까? (0) | 2019.05.29 |