入力および出力フォルダーをパラメーターとして渡して、Webページからmapreduce Word countプログラムを実行しています。
以下のエラーを取得:
HTTPステータス500-要求処理が失敗しました。ネストされた例外はJava.lang.IllegalArgumentExceptionです。AWSアクセスキーIDとシークレットアクセスキーは、s3n URLのユーザー名またはパスワードとして(それぞれ)指定するか、fs.s3n.awsAccessKeyIdまたはfs.s3n.awsSecretAccessKeyプロパティを設定する必要があります(それぞれ)。
ドキュメントの形式は次のとおりです。 http://wiki.Apache.org/hadoop/AmazonS
s3n://ID:SECRET@BUCKET/Path
これを使用することをお勧めします:
hadoop distcp \
-Dfs.s3n.awsAccessKeyId=<your_access_id> \
-Dfs.s3n.awsSecretAccessKey=<your_access_key> \
s3n://Origin hdfs://destinations
また、キーにスラッシュが発生した場合の回避策としても機能します。 idとアクセスキーを持つパラメーターは、正確に次の順序で指定する必要があります:afterdisctcpand beforeOrigin
セキュリティ上、AWS Credentialsを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初心者向け:
Jarを https://mvnrepository.com/artifact/org.Apache.hadoop/hadoop-aws からダウンロードします
、これを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()