2015-10-07 4 views
1

Я использую AWS EMR с Spark 1.4.0, работающим как автономный кластер (не управляемый нитью или мезосом), и я использую версию couchbase-spark-connector1.0.0-beta на момент написания этой статьи. couchbase-java-client версия 2.2.0-dp2 на момент написания.ошибка используя couchbase-spark-connector. throws BackPressureException

У меня есть вид написанный в Couchbase, который возвращает мне только ключи от моих документов (около 300M + ключей).

Я написал программу Spark, написанную на Scala 2.10.4, которая для каждого ключа, возвращаемого из представления, я получаю документ и хочу сохранить его все в файловой системе AWS S3.

Моя проблема заключается в том, что Couchbase бросает мне исключение из типа: com.couchbase.client.core.BackpressureException, который говорит по documentation:

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

Таким образом, мой вопрос заключается в том, как я могу исправить это исключение, чтобы его не бросали. Я бы предположил, что хочу отложить свои запросы, но не могу понять, как это сделать.

Прикрепленный ниже моего Спарк Код:

val couchbaseKeys = sparkContext.couchbaseView(ViewQuery.from(couchbaseDesignName, couchbaseViewName)).map(_.id).couchbaseGet[JsonDocument]() 
    couchbaseKeys.map(Projection.projectCouchbaseObject(_)).filter(_ != null).saveAsTextFile(pathForExportedOutput) 

И объект Проекция с методом:

object Projection { 

    val logger: Logger = LoggerFactory.getLogger(this.getClass) 

    def projectCouchbaseObject(couchbaseObject: JsonDocument): String = { 
    try { 
     return couchbaseObject.id() + '\t' + couchbaseObject.content() 
    } 
    catch { 
     case exception: Throwable => { 
     logger.error("Failed project couchbase object. key was: " + couchbaseObject.id(), exception) 
     } 
    } 

    return null 
    } 
} 

ответ

Смежные вопросы