Я совершенно новый / новичок с Кассандрой. Я немного исследовал, как работает Cassandra (https://www.scnsoft.com/blog/cassandra-performance), но я попал в ситуацию.
У меня есть 2 CSV на 384 МБ и виртуальная машина Win10 с почти 10 ГБ без хранения. Моя цель - сохранить 384 МБ CSV (7,496,735 строк) в одной таблице в Cassandra, используя spark / scala от IntelliJ (все в одной виртуальной машине с одним узлом). Я предполагаю, что я буду использовать что-то вроде 200-400 МБ памяти, но в действительности все было иначе. Он потреблял все 10 ГБ диска до сбоя из-за отсутствия диска. Я думал, что «это должен быть фактор репликации», но это не может быть так, как пространство ключей было создано как:
CREATE KEYSPACE, ЕСЛИ НЕ СУЩЕСТВУЕТ testkeyspace WITH REPLICATION = {'class': 'SimpleStrategy' , 'replication_factor': 1} AND DURABLE_WRITES = true;
При подсчете хранимых строк (это длилось вечно, выполняя несколько операций на консоли самостоятельно), удается сохранить: 1.767.450 строк .
На следующий день я понял, что он «освобождает» 6,38 ГБ диска.
Мои вопросы:
, почему Cassandra требовалось слишком много свободного дискового пространства для таких маленьких данных (сначала 10 ГБ, а затем 3,5 ГБ для менее чем 0,5 ГБ необработанных данных )?
почему позже освобождается дисковое пространство (6,38 ГБ, которое должно было использоваться)?
и, наконец, как я могу успешно сохранить данные CSV в Cassandra из spark / scala ?
Код для записи:
val spark_cassandra = cassandra_session()
cassandra_write(spark_cassandra, joined_df_unique, "joined_df_unique", "testkeyspace")
def cassandra_write( spark_cassandra : SparkSession, df : DataFrame , df_name : String, keyspace : String ) = {
import com.datastax.spark.connector._
import com.datastax.spark.connector.cql.CassandraConnector
import org.apache.spark.sql.cassandra._
val sparkContext = spark_cassandra.sparkContext
val connector = CassandraConnector(sparkContext.getConf)
df.createCassandraTable(keyspace,df_name) //, writeConf = writeConf)
df.write.cassandraFormat(df_name,keyspace).mode(SaveMode.Append).save()
}
def cassandra_session() : SparkSession = {
val spark_cassandra = org.apache.spark.sql.SparkSession
.builder()
.master("local[*]")
.config("spark.cassandra.connection.host", "localhost")
.appName("Spark Cassandra Connector Example")
.getOrCreate()
spark_cassandra
}
// ("com.datastax.spark" %% "spark-cassandra-connector" % "2.4.3")
Извините, если это слишком основательно c, я впервые храню фоновую искру / scala для Кассандры. Заранее спасибо.