在安裝目錄 /bin 和 tools/bin 目錄中有很多工具可以直接處理一個 Cassandra 節點文件系統中的SSTable 數據文件。 這些文件的擴展名為 .db。
在正常情況下,你可能不需要經常使用這些工具,不過它們對於調試和更好地理解Cassandra的數據存儲如何工作很有幫助。Cassandra不再本地主機上運行時,必須運行修改SSTable的工具(如 sstablelevelreset、sstablerepairedset、sstablesplit、sstableofflinerelevel)
sstabledump
以JSON格式將給定SSTable的內容轉儲到標准輸出。 您必須提供一個sstable。 在執行此工具之前,必須停止Cassandra,否則將出現意外結果。注意:腳本不會驗證Cassandra是否已停止。 -d CQL row per line internal representation -e Enumerate partition keys only -k <arg> Partition key -x <arg> Excluded partition key(s) -t Print raw timestamps instead of iso8601 date strings -l Output each row as a separate JSON object
sstableexpiredblockers
工具會找出阻止刪除一個SSTable的阻塞SSTable,這個類會輸出阻塞其他SSTable被刪除的所有SSTable,是你能確定為什么給定的SSTable還在磁盤上。
如果表的sstables存在,但是沒有任何表的數據比過期sstable中最新的邏輯碑舊,則腳本將不返回任何內容。
否則,腳本將返回過期的sstables,后面是被阻止的sstables的列表。
sstablelevelreset
工具將一組給定SSTable的級別重置為0,這就要求下一個合並操作中要合並這些SSTable。
如果設置了LeveledCompactionStrategy,則此腳本可用於在給定的一組sstables上將level重置為0。例如,如果要更改最小sstable大小,並因此使用此新配置重新啟動壓縮過程,則此選項非常有用。
請參閱http://cassandra.apache.org/doc/latest/operating/compaction.html#leveled compaction strategy,以了解如何在該壓縮策略中使用級別。
在執行此工具之前,必須停止Cassandra,否則將出現意外結果。注意:腳本不會驗證Cassandra是否已停止。
sstableloader
如果拓撲,令牌區間或副本因子有任何變化,就需要使用loader工具加載數據。
將目錄<dir_path>中的sstables大容量加載到配置的集群。<dir_path>的父目錄用作目標鍵空間/表名。例如,要將名為ma-1-big-Data.db的sstable加載到keyspace1/standard1中,您需要將文件ma-1-big-Data.db和ma-1-big-Index.db放在目錄/path/to/keyspace1/standard1/中。該工具將創建新的sstables,並且不會清理復制的文件。
下面列出的幾個選項並沒有按預期工作,在這些情況下,針對特定的用例提到了解決方法。
為了避免在讀取時壓縮要加載的sstable文件,請將這些文件放置在數據目錄之外的備用keyspace/table路徑中。
參考:https://issues.apache.org/jira/browse/CASSANDRA-1278
在執行此工具之前,必須停止Cassandra,否則將出現意外結果。注意:腳本不會驗證Cassandra是否已停止。
sstableutil
工具可以列出應指定表明的 SSTable 文件
sstablemetadata
將有關sstable的信息從相關的Statistics.db和Summary.db文件打印到標准輸出。 參考:https://issues.apache.org/jira/browse/CASSANDRA-7159和https://issues.apache.org/jira/browse/CASSANDRA-10838 在執行此工具之前,必須停止Cassandra,否則將出現意外結果。注意:腳本不會驗證Cassandra是否已停止。 SSTable prefix of the sstable filenames related to this sstable Partitioner partitioner type used to distribute data across nodes; defined in cassandra.yaml Bloom Filter FP precision of Bloom filter used in reads; defined in the table definition Minimum timestamp minimum timestamp of any entry in this sstable, in epoch microseconds Maximum timestamp maximum timestamp of any entry in this sstable, in epoch microseconds SSTable min local deletion time minimum timestamp of deletion date, based on TTL, in epoch seconds SSTable max local deletion time maximum timestamp of deletion date, based on TTL, in epoch seconds Compressor blank (-) by default; if not blank, indicates type of compression enabled on the table TTL min time-to-live in seconds; default 0 unless defined in the table definition TTL max time-to-live in seconds; default 0 unless defined in the table definition First token lowest token and related key found in the sstable summary Last token highest token and related key found in the sstable summary Estimated droppable tombstones ratio of tombstones to columns, using configured gc grace seconds if relevant SSTable level compaction level of this sstable, if leveled compaction (LCS) is used Repaired at the timestamp this sstable was marked as repaired via sstablerepairedset, in epoch milliseconds Replay positions covered the interval of time and commitlog positions related to this sstable totalColumnsSet number of cells in the table totalRows number of rows in the table Estimated tombstone drop times approximate number of rows that will expire, ordered by epoch seconds Count Row Size Cell Count two histograms in two columns; one represents distribution of Row Size and the other represents distribution of Cell Count Estimated cardinality an estimate of unique values, used for compaction EncodingStats* minTTL in epoch milliseconds EncodingStats* minLocalDeletionTime in epoch seconds EncodingStats* minTimestamp in epoch microseconds KeyType the type of partition key, useful in reading and writing data from/to storage; defined in the table definition ClusteringTypes the type of clustering key, useful in reading and writing data from/to storage; defined in the table definition StaticColumns a list of the shared columns in the table RegularColumns a list of non-static, non-key columns in the table
sstableofflinerelevel
當使用LeveledCompactionStrategy時,sstables可能會在最近引導的節點上停留在L0,並且壓縮可能永遠不會趕上。此工具用於將sstables提升到盡可能高的級別。 參考:https://issues.apache.org/jira/browse/CASSANDRA-8301 這樣做的方式是:sstables按其最后一個標記存儲。給定這樣的原始級別(注意,[]表示令牌邊界,而不是磁盤上的sstable大小;所有sstable都是相同的大小):
sstablerepairedset
在某些環境中,對於大數據量,修復可能需要很長時間。使用此工具可以在給定的一組sstables上設置repairedAt狀態,以便在需要時只能在未修復的sstables上運行修復。 請注意,運行修復(例如,通過nodetool修復)不會設置此元數據的狀態。只有通過此工具設置此元數據的狀態才能執行此操作。 參考:https://issues.apache.org/jira/browse/CASSANDRA-5351 在執行此工具之前,必須停止Cassandra,否則將出現意外結果。注意:腳本不會驗證Cassandra是否已停止。
sstablescrub
可以更有效地從SSTable文件刪除已破壞的數據。如果這個工具刪除了已破壞的行,就需要運行一個修復。
sstablesplit
工具用來將SSTable文件划分為不超過指定最大大小的多個SSTable。如果一個主合並生成大量的表,這會很有用。否則這些表可能很長時間都無法合並。
sstableupgrade
將給定表(或快照)中的sstables升級到當前版本的Cassandra。此過程通常在Cassandra版本升級后完成。此操作將重寫指定表中的sstables,以匹配當前安裝的Cassandra版本。sstableupgrade命令還可用於將sstables降級到以前的版本。
快照選項將只升級指定的快照。在嘗試還原在比Cassandra當前運行的主版本舊的主版本中拍攝的快照之前,需要升級快照。這將替換給定快照中的文件,並斷開到活動sstables的任何硬鏈接。
在執行此工具之前,必須停止Cassandra,否則將出現意外結果。注意:腳本不會驗證Cassandra是否已停止。
sstableverify
檢驗對應table的SSTable文件,找出存在錯誤或數據破壞的文件。 檢查s s table是否有錯誤或損壞,以查找所提供的表。 參考:https://issues.apache.org/jira/browse/CASSANDRA-5791 在執行此工具之前,必須停止Cassandra,否則將出現意外結果。注意:腳本不會驗證Cassandra是否已停止。