Кассандра долго работает запрос страницы - PullRequest
0 голосов
/ 03 мая 2019

Я переношу большую таблицу на 2 миллиарда строк из кластера Cassandra v2 в кластер Cassandra v3. Я использую режим разбиения на страницы для чтения блоком из 1000 строк.Копирование должно занять 11 дней.

Кто-нибудь пробовал эту длинную копию?

Через 6 часов у меня появляется ошибка:

com.datastax.driver.core.RequestHandler - Not retrying statement because it is not idempotent

В кодениже, это, безусловно, строка с ma_session.execute.

Код в scala.

  def paginatedRead(boundStatement:BoundStatement, test:(Row) =>Boolean, f:(Row)=>ResultSetFuture):(Long,Long) ={
    /*
     Cette méthode lit une table en mode paginé d'après le boundstatement
     Une fonction test permet de filtrer les record
     une Fontion f va réaliser une écriture assynchrone
     En sortie, les 2 compteurs nb lectures global et nb insertions
     */
    var page:PagingState =null
    var rsParcel:ResultSet=null

    var newRow:Row=null
    var cptGlobal=0L

    cptExec=0L; cptInsert=0L
    do {
      if (page != null) boundStatement.setPagingState(page)
      rsParcel = ma_session.execute(boundStatement.setFetchSize(fetchSize))
      if (rsParcel !=null) {
        page = rsParcel.getExecutionInfo.getPagingState
      } else page = null
      val nbRows = rsParcel.getAvailableWithoutFetching

      val itParcel = rsParcel.iterator() //. take(nbRows)

      for (i <- 0 until nbRows) {
        newRow=itParcel.next
        if (test(newRow)) {
          addFuture (f(newRow))
        }
        cptGlobal += 1
        if (cptGlobal % 100000==0) Init2.logger.warn("lecture paginated en cours lu: "+cptGlobal+"  ecrit: "+cptInsert)
      }

    }  while (page != null)
    waitFuture
    (cptGlobal,cptInsert)

  }
...