it-swarm.com.de

Angeben der AWS-Zugriffsschlüssel-ID und des geheimen Zugriffsschlüssels als Teil einer Amazon S3-URL

Ich übergebe Eingabe- und Ausgabeordner als Parameter, um das Word Count-Programm von der Webseite zu reduzieren. 

Unterer Fehler wird angezeigt:

HTTP Status 500 - Anforderungsverarbeitung fehlgeschlagen; geschachtelte Ausnahme ist Java.lang.IllegalArgumentException: AWS Access Key ID und Secret Der Zugangsschlüssel muss als Benutzername oder Kennwort angegeben werden (jeweils) einer s3n-URL oder durch Festlegen der fs.s3n.awsAccessKeyId oder fs.s3n.awsSecretAccessKey-Eigenschaften (jeweils).

23
user3795951

Die Dokumentation hat das Format: http://wiki.Apache.org/hadoop/AmazonS3

 s3n://ID:[email protected]/Path
37
RickH

Ich schlage vor, dass Sie dies verwenden:

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

Es dient auch als Abhilfe für das Auftreten von Schrägstrichen im Schlüssel ..__ Die Parameter mit der ID und dem Zugriffsschlüssel müssen genau in dieser Reihenfolge angegeben werden: after disctcp und before Origin

8

Das Übergeben der AWS-Anmeldeinformationen als Teil der Amazon s3n-URL wird normalerweise aus Sicherheitsgründen nicht empfohlen. Dies gilt insbesondere, wenn dieser Code an einen Repository-Haltedienst (z. B. github) übertragen wird. Richten Sie Ihre Anmeldeinformationen idealerweise in der Datei "conf/core-site.xml" folgendermaßen ein:

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

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

oder installieren Sie awscli erneut auf Ihrem Rechner.

pip install awscli
7
dyltini

Für Pyspark-Anfänger: 

Bereiten

Laden Sie jar von https://mvnrepository.com/artifact/org.Apache.hadoop/hadoop-aws herunter.
, lege dies in den Spark-Ordner

Dann kannst du

1. Hadoop-Konfigurationsdatei

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>

2. pyspark config

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")

Beispiel

import sys
from random import random
from operator import add

from pyspark.sql import SparkSession
from pyspark.conf import SparkConf


if __== "__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()
0
Mithril