Ошибка MongoSpark E11000 при записи в набор реплик MongoDB - PullRequest
0 голосов
/ 14 января 2019

Я использую приложение Spark2 , которое использует следующую команду из com.mongodb.spark.MongoSpark для записи DataFrame в набор реплик с тремя узлами MongoDB :

    //The real command is similar to this one, depending on options
    //set to the DataFrame and the DataFrameWriter object about MongoDB configurations,
 //such as the writeConcern

    var df: DataFrameWriter[Row] = spark.sql(sql).write
              .option("uri", theUri)
              .option("database", theDatabase)
              .option("collection", theCollection)
              .option("replaceDocument", "false")
              .mode("append")
            [...]    
            MongoSpark.save(df)

Дело в том, что, хотя я уверен, что исходные данные, полученные из таблицы Hive, имеют уникальный первичный ключ , когда приложение Spark работает, я получаю ошибку дублирующегося ключа:

2019-01-14 13:01:08 ERROR: Job aborted due to stage failure: Task 51 in stage 19.0 failed 8 times,
     most recent failure: Lost task 51.7 in stage 19.0 (TID 762, mymachine, executor 21): 
com.mongodb.MongoBulkWriteException: Bulk write operation error on server myserver. 
Write errors: [BulkWriteError{index=0, code=11000,
message='E11000 duplicate key error collection: 
    ddbb.tmp_TABLE_190114125615 index: idx_unique dup key: { : "00120345678" }', details={ }}]. 
at com.mongodb.connection.BulkWriteBatchCombiner.getError(BulkWriteBatchCombiner.java:176)
at com.mongodb.connection.BulkWriteBatchCombiner.throwOnError(BulkWriteBatchCombiner.java:205)
[...]

Я попытался установить записать озабоченность в "3" или даже "в большинство". Кроме того, тайм-аут был установлен на 4/5 секунд, но иногда эта ошибка повторяющегося ключа по-прежнему появляется.

Я хотел бы знать, как настроить загрузку, чтобы не получать повторяющиеся записи при записи в набор реплик.

Есть предложения? Заранее спасибо!

...