我编写了一个简单的Scala应用程序,它从GCS桶中读取一个parquet文件。
- JDK 17语言
- Scala 2017年12月22日
- Spark SQL 3.3.1版
- hadoop 3 -2.2.7的gcs连接器
连接器取自Maven,通过sbt(Scala构建工具)导入。由于这个issue,我没有使用最新的2.2.9版本。
应用程序在本地模式下工作得很完美,所以我试着切换到独立模式。
我所做的是这些步骤:
1.已从here下载Spark 3.3.1
1.手动启动群集,如此处所示
我尝试再次运行该应用程序,但遇到以下错误:
[error] Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException: Class com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem not found
[error] at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2688)
[error] at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:3431)
[error] at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:3466)
[error] at org.apache.hadoop.fs.FileSystem.access$300(FileSystem.java:174)
[error] at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:3574)
[error] at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:3521)
[error] at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:540)
[error] at org.apache.hadoop.fs.Path.getFileSystem(Path.java:365)
[error] at org.apache.parquet.hadoop.util.HadoopInputFile.fromStatus(HadoopInputFile.java:44)
[error] at org.apache.spark.sql.execution.datasources.parquet.ParquetFooterReader.readFooter(ParquetFooterReader.java:44)
[error] at org.apache.spark.sql.execution.datasources.parquet.ParquetFileFormat$.$anonfun$readParquetFootersInParallel$1(ParquetFileFormat.scala:484)
[error] ... 14 more
[error] Caused by: java.lang.ClassNotFoundException: Class com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem not found
[error] at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:2592)
[error] at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2686)
[error] ... 24 more
不知何故,它无法检测连接器的文件系统:java.lang.ClassNotFoundException: Class com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem not found
我的spark配置非常基本:
spark.app.name = "Example app"
spark.master = "spark://YOUR_SPARK_MASTER_HOST:7077"
spark.hadoop.fs.defaultFS = "gs://YOUR_GCP_BUCKET"
spark.hadoop.fs.gs.impl = "com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem"
spark.hadoop.fs.AbstractFileSystem.gs.impl = "com.google.cloud.hadoop.fs.gcs.GoogleHadoopFS"
spark.hadoop.google.cloud.auth.service.account.enable = true
spark.hadoop.google.cloud.auth.service.account.json.keyfile = "src/main/resources/gcp_key.json"
2条答案
按热度按时间v9tzhpje1#
我发现GCS Hadoop连接器的Maven版本在内部缺少依赖项。
我用以下方法之一修复了它:
为了解决第二个选项,我解压缩了gcs hadoop连接器jar文件,查找了pom.xml,将依赖项复制到一个新的独立xml文件中,并使用
mvn dependency:copy-dependencies -DoutputDirectory=/path/to/pyspark/jars/
命令下载它们下面是我创建的pom.xml示例,请注意我使用的是连接器的2.2.9版本
我希望这能有所帮助
xpszyzbs2#
这是因为Spark使用的是旧的Guava库版本,而您使用的是无阴影的GCS连接器jar。要使其正常工作,您只需要使用Maven的阴影GCS连接器jar,例如:https://repo1.maven.org/maven2/com/google/cloud/bigdataoss/gcs-connector/hadoop3-2.2.9/gcs-connector-hadoop3-2.2.9-shaded.jar