Проблемы при развертывании коннектора стокатора Java-приложения Spark в качестве контейнера Docker
Я использую коннектор Stocator 1.1.0 в своем приложении JAVA Spark 2.0.1 для чтения / записи данных из IBM COS. Мое приложение работает без сбоев при локальном развертывании. Однако он не может работать в режиме контейнера докеров за исключением:
Exception in thread "main" java.io.IOException: No FileSystem for scheme: null
at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2421)
at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2428)
at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:88)
at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2467)
at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2449)
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:367)
at org.apache.hadoop.fs.Path.getFileSystem(Path.java:287)
at org.apache.spark.sql.catalyst.catalog.SessionCatalog.makeQualifiedPath(SessionCatalog.scala:115)
at org.apache.spark.sql.catalyst.catalog.SessionCatalog.createDatabase(SessionCatalog.scala:145)
at org.apache.spark.sql.catalyst.catalog.SessionCatalog.<init>(SessionCatalog.scala:89)
at org.apache.spark.sql.internal.SessionState.catalog$lzycompute(SessionState.scala:95)
at org.apache.spark.sql.internal.SessionState.catalog(SessionState.scala:95)
at org.apache.spark.sql.internal.SessionState$$anon$1.<init>(SessionState.scala:112)
at org.apache.spark.sql.internal.SessionState.analyzer$lzycompute(SessionState.scala:112)
at org.apache.spark.sql.internal.SessionState.analyzer(SessionState.scala:111)
at org.apache.spark.sql.execution.QueryExecution.assertAnalyzed(QueryExecution.scala:49)
at org.apache.spark.sql.Dataset$.ofRows(Dataset.scala:64)
at org.apache.spark.sql.SparkSession.createDataFrame(SparkSession.scala:328)
..
Я использую следующий файл докеров для создания и постановки докеров:
Этап сборки
FROM maven:3.5-jdk-8 AS build COPY src /usr/src/app/src COPY pom.xml /usr/src/app ENV http_proxy "некоторый правильный прокси" ENV https_proxy "некоторый правильный прокси" RUN apt-get update \ && apt-get install --no-install-рекомендует -y openjfx \ && apt-get clean RUN mvn -f /usr/src/app/pom.xml clean package
Стадия пакета
FROM gcr.io/distroless/java COPY --from=build /usr/src/app/target/sample.jar /usr/app/sample.jar EXPOSE 8080 ENTRYPOINT ["java","-jar","usr/app/sample.jar"]
Мои конфигурации контекста искры:
spark.sparkContext().hadoopConfiguration().set("fs.hdfs.impl", org.apache.hadoop.hdfs.DistributedFileSystem.class.getName() ); spark.sparkContext().hadoopConfiguration().set("fs.file.impl", org.apache.hadoop.fs.LocalFileSystem.class.getName() ); spark.sparkContext().hadoopConfiguration().set("fs.cos.impl", "com.ibm.stocator.fs.ObjectStoreFileSystem"); spark.sparkContext().hadoopConfiguration().set("fs.stocator.scheme.list", "cos"); spark.sparkContext().hadoopConfiguration().set("fs.stocator.cos.impl", "com.ibm.stocator.fs.cos.COSAPIClient"); spark.sparkContext().hadoopConfiguration().set("fs.stocator.cos.scheme", "cos"); spark.sparkContext().hadoopConfiguration(). set("fs.cos.cloud-object-storage.endpoint", "https://some.region.endpoint"); spark.sparkContext().hadoopConfiguration().set("fs.cos.cloud-object-storage.access.key", "some access key"); spark.sparkContext().hadoopConfiguration().set("fs.cos.cloud-object-storage.secret.key", "some secret key"); spark.sparkContext().hadoopConfiguration().set("fs.cos.cloud-object-storage.v2.signer.type", "false");
Не могли бы вы сообщить мне, есть ли проблема с моими конфигами, несовместимость версий или что-то еще?