Hadoop aws и искровые несовместимости

У меня очень странные ошибки зависимости:

У меня есть этот простой код scala:

val spark: SparkSession = SparkSession.builder()
    .master("local[1]")
    .appName("HDFStoAWSExample")
    .getOrCreate()
spark.sparkContext
    .hadoopConfiguration.set("fs.s3a.access.key", "ACCESS_KEY")
spark.sparkContext
    .hadoopConfiguration.set("fs.s3a.secret.key", "SECRET_KEY")
spark.sparkContext
    .hadoopConfiguration.set("fs.s3a.endpoint", "s3.amazonaws.com")
spark.sparkContext.hadoopConfiguration.set("fs.s3a.path.style.access", "true")

val hdfsCSV = spark.read.option("header",true).csv("hdfs://localhost:19000/testCSV.csv")

hdfsCSV.show()
hdfsCSV.write.parquet("s3a://test/parquet/abcCSV")

С помощью этого простого файла sbt:

name := "spark-amazon-s3-parquet"

scalaVersion := "2.12.12"

val sparkVersion = "3.0.1"

libraryDependencies += "log4j" % "log4j" % "1.2.17"
libraryDependencies += "org.apache.spark" %% "spark-core" % sparkVersion
libraryDependencies += "org.apache.spark" %% "spark-sql" % sparkVersion
libraryDependencies += "org.apache.hadoop" % "hadoop-aws" % "3.3.0"
libraryDependencies += "org.apache.hadoop" % "hadoop-common" % "3.3.0"


updateOptions := updateOptions.value.withCachedResolution(true)

Теперь, когда я пытаюсь написать паркет, он стонет об отсутствующем классе или методах, таких как org/apache/hadoop/tracing/SpanReceiverHost (полная трассировка стека в конце)

Я пытался использовать версию 2.7.3 hadoop-common и aws, но затем S3 стонет о 400-плохом запросе (тот же код, что и раньше, просто измененная версия common и aws в sbt)

Кто-то знает, что происходит с hadoop-common и hadoop-aws?

Полный стек:


    Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/tracing/SpanReceiverHost
    at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:634)
    at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:619)
    at org.apache.hadoop.hdfs.DistributedFileSystem.initialize(DistributedFileSystem.java:149)
    at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:3354)
    at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:124)
    at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:3403)
    at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:3371)
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:477)
    at org.apache.hadoop.fs.Path.getFileSystem(Path.java:361)
    at org.apache.spark.sql.execution.streaming.FileStreamSink$.hasMetadata(FileStreamSink.scala:46)
    at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:366)
    at org.apache.spark.sql.DataFrameReader.loadV1Source(DataFrameReader.scala:297)
    at org.apache.spark.sql.DataFrameReader.$anonfun$load$2(DataFrameReader.scala:286)
    at scala.Option.getOrElse(Option.scala:189)
    at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:286)
    at org.apache.spark.sql.DataFrameReader.csv(DataFrameReader.scala:723)
    at org.apache.spark.sql.DataFrameReader.csv(DataFrameReader.scala:553)
    at HDFStoAWSExample$.delayedEndpoint$HDFStoAWSExample$1(HDFStoAWSExample.scala:16)
    at HDFStoAWSExample$delayedInit$body.apply(HDFStoAWSExample.scala:3)
    at scala.Function0.apply$mcV$sp(Function0.scala:39)
    at scala.Function0.apply$mcV$sp$(Function0.scala:39)
    at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:17)
    at scala.App.$anonfun$main$1$adapted(App.scala:80)
    at scala.collection.immutable.List.foreach(List.scala:431)
    at scala.App.main(App.scala:80)
    at scala.App.main$(App.scala:78)
    at HDFStoAWSExample$.main(HDFStoAWSExample.scala:3)
    at HDFStoAWSExample.main(HDFStoAWSExample.scala)
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.tracing.SpanReceiverHost
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
    ... 28 more

PS: с моей конфигурацией хаупа все в порядке, я могу читать и писать в нее


person Matteo Notaro    schedule 26.02.2021    source источник
comment
Вы пытались добавить hadoop-client в качестве зависимости?   -  person mfirry    schedule 26.02.2021
comment
Посмотрите stackoverflow.com/questions/49158612/   -  person mfirry    schedule 26.02.2021
comment
Добавление hadoop-client решило проблему, спасибо, но почему это не указано?   -  person Matteo Notaro    schedule 27.02.2021
comment
hadoop.apache.org/docs/ текущий/hadoop-aws/tools/hadoop-aws/   -  person mfirry    schedule 28.02.2021


Ответы (1)


Как указано здесь вероятно, нужно предоставить hadoop-client в качестве зависимости.

person mfirry    schedule 28.02.2021