복붙노트

[HADOOP] 아마존 s3n URL의 일부로 AWS 액세스 키 ID 및 비밀 키를 지정하는 방법

HADOOP

아마존 s3n URL의 일부로 AWS 액세스 키 ID 및 비밀 키를 지정하는 방법

mapleduce word count 프로그램을 웹 페이지에서 매개 변수로 입력 및 출력 폴더를 전달 중입니다.

오류 발생 :

해결법

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

    1.문서 형식은 다음과 같습니다. http://wiki.apache.org/hadoop/AmazonS3

    문서 형식은 다음과 같습니다. http://wiki.apache.org/hadoop/AmazonS3

     s3n://ID:SECRET@BUCKET/Path
    
  2. ==============================

    2.나는 이것을 사용하는 것이 좋습니다 :

    나는 이것을 사용하는 것이 좋습니다 :

    hadoop distcp \
    -Dfs.s3n.awsAccessKeyId=<your_access_id> \ 
    -Dfs.s3n.awsSecretAccessKey=<your_access_key> \
    s3n://origin hdfs://destinations
    

    또한 키의 슬래시 발생에 대한 해결 방법으로도 사용됩니다. id 및 access key가있는 매개 변수는 다음 순서로 정확하게 입력해야합니다. disctcp와 origin 전에

  3. ==============================

    3.AWS 자격 증명을 Amazon s3n url의 일부로 전달하는 것이 일반적으로 권장되지는 않지만 보안 현명합니다. 특히 그 코드가 저장소 서비스 (예 : github)에 푸시되는 경우. conf / core-site.xml에 자격 증명을 설정하는 것이 이상적입니다.

    AWS 자격 증명을 Amazon s3n url의 일부로 전달하는 것이 일반적으로 권장되지는 않지만 보안 현명합니다. 특히 그 코드가 저장소 서비스 (예 : github)에 푸시되는 경우. conf / core-site.xml에 자격 증명을 설정하는 것이 이상적입니다.

    <configuration>
      <property>
        <name>fs.s3n.awsAccessKeyId</name>
        <value>XXXXXX</value>
      </property>
    
      <property>
        <name>fs.s3n.awsSecretAccessKey</name>
        <value>XXXXXX</value>
      </property>
    </configuration>
    

    또는 컴퓨터에 aws cli를 설치하십시오.

    pip install awscli
    
  4. ==============================

    4.pyspark 초보자의 경우 :

    pyspark 초보자의 경우 :

    https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-aws에서 jar를 다운로드하십시오. 스파크 항아리 폴더에 넣으십시오.

    그럼 너는 할 수있다.

    core-site.xml

    export AWS_ACCESS_KEY_ID=<access-key>
    export AWS_SECRET_ACCESS_KEY=<secret-key>
    
    <configuration>
      <property>
        <name>fs.s3n.impl</name>
        <value>org.apache.hadoop.fs.s3native.NativeS3FileSystem</value>
      </property>
    
      <property>
        <name>fs.s3a.impl</name>
        <value>org.apache.hadoop.fs.s3a.S3AFileSystem</value>
      </property>
    
      <property>
        <name>fs.s3.impl</name>
        <value>org.apache.hadoop.fs.s3.S3FileSystem</value>
      </property>
    </configuration>
    
    sc._jsc.hadoopConfiguration().set("fs.s3.awsAccessKeyId", access_key)
    sc._jsc.hadoopConfiguration().set("fs.s3n.awsAccessKeyId", access_key)
    sc._jsc.hadoopConfiguration().set("fs.s3a.access.key", access_key)
    sc._jsc.hadoopConfiguration().set("fs.s3.awsSecretAccessKey", secret_key)
    sc._jsc.hadoopConfiguration().set("fs.s3n.awsSecretAccessKey", secret_key)
    sc._jsc.hadoopConfiguration().set("fs.s3a.secret.key", secret_key)
    sc._jsc.hadoopConfiguration().set("fs.s3n.impl", "org.apache.hadoop.fs.s3native.NativeS3FileSystem")
    sc._jsc.hadoopConfiguration().set("fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem")
    sc._jsc.hadoopConfiguration().set("fs.s3.impl", "org.apache.hadoop.fs.s3.S3FileSystem")
    
    import sys
    from random import random
    from operator import add
    
    from pyspark.sql import SparkSession
    from pyspark.conf import SparkConf
    
    
    if __name__ == "__main__":
        """
            Usage: S3 sample
        """
        access_key = '<access-key>'
        secret_key = '<secret-key>'
    
        spark = SparkSession\
            .builder\
            .appName("Demo")\
            .getOrCreate()
    
        sc = spark.sparkContext
    
        # remove this block if use core-site.xml and env variable
        sc._jsc.hadoopConfiguration().set("fs.s3.awsAccessKeyId", access_key)
        sc._jsc.hadoopConfiguration().set("fs.s3n.awsAccessKeyId", access_key)
        sc._jsc.hadoopConfiguration().set("fs.s3a.access.key", access_key)
        sc._jsc.hadoopConfiguration().set("fs.s3.awsSecretAccessKey", secret_key)
        sc._jsc.hadoopConfiguration().set("fs.s3n.awsSecretAccessKey", secret_key)
        sc._jsc.hadoopConfiguration().set("fs.s3a.secret.key", secret_key)
        sc._jsc.hadoopConfiguration().set("fs.s3n.impl", "org.apache.hadoop.fs.s3native.NativeS3FileSystem")
        sc._jsc.hadoopConfiguration().set("fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem")
        sc._jsc.hadoopConfiguration().set("fs.s3.impl", "org.apache.hadoop.fs.s3.S3FileSystem")
    
        # fetch from s3, returns RDD
        csv_rdd = spark.sparkContext.textFile("s3n://<bucket-name>/path/to/file.csv")
        c = csv_rdd.count()
        print("~~~~~~~~~~~~~~~~~~~~~count~~~~~~~~~~~~~~~~~~~~~")
        print(c)
    
        spark.stop()
    
  5. from https://stackoverflow.com/questions/24924808/how-to-specify-aws-access-key-id-and-secret-access-key-as-part-of-a-amazon-s3n-u by cc-by-sa and MIT license