복붙노트

[HADOOP] Apache Spark에서 s3a : // 파일에 액세스하는 방법?

HADOOP

Apache Spark에서 s3a : // 파일에 액세스하는 방법?

Hadoop 2.6은 s3a를 즉시 사용할 수 없으므로 다음과 같은 일련의 솔루션과 수정을 시도했습니다.

hadoop-aws와 함께 배포하고 aws-java-sdk => 자격 증명을위한 환경 변수를 읽을 수 없음 hadoop-aws를 maven에 추가 => 다양한 전이 의존성 충돌

누구나 성공적으로 두 작품을 만들었습니까?

해결법

  1. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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에 내 데이터를 저장합니다.

  11. from https://stackoverflow.com/questions/30385981/how-to-access-s3a-files-from-apache-spark by cc-by-sa and MIT license