我正在将输入和输出文件夹作为参数传递给来自网页的 mapreduce 字数统计程序。
出现以下错误:
HTTP 状态 500 - 请求处理失败;嵌套异常是 java.lang.IllegalArgumentException:AWS 访问密钥 ID 和秘密访问密钥必须分别指定为 s3n URL 的用户名或密码,或者通过设置 fs.s3n.awsAccessKeyId 或 fs.s3n.awsSecretAccessKey 属性(分别)。
我正在将输入和输出文件夹作为参数传递给来自网页的 mapreduce 字数统计程序。
出现以下错误:
HTTP 状态 500 - 请求处理失败;嵌套异常是 java.lang.IllegalArgumentException:AWS 访问密钥 ID 和秘密访问密钥必须分别指定为 s3n URL 的用户名或密码,或者通过设置 fs.s3n.awsAccessKeyId 或 fs.s3n.awsSecretAccessKey 属性(分别)。
该文档的格式为:http ://wiki.apache.org/hadoop/AmazonS3
s3n://ID:SECRET@BUCKET/Path
我建议你使用这个:
hadoop distcp \
-Dfs.s3n.awsAccessKeyId=<your_access_id> \
-Dfs.s3n.awsSecretAccessKey=<your_access_key> \
s3n://origin hdfs://destinations
它还可以作为密钥中出现斜杠的解决方法。带有 id 和访问密钥的参数必须完全按以下顺序提供:在disctcp之后和origin之前
出于安全考虑,通常不建议将 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>
或在您的机器上重新安装 awscli。
pip install awscli
对于 pyspark 初学者:
从https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-aws下载 jar
,把它放到 spark jars 文件夹中
那么你也能
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()
hadoop distcp \
-Dfs.s3a.access.key=<....> \
-Dfs.s3a.secret.key=<....> \
-Dfs.s3a.fast.upload=true \
-update \
s3a://path to file/ hdfs:///path/
在 s3 URI 中将 s3 更改为 s3n
创建文件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 安装的站点特定配置