Как уменьшить задержку запуска с помощью Apache Iceberg на AWS EMR Serverless?
Я использую Apache Iceberg на Apache ERM Serverless при поддержке каталога данных AWS Glue . Следуя информации, найденной на этой странице , я использую предварительно инициализированные рабочие процессы, которые должны позволить EMR «поддерживать теплый пул рабочих процессов для приложения, чтобы оно могло предоставлять ответ менее чем за секунду для начала обработки запросов». К сожалению, приложению требуется около 12 секунд для запуска и 40 секунд для загрузки всех зависимостей перед обработкой любого фактического задания. Что нужно сделать, чтобы сократить время с 52 до менее секунды? Я не эксперт по Java, и я подозреваю, что могут быть лучшие способы внедрения зависимостей, чтобы держать их в тепле на предварительно инициализированных воркерах, но я не знаю, как это сделать.
import org.apache.iceberg.Table;
import org.apache.iceberg.aws.glue.GlueCatalog;
import org.apache.iceberg.catalog.Catalog;
import org.apache.iceberg.catalog.TableIdentifier;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;
public final class JavaSpark {
public static void main(String[] args) throws Exception {
System.out.println("Started");
SparkSession spark = SparkSession
.builder()
.appName("Java SparkSQL Example")
.getOrCreate();
GlueCatalog catalog = new GlueCatalog();
TableIdentifier tableId = TableIdentifier.of("test", "mytable");
Table table = catalog.loadTable(tableId);
TableScan scan = table.newScan();
spark.sql("CREATE DATABASE IF NOT EXISTS dev.test;");
spark.sql(
"CREATE TABLE IF NOT EXISTS dev.test.mytable (id bigint, data string) USING iceberg;"
);
spark.sql(
"INSERT INTO dev.test.mytable VALUES (1, 'one'), (2, 'two');"
);
Dataset<Row> sqlDF = spark.sql("SELECT * FROM dev.test.mytable;");
sqlDF.show();
spark.sql("DELETE FROM dev.test.mytable WHERE id=1;");
spark.stop();
System.out.println("Stopped");
}
}