Я использую коннектор Stocator 1.1.0 в моем JAVA приложении Spark 2.0.1 для чтения / записи данных из IBM COS. Мое приложение работает без сбоев при локальном развертывании. Однако он не может работать в режиме контейнера docker за исключением:
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 sr c / 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-Recommended -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:
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");
Может дайте мне знать, если есть проблема с моими конфигами, несовместимость версий или что-то еще?