web-dev-qa-db-ja.com

Apacheでs3を使用する方法spark 2.2 Sparkシェルで

Spark Shell。

次のリソースを参照しました。

Apache Sparkを使用したAmazon S3からのファイルの解析

Apache Sparkからs3a://ファイルにアクセスする方法?

Hortonworks Spark 1.6 and S

Cloudera

カスタムs3エンドポイント

ダウンロードして解凍しました Apache Spark 2.2.conf/spark-defaultsには次のものがあります(access-keysecret-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.jaraws-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)

誰かがこれを機能させる方法を提案できますか?ありがとう。

15
Shafique Jamal

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バケットからデータをロードしようとすると、ロードできるようになります。

18
himanshuIIITian