Spark Shell。
次のリソースを参照しました。
Apache Sparkを使用したAmazon S3からのファイルの解析
Apache Sparkからs3a://ファイルにアクセスする方法?
ダウンロードして解凍しました Apache Spark 2.2. 。conf/spark-defaults
には次のものがあります(access-key
とsecret-key
):
spark.hadoop.fs.s3a.impl=org.Apache.hadoop.fs.s3a.S3AFileSystem
spark.hadoop.fs.s3a.access.key=access-key
spark.hadoop.fs.s3a.secret.key=secret-key
mvnrepository からhadoop-aws-2.8.1.jar
とaws-Java-sdk-1.11.179.jar
をダウンロードし、jars/
ディレクトリに配置しました。次に、Spark Shell:
bin/spark-Shell --jars jars/hadoop-aws-2.8.1.jar,jars/aws-Java-sdk-1.11.179.jar
シェルでは、S3バケットからデータをロードしようとしています。
val p = spark.read.textFile("s3a://sparkcookbook/person")
そして、これが結果のエラーです:
Java.lang.NoClassDefFoundError: org/Apache/hadoop/fs/GlobalStorageStatistics$StorageStatisticsProvider
at Java.lang.Class.forName0(Native Method)
at Java.lang.Class.forName(Class.Java:348)
at org.Apache.hadoop.conf.Configuration.getClassByNameOrNull(Configuration.Java:2134)
at org.Apache.hadoop.conf.Configuration.getClassByName(Configuration.Java:2099)
at org.Apache.hadoop.conf.Configuration.getClass(Configuration.Java:2193)
at org.Apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.Java:2654)
at org.Apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.Java:2667)
at org.Apache.hadoop.fs.FileSystem.access$200(FileSystem.Java:94)
at org.Apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.Java:2703)
at org.Apache.hadoop.fs.FileSystem$Cache.get(FileSystem.Java:2685)
at org.Apache.hadoop.fs.FileSystem.get(FileSystem.Java:373)
at org.Apache.hadoop.fs.Path.getFileSystem(Path.Java:295)
代わりにSpark Shellを次のように起動しようとすると:
bin/spark-Shell --packages org.Apache.hadoop:hadoop-aws:2.8.1
その後、2つのエラーが発生します。1つはインターパーターの起動時、もう1つはデータのロードを試行したときです。これが最初です:
:: problems summary ::
:::: ERRORS
unknown resolver null
unknown resolver null
unknown resolver null
unknown resolver null
unknown resolver null
unknown resolver null
:: USE VERBOSE OR DEBUG MESSAGE LEVEL FOR MORE DETAILS
そして、ここに2つ目があります。
val p = spark.read.textFile("s3a://sparkcookbook/person")
Java.lang.IllegalAccessError: tried to access method org.Apache.hadoop.metrics2.lib.MutableCounterLong.<init>(Lorg/Apache/hadoop/metrics2/MetricsInfo;J)V from class org.Apache.hadoop.fs.s3a.S3AInstrumentation
at org.Apache.hadoop.fs.s3a.S3AInstrumentation.streamCounter(S3AInstrumentation.Java:195)
at org.Apache.hadoop.fs.s3a.S3AInstrumentation.streamCounter(S3AInstrumentation.Java:216)
at org.Apache.hadoop.fs.s3a.S3AInstrumentation.<init>(S3AInstrumentation.Java:139)
at org.Apache.hadoop.fs.s3a.S3AFileSystem.initialize(S3AFileSystem.Java:174)
at org.Apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.Java:2669)
at org.Apache.hadoop.fs.FileSystem.access$200(FileSystem.Java:94)
at org.Apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.Java:2703)
at org.Apache.hadoop.fs.FileSystem$Cache.get(FileSystem.Java:2685)
at org.Apache.hadoop.fs.FileSystem.get(FileSystem.Java:373)
at org.Apache.hadoop.fs.Path.getFileSystem(Path.Java:295)
at org.Apache.spark.sql.execution.datasources.DataSource.hasMetadata(DataSource.scala:301)
at org.Apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:344)
at org.Apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:152)
at org.Apache.spark.sql.DataFrameReader.text(DataFrameReader.scala:506)
at org.Apache.spark.sql.DataFrameReader.textFile(DataFrameReader.scala:542)
at org.Apache.spark.sql.DataFrameReader.textFile(DataFrameReader.scala:515)
誰かがこれを機能させる方法を提案できますか?ありがとう。
Apache Spark 2.2.0を使用している場合は、hadoop-aws-2.7.3.jar
およびaws-Java-sdk-1.7.4.jar
。
$ spark-Shell --jars jars/hadoop-aws-2.7.3.jar,jars/aws-Java-sdk-1.7.4.jar
その後、シェルでS3バケットからデータをロードしようとすると、ロードできるようになります。