Я получаю доступ к некоторому файлу, хранящемуся на S3, используя следующий код:
val spark = SparkSession.builder()
.enableHiveSupport()
.config("fs.s3n.impl", "org.apache.hadoop.fs.s3native.NativeS3FileSystem")
.config("fs.s3n.awsAccessKeyId", <Access_key>)
.config("fs.s3n.awsSecretAccessKey", <SecretAccessKey>)
.getOrCreate()
val df = spark.read.orc(<s3 bucket name>)
Я получаю следующую ошибку в строке val df = spark.read.or c ()
Caused by: java.lang.ClassNotFoundException: org.jets3t.service.S3ServiceException
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
Я использую спарочный сосуд, используя следующую команду:
gcloud dataproc jobs submit spark \
--project <project_name> \
--region <region> \
--cluster <cluster name> \
--class <main class> \
--properties spark.jars.packages='net.java.dev.jets3t:jets3t:0.9.4' \
--jars gs://<bucket_name>/jars/sample_s3-assembly-0.1.jar,gs://<bucket_name>/jars/jets3t-0.9.4.jar
Мой файл sbt выглядит так:
name := "sample_s3_ht"
version := "0.1"
scalaVersion := "2.11.12"
resolvers += Opts.resolver.sonatypeReleases
libraryDependencies += "org.apache.hadoop" % "hadoop-aws" % "2.7.1"
libraryDependencies += "org.apache.spark" %% "spark-core" % "2.4.0"
libraryDependencies += "org.apache.spark" %% "spark-sql" % "2.4.0"
libraryDependencies += "org.apache.spark" %% "spark-hive" % "2.4.0"
libraryDependencies += "com.google.cloud" % "google-cloud-bigquery" % "1.80.0"
libraryDependencies += "com.google.cloud" % "google-cloud-storage" % "1.98.0"
libraryDependencies += "com.google.cloud.spark" %% "spark-bigquery" % "0.7.0-beta"
libraryDependencies += "com.google.cloud.bigdataoss" % "gcs-connector" % "1.6.1-hadoop2"
libraryDependencies += "org.apache.hadoop" % "hadoop-client" % "2.6.0"
libraryDependencies += "net.java.dev.jets3t" % "jets3t" % "0.9.4"
assemblyMergeStrategy in assembly := {
case PathList("META-INF", xs @ _*) => MergeStrategy.discard
case x => MergeStrategy.first
}
Я также предоставил запись для jets3t, имел oop - aws и имел oop -клиента в sbt, как указано в других потоках, но я получаю вышеуказанную ошибку.