Cassandra SSTable工具詳解


 

 

在安裝目錄 /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是否已停止。

 ref: https://issues.apache.org/jira/browse/CASSANDRA-5271

 

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是否已停止。 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM