Проблемы при развертывании коннектора стокатора приложения Spark Java как контейнера Docker - PullRequest
0 голосов
/ 05 мая 2020

Я использую коннектор 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");

Может дайте мне знать, если есть проблема с моими конфигами, несовместимость версий или что-то еще?

...