Как создать SparkSession в приложении Quarkus?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как создать SparkSession в приложении Quarkus?

Сообщение Anonymous »

Я пытаюсь создать простое приложение Quarkus с помощью Apache Spark, чтобы затем развернуть его в кластере Kubernetes. Приложение запускается без ошибок (режим разработки Quarkus), но по какой-то причине оно не может создать SparkSession (здесь также нет ошибок, приложение просто зависает, когда я вызываю конечную точку отдыха, которая использует SparkSession).
В приведенном ниже коде, когда я пишу «return sparkSessionBean.toString();» в методе "hello" exampleResource он работает правильно, но когда я пытаюсь "вернуть sparkSessionBean.getSpark().toString();" запрос зависает навсегда, никаких ошибок.
Когда я запускаю тот же код в автономном приложении с основным методом (без Quarkus), он работает правильно (создает SparkSession и выполняет какое-то задание).
Я тестировал это на Quarkus 3.5.3 и 3.8.1 + Spark 3.5.0 + Java 17.
Есть ли проблемы с использованием Spark? с Quarkus?
Ресурс:
package com.example;

import jakarta.inject.Inject;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;

@Path("/hello")
public class ExampleResource {

@Inject
SparkSessionBean sparkSessionBean;

@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return sparkSessionBean.getSpark().toString();
}
}

SparkSessionBean:
package com.example;

import jakarta.enterprise.context.ApplicationScoped;
import org.apache.spark.sql.SparkSession;

@ApplicationScoped
public class SparkSessionBean {
private static final String WAREHOUSE_PATH = "s3a://iceberg";
private SparkSession spark;

public SparkSession getSpark() {
if (spark == null) {
spark = SparkSession.builder()
.appName("Java Spark Iceberg Example")
.master("local")
.config("spark.ui.enabled", "false")

//Filesystem (MinIO) config
.config("fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem")
.config("fs.s3a.endpoint", "http://localhost:9000")
.config("fs.s3a.access.key", "key123")
.config("fs.s3a.secret.key", "secret123")
.config("fs.s3a.path.style.access", "true")
.config("spark.sql.warehouse.dir", WAREHOUSE_PATH)

//Nessie catalog config
.config("spark.jars.packages", "org.apache.iceberg:iceberg-spark-runtime-3.5_2.13:1.3.0,org.projectnessie.nessie-integrations:nessie-spark-extensions-3.5_2.13:0.77.1")
.config("spark.sql.extensions", "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions,org.projectnessie.spark.extensions.NessieSparkSessionExtensions")
.config("spark.sql.catalog.nessie", "org.apache.iceberg.spark.SparkCatalog")
.config("spark.sql.catalog.nessie.catalog-impl", "org.apache.iceberg.nessie.NessieCatalog")
.config("spark.sql.catalog.nessie.authentication.type", "NONE")
.config("spark.sql.catalog.nessie.uri", "http://localhost:19120/api/v1")
.config("spark.sql.catalog.nessie.ref", "main")
.config("spark.sql.defaultCatalog", "nessie")
.config("spark.sql.catalog.nessie.warehouse", WAREHOUSE_PATH)
.getOrCreate();
}
return spark;
}
}

pom.xml


4.0.0
com.example
quarkus-spark
1.0-SNAPSHOT

3.12.1
17
UTF-8
UTF-8
quarkus-bom
io.quarkus.platform
3.8.1
true
3.2.5
3.5.0
1.4.3
3.3.4




${quarkus.platform.group-id}
${quarkus.platform.artifact-id}
${quarkus.platform.version}
pom
import






io.quarkus
quarkus-arc


io.quarkus
quarkus-resteasy-reactive


io.quarkus
quarkus-junit5
test


io.rest-assured
rest-assured
test



org.apache.spark
spark-core_2.13
${spark.version}


org.apache.spark
spark-sql_2.13
${spark.version}



org.apache.iceberg
iceberg-spark-runtime-3.5_2.13
${iceberg.version}



org.apache.hadoop
hadoop-aws
${hadoop.version}



org.antlr
antlr4-runtime
4.9.3


org.apache.kafka
connect-api
3.2.3





${quarkus.platform.group-id}
quarkus-maven-plugin
${quarkus.platform.version}
true



build
generate-code
generate-code-tests





maven-compiler-plugin
${compiler-plugin.version}


-parameters




maven-surefire-plugin
${surefire-plugin.version}


org.jboss.logmanager.LogManager
${maven.home}




maven-failsafe-plugin
${surefire-plugin.version}



integration-test
verify





${project.build.directory}/${project.build.finalName}-runner

org.jboss.logmanager.LogManager
${maven.home}







native


native



false
native






Подробнее здесь: https://stackoverflow.com/questions/781 ... uarkus-app
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»