Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark Cassandra中频繁截断的问题和24小时ttl创建大型墓碑_Apache Spark_Spark Streaming_Datastax Enterprise_Cassandra 3.0_Tombstone - Fatal编程技术网

Apache spark Cassandra中频繁截断的问题和24小时ttl创建大型墓碑

Apache spark Cassandra中频繁截断的问题和24小时ttl创建大型墓碑,apache-spark,spark-streaming,datastax-enterprise,cassandra-3.0,tombstone,Apache Spark,Spark Streaming,Datastax Enterprise,Cassandra 3.0,Tombstone,下表为ttl24小时或1天。我们有4个cassandra 3.0节点集群,在这个表上将有一个spark处理。处理后,它将截断表中的所有数据,并插入新的数据批。这将是一个持续的过程 我看到的问题是,我们越来越多的墓碑,因为在spark完成处理后,数据每天都被频繁地截断 如果我将gc\u grace\u seconds设置为默认值,将会有更多的墓碑。如果我将gc\u grace\u秒减少到1天,这会是一个问题吗?即使我每天修理那张桌子也够了 我知道频繁删除是Cassandra中的一种反模式,我该如何

下表为
ttl
24小时或1天。我们有4个
cassandra 3.0节点集群
,在这个表上将有一个
spark
处理。处理后,它将截断表中的所有数据,并插入新的数据批。这将是一个持续的过程

我看到的问题是,我们越来越多的
墓碑
,因为在
spark
完成处理后,数据每天都被频繁地截断

如果我将
gc\u grace\u seconds
设置为默认值,将会有更多的
墓碑。如果我将
gc\u grace\u秒减少到1天,这会是一个问题吗?即使我每天修理那张桌子也够了

我知道频繁删除是Cassandra中的一种反模式,我该如何解决这个问题,还有其他方法解决这个问题吗

TABLE b.stag (
    xxxid bigint PRIMARY KEY,
    xxxx smallint,
    xx smallint,
    xxr int,
    xxx text,
    xxx smallint,
    exxxxx smallint,
   xxxxxx tinyint,
    xxxx text,
    xxxx int,
    xxxx text,
 xxxxx text,
    xxxxx timestamp
) WITH bloom_filter_fp_chance = 0.01
    AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
    AND comment = ''
    AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCom                                                                                        pactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
    AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandr                                                                                        a.io.compress.LZ4Compressor'}
    AND crc_check_chance = 1.0
    AND dclocal_read_repair_chance = 0.1
    AND default_time_to_live = 86400
    AND gc_grace_seconds = 864000
    AND max_index_interval = 2048
    AND memtable_flush_period_in_ms = 0
    AND min_index_interval = 128
    AND read_repair_chance = 0.0
    AND speculative_retry = '99PERCENTILE';

谢谢

表的截断不应调用墓碑。所以当你说“截断”时,我想你是指删除。如前所述,您可以删除
gc\u grace\u seconds
值,但这意味着您有一个较小的窗口来运行修复,以协调任何数据,确保每个节点都有一个正确的墓碑,用于给定的键等,否则旧数据可能会重新出现。这是一种权衡


但是,为了公平起见,如果每次都要清除表,为什么不使用该命令,这样就可以清除表,而不清除任何墓碑。

Truncate操作应与ALL或QUORM一致性级别一起使用?根据文档,哪一个是好的?如果副本节点关闭,其ALL但ALL将失败,但我希望我的truncate操作无论如何都能在过程中成功。使用QUORM进行truncate操作会有什么问题。您不需要使用truncate的一致性级别,它不遵循正常的写入路径,因为它是DDL操作,因此将通过gossipi传播到所有使用truncate table的节点,在从4节点群集执行truncate命令之前关闭了一个节点(关闭了一个节点),并收到一个错误消息TruncateError: