如何指定aws访问密钥id和秘密访问密钥作为amazons3nurl的一部分

7dl7o3gd  于 2021-06-04  发布在  Hadoop
关注(0)|答案(5)|浏览(480)

我将输入和输出文件夹作为参数从网页传递到mapreduce字数计算程序。
获取以下错误:
http状态500-请求处理失败;嵌套异常为java.lang.illegalargumentexception:必须将aws访问密钥id和机密访问密钥分别指定为s3n url的用户名或密码,或者通过设置fs.s3n.awsaccesskeyid或fs.s3n.awssecretaccesskey属性(分别)来指定。

8aqjt8rx

8aqjt8rx1#

我建议你用这个:

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

它还可以作为解决键中出现斜杠的方法。带有id和访问密钥的参数必须按以下顺序提供:在disctcp之后,在origin之前

fnvucqvd

fnvucqvd2#

文件格式如下:http://wiki.apache.org/hadoop/amazons3

s3n://ID:SECRET@BUCKET/Path
a5g8bdjr

a5g8bdjr3#

通常不建议将aws凭证作为amazons3nurl的一部分传入,这是出于安全考虑的。尤其是当代码被推送到存储库中的服务(比如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>

或者在您的计算机上重新安装awscli。

pip install awscli
yk9xbfzb

yk9xbfzb4#

创建文件 core-site.xml 把它放在类路径中。在文件中指定

<configuration>
    <property>
        <name>fs.s3.awsAccessKeyId</name>
        <value>your aws access key id</value>
        <description>
            aws s3 key id
        </description>
    </property>

    <property>
        <name>fs.s3.awsSecretAccessKey</name>
        <value>your aws access key</value>
        <description>
            aws s3 key
        </description>
    </property>
</configuration>

默认情况下,hadoop指定两个资源,从类路径按顺序加载: core-default.xml :hadoop的只读默认值 core-site.xml :给定hadoop安装的特定于站点的配置

crcmnpdw

crcmnpdw5#

对于Pypark初学者:

准备

从下载jarhttps://mvnrepository.com/artifact/org.apache.hadoop/hadoop-aws
,放入spark jars文件夹
那你就可以了

1. hadoop配置文件 core-site.xml ```

export AWS_ACCESS_KEY_ID=
export AWS_SECRET_ACCESS_KEY=

2. Pypark配置

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

相关问题