Вновь созданный искровый исполнитель, работающий в kubernetes, не знает конфигурацию зажигания - PullRequest
0 голосов
/ 05 февраля 2020

У меня есть искровой драйвер и исполнитель, работающий на kubernetes, и исполнитель говорит с apache ignite instance. Но если executor-1 умрет, то драйвер создаст executor-2.

Теперь только что созданный executor-2 жалуется на исполнителя 2):

class org.apache.ignite.IgniteIllegalStateException: Ignite instance with provided name doesn't exist. Did you call Ignition.start(..) to start an Ignite instance? [name=shared-grid]

at org.apache.ignite.internal.IgnitionEx.grid(IgnitionEx.java:1390)
at org.apache.ignite.Ignition.ignite(Ignition.java:531)
at org.apache.ignite.spark.impl.package$.ignite(package.scala:86)
at org.apache.ignite.spark.impl.IgniteRelationProvider$$anonfun$configProvider$1$2.apply(IgniteRelationProvider.scala:226)
at org.apache.ignite.spark.impl.IgniteRelationProvider$$anonfun$configProvider$1$2.apply(IgniteRelationProvider.scala:223)
at org.apache.ignite.spark.Once.apply(IgniteContext.scala:224)
at org.apache.ignite.spark.IgniteContext.ignite(IgniteContext.scala:145)
at org.apache.ignite.spark.impl.IgniteSQLDataFrameRDD.compute(IgniteSQLDataFrameRDD.scala:65)
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:324)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:288)
at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:52)
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:324)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:288)
at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:52)
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:324)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:288)
at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:52)
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:324)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:288)
at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:99)
at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:55)
at org.apache.spark.scheduler.Task.run(Task.scala:123)
at org.apache.spark.executor.Executor$TaskRunner$$anonfun$10.apply(Executor.scala:408)
at org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:1360)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:414)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)

Есть ли что-то, что нам нужно сделать, чтобы передать подробности воспламенения экземпляра вновь созданному экземпляру исполнителя

1 Ответ

1 голос
/ 06 февраля 2020

Использовали ли вы IgniteSparkSession ? Я не могу найти тикет, но похоже, что это известная проблема: иногда IgniteSparkSession не может запустить внутренних клиентов в физически распределенном кластере. Следующий код:

IgniteSparkSession igniteSession = IgniteSparkSession.builder()
               .appName("Spark Ignite catalog example")
               .igniteConfig(configPath)
               .getOrCreate();

Может выдать следующее исключение:

class org.apache.ignite.IgniteIllegalStateException: Ignite instance with provided name doesn't exist. Did you call Ignition.start(..) to start an Ignite instance? [name=grid]

В качестве обходного пути вы можете попытаться запустить клиентский узел с предоставленной конфигурацией каждого искрового узла перед запуском задание, но я не уверен, что оно будет работать нормально.

Я предлагаю не использовать IgniteSparkSession , пока текущая проблема не будет исправлена.

Пожалуйста, используйте API DataFrame синтаксис:

String configPath = "client.xml";

SparkConf sparkConf = new SparkConf()
 .setAppName("Example");

SparkSession session = SparkSession.builder()
 .config(sparkConf)
 .getOrCreate();

Dataset < Row > csvDataset = session.read()
 .format("csv")
 .option("sep", ",")
 .option("header", true)
 .load("person.csv");

Dataset < Row > resultDF = csvDataset
 .select("id", "name", "city_id", "company")
 .sort("id")
 .limit(10000);

for (int i = 0; i < 10; i++) {
 DataFrameWriter < Row > df = resultDF
  .write()
  .format(IgniteDataFrameSettings.FORMAT_IGNITE())
  .option(IgniteDataFrameSettings.OPTION_CONFIG_FILE(), configPath)
  .option(IgniteDataFrameSettings.OPTION_TABLE(), "Person")
  .option(IgniteDataFrameSettings.OPTION_CREATE_TABLE_PRIMARY_KEY_FIELDS(), "id, city_id")
  .option(IgniteDataFrameSettings.OPTION_CREATE_TABLE_PARAMETERS(), "template=partitioned,backups=1")
  .mode(Append);

 df.save();
}

session.close();

Этот код работает нормально. Я проверю проблему JIRA для этого. Возможно, я создам новый.

ОБНОВЛЕНИЕ: вот новый билет https://issues.apache.org/jira/browse/IGNITE-12637

...