Я переношу большую таблицу на 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)
}