Cassandra數據庫之初體驗

什麼是Cassandra?

當您需要可伸縮性和高可用性而不影響性能時,Apache Cassandra數據庫是正確的選擇。線性可擴展性 和在商用硬件或雲基礎架構上經過驗證的容錯能力使它成爲關鍵任務數據的理想平臺。Cassandra對跨多個數據中心的複製提供了一流的支持,爲您的用戶提供了更低的延遲,並且能讓您在區域性斷電情況下也穩如老狗,生生不息。

Cassandra有以下特性:
容錯:數據會自動複製到多個節點以實現容錯。支持跨多個數據中心的複製。可以更換故障節點而不會造成停機。
高性能:Cassandra 在基準測試和實際應用程序中始終勝過流行的NoSQL替代方案,這主要是因爲在基礎架構方面有很多選擇。
去中心化:沒有單點故障。沒有網絡瓶頸。集羣中的每個節點都是相同的
可擴展:一些最大的生產部署包括Apple的75,000個節點存儲超過10 PB的數據,Netflix(2,500個節點,420 TB,每天超過1萬億個請求),中國搜索引擎Easou(270個節點,300 TB,超過8億個)每天的請求數)和eBay(超過100個節點,250 TB)。
可靠性:Cassandra 適用於即使整個數據中心發生故障也不會丟失數據的應用程序。
可伸縮性:讀寫吞吐量都隨着新機器的增加而線性增加,而不會造成停機或應用中斷。

安裝Cassandra

前提條件

  • 安裝最新版本的Java 8,Oracle Java Standard Edition 8或OpenJDK 8。要驗證您是否安裝了正確的Java版本,請輸入。java -version
  • 注意:Cassandra 4.0(CASSANDRA-9608)中添加了對Java 11的實驗支持。在Java 11上運行Cassandra是試驗性的。這樣做自擔風險。有關更多信息,請參見 NEWS.txt。
  • 要使用cqlsh,請使用Python 2.7或Python 3.6+ 的最新版本。要驗證您是否安裝了正確的Python版本,請輸入。python --version

選擇安裝方法

對於大多數用戶而言,安裝二進制tarball是最簡單的選擇。壓縮包將所有內容解壓縮到一個位置,二進制文件和配置文件位於它們自己的子目錄中。tarball安裝最明顯的屬性是它不需要root權限,可以安裝在任何Linux發行版上。

打包安裝需要root權限。如果要使用YUM安裝Cassandra,請在CentOS和基於RHEL的發行版上安裝RPM構建。如果要使用APT安裝Cassandra,請在Ubuntu和其他基於Debian的發行版上安裝Debian構建。請注意,YUM和APT方法都需要root權限,並且將以cassandraOS用戶身份安裝二進制文件和配置文件 。

安裝二進制壓縮包

1)驗證安裝的Java版本,例如:

$ java -version
openjdk version "1.8.0_222"
OpenJDK Runtime Environment (build 1.8.0_222-8u222-b10-1ubuntu1~16.04.1-b10)
OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)

2)從Apache Cassandra下載 站點上的鏡像之一下載二進制tarball 。例如,要下載3.11.6:

$ curl -OL https://mirror.bit.edu.cn/apache/cassandra/3.11.6/apache-cassandra-3.11.6-bin.tar.gz

3)打開壓縮包

$ tar xzvf apache-cassandra-3.11.6-bin.tar.gz

4)啓動Cassandra

有關如何配置安裝的信息,請參閱配置Cassandra

$ cd apache-cassandra-4.0.0/
$ bin/cassandra

5)檢查Cassandra的狀態

$ bin/nodetool status

# 輸出中的狀態列應報告UN,代表“ Up / Normal”。
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address    Load       Tokens       Owns (effective)  Host ID                               Rack
UN  127.0.0.1  70.03 KiB  256          100.0%            ac0d7d8c-4086-4fc1-b19b-a8a50708b5aa  rack1

# 或者,通過以下方式連接到數據庫:
$ bin/cqlsh

安裝RPM軟件包

1)驗證安裝的Java版本,例如:

$ java -version
openjdk version "1.8.0_222"
OpenJDK Runtime Environment (build 1.8.0_222-8u222-b10-1ubuntu1~16.04.1-b10)
OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)

2)將Cassandra的Apache存儲庫添加到文件中/etc/yum.repos.d/cassandra.repo(作爲root 用戶)。最新的主版本是4.0,對應的發行版名稱是40x(後綴“ x”)。對於老版本使用311x的C * 3.11系列,30x3.0,22x2.2和21x2.1。例如,要添加版本4.0(40x)的存儲庫:

[cassandra]
name=Apache Cassandra
baseurl=https://downloads.apache.org/cassandra/redhat/40x/
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://downloads.apache.org/cassandra/KEYS

3)從源更新包索引:

$ sudo yum update

4)使用YUM安裝Cassandra:

$ sudo yum install cassandra

注意:cassandra安裝過程中將創建一個新的Linux用戶。Cassandra服務也將以該用戶身份運行。

5)啓動Cassandra服務:

$ sudo service cassandra start

6)使用以下方法監視啓動進度:

$ tail -f /var/log/cassandra/system.log

7)檢查Cassandra的狀態:

$ nodetool status

輸出中的狀態列應報告UN,代表“正常/正常”。

或者,通過以下方式連接到數據庫:

$ cqlsh

配置Cassandra

要在單個節點上運行Cassandra,存在的默認配置文件./conf/cassandra.yaml就足夠了,您無需更改任何配置。但是,當部署節點羣集或使用不在同一主機上的客戶端時,必須更改某些參數。

Cassandra配置文件可以在conftarball目錄中找到。對於軟件包,配置文件將位於中/etc/cassandra

主要運行屬性

Cassandra中的大多數配置都是通過可以在中設置的yaml屬性完成的cassandra.yaml。至少應考慮設置以下屬性:

  • cluster_name:集羣的名稱。
  • seeds:用逗號分隔的羣集種子IP地址列表。
  • storage_port注意:您不一定需要更改此設置,但請確保沒有防火牆阻止此端口。
  • listen_address:節點的IP地址,這是允許其他節點與此節點通信的地址,因此更改它很重要。或者,您可以設置listen_interface告訴Cassandra使用哪個接口,以及連續使用哪個地址。僅設置一個,而不要同時設置兩個。
  • native_transport_port:對於storage_port,請確保此端口未被防火牆阻止,因爲客戶端將在此端口上與Cassandra通信。

更改目錄的位置

以下yaml屬性控制目錄的位置:

  • data_file_directories:數據文件所在的一個或多個目錄。
  • commitlog_directory:提交日誌文件所在的目錄。
  • saved_caches_directory:保存的緩存所在的目錄。
  • hints_directory:提示所在的目錄。

出於性能原因,如果您有多個磁盤,請考慮將提交日誌和數據文件放在不同的磁盤上。

環境變量

JVM級別的設置(例如堆大小)可以在中設置cassandra-env.sh。您可以將任何其他JVM命令行參數添加到JVM_OPTS環境變量。當Cassandra啓動時,這些參數將傳遞給JVM。

日誌

正在使用的日誌記錄器是logback。您可以通過編輯更改日誌記錄屬性logback.xml。默認情況下,它將在INFO級別登錄到一個名爲的文件system.log,在調試級別登錄到一個名爲的文件debug.log。在前臺運行時,它還將以INFO級別登錄到控制檯。

插入和查詢

Cassandra的API是CQL,即Cassandra查詢語言。要使用CQL,您將需要連接到集羣,這可以完成:

  • 使用cqlsh
  • 或通過Cassandra的客戶端驅動程序。

CQLSH

cqlsh是用於通過CQL與Cassandra交互的命令行shell腳本。它隨每個Cassandra軟件包一起提供,可以在cassandra可執行文件旁邊的bin /目錄中找到。它連接到命令行上指定的單個節點。例如:

$ bin/cqlsh localhost
Connected to Test Cluster at localhost:9042.
[cqlsh 5.0.1 | Cassandra 3.8 | CQL spec 3.4.2 | Native protocol v4]
Use HELP for help.
cqlsh> SELECT cluster_name, listen_address FROM system.local;

 cluster_name | listen_address
--------------+----------------
 Test Cluster |      127.0.0.1

(1 rows)
cqlsh>

CQL詳細介紹

qlsh是用於通過CQL(Cassandra查詢語言)與Cassandra交互的命令行shell腳本。它隨每個Cassandra軟件包一起提供,可以在cassandra可執行文件旁邊的bin /目錄中找到。cqlsh利用Python本機協議驅動程序,並連接到命令行上指定的單個節點。

命令行選項

用法:

cqlsh [options] [host [port]]

選項:

  • -C --color

    強制顏色輸出

  • --no-color

    禁用顏色輸出

  • --browser

    指定用於顯示cqlsh幫助的瀏覽器。這可以是受支持的瀏覽器名稱之一(例如firefox),也可以是後跟瀏覽器路徑%s(例如 )。/usr/bin/google-chrome-stable %s

  • --ssl

    連接到Cassandra時使用SSL

  • -u --user

    用於通過Cassandra進行身份驗證的用戶名

  • -p --password

    用於與Cassandra進行身份驗證的密碼,應與 --user

  • -k --keyspace

    要進行身份驗證的密鑰空間,應與 --user

  • -f --file

    從給定文件執行命令,然後退出

  • --debug

    打印其他調試信息

  • --encoding

    指定輸出的非默認編碼(默認爲UTF-8)

  • --cqlshrc

    指定一個非默認位置cqlshrc的文件

  • -e --execute

    執行給定的語句,然後退出

  • --connect-timeout

    以秒爲單位指定連接超時(默認爲2s)

  • --python /path/to/python

    指定Python解釋器的完整路徑,以覆蓋安裝了多個解釋器的系統上的默認值

  • --request-timeout

    以秒爲單位指定請求超時(默認爲10s)

  • -t --tty

    強制tty模式(命令提示符)

特殊命令

除了支持常規的CQL語句外,cqlsh還支持許多不屬於CQL的特殊命令。這些在下面詳細說明。

CONSISTENCY

用法:CONSISTENCY

設置要遵循的操作的一致性級別。有效的參數包括:

  • ANY
  • ONE
  • TWO
  • THREE
  • QUORUM
  • ALL
  • LOCAL_QUORUM
  • LOCAL_ONE
  • SERIAL
  • LOCAL_SERIAL
SERIAL CONSISTENCY

用法:SERIAL CONSISTENCY

設置要執行的操作的串行一致性級別。有效的參數包括:

  • SERIAL
  • LOCAL_SERIAL

串行一致性水平僅由條件更新(INSERTUPDATEDELETEIF 條件)。對於那些,串行一致性級別定義了串行階段(或“ paxos”階段)的一致性級別,而正常一致性級別定義了“學習”階段的一致性,即,將保證哪種類型的讀取都可以看到正確的更新遠。例如,如果條件寫入的一致性級別爲QUORUM(並且成功),則QUORUM保證可以看到該寫入。但是,如果該寫入的常規一致性級別爲ANY,則只能SERIAL保證一致性級別爲的讀取才能看到它(即使具有一致性的讀取ALL也不能保證足夠)。

SHOW VERSION

打印正在使用的cqlsh,Cassandra,CQL和本機協議版本。例:

cqlsh> SHOW VERSION
[cqlsh 5.0.1 | Cassandra 3.8 | CQL spec 3.4.2 | Native protocol v4]
SHOW HOST

除集羣名稱外,還打印cqlsh連接到的Cassandra節點的IP地址和端口。例:

cqlsh> SHOW HOST
Connected to Prod_Cluster at 192.0.0.1:9042.
SHOW SESSION

Pretty打印特定的跟蹤會話。

用法:SHOW SESSION

用法示例:

cqlsh> SHOW SESSION 95ac6470-327e-11e6-beca-dfb660d92ad8

Tracing session: 95ac6470-327e-11e6-beca-dfb660d92ad8

 activity                                                  | timestamp                  | source    | source_elapsed | client
-----------------------------------------------------------+----------------------------+-----------+----------------+-----------
                                        Execute CQL3 query | 2016-06-14 17:23:13.979000 | 127.0.0.1 |              0 | 127.0.0.1
 Parsing SELECT * FROM system.local; [SharedPool-Worker-1] | 2016-06-14 17:23:13.982000 | 127.0.0.1 |           3843 | 127.0.0.1
...
SOURCE

讀取文件的內容,並以CQL語句或特殊的cqlsh命令執行每一行。

用法:SOURCE

用法示例:

cqlsh> SOURCE '/home/thobbs/commands.cql'
CAPTURE

開始捕獲命令輸出並將其附加到指定文件。捕獲到的輸出不會在控制檯上顯示。

用法:

CAPTURE '<file>';
CAPTURE OFF;
CAPTURE;

也就是說,必須在字符串文字內給出要附加到的文件的路徑。相對於當前工作目錄解釋路徑。支持使用tilde速記符號('~/mydir')來引用$HOME

僅捕獲查詢結果輸出。僅cqlsh命令的錯誤和輸出仍將顯示在cqlsh會話中。

要停止捕獲輸出並再次在cqlsh會話中顯示它,請使用。CAPTURE OFF

要檢查當前的捕獲配置,請不使用CAPTURE任何參數。

HELP

提供有關cqlsh命令的信息。要查看可用主題,請輸入HELP不帶任何參數的內容。要查看有關某個主題的幫助,請使用。另請參見用於控制使用哪種瀏覽器顯示幫助的參數。HELP ``--browser

TRACING

啓用或禁用查詢跟蹤。啓用跟蹤後,查詢完成後,將打印查詢期間事件的跟蹤。

用法:

TRACING ON
TRACING OFF
PAGING

啓用分頁,禁用分頁或設置讀取查詢的頁面大小。啓用分頁後,一次將僅提取一頁數據,並且將顯示提示以提取下一頁。通常,最好在交互式會話中啓用分頁,以免一次獲取和打印大量數據。

用法:

PAGING ON
PAGING OFF
PAGING <page size in rows>
EXPAND

啓用或禁用行的垂直打印。EXPAND當獲取許多列或單個列的內容很大時,啓用很有用。

用法:

EXPAND ON
EXPAND OFF
LOGIN

以當前會話的指定Cassandra用戶身份進行身份驗證。

用法:

LOGIN <username> [<password>]
EXIT

結束當前會話並終止cqlsh進程。

用法:

EXIT
QUIT
CLEAR

清除控制檯。

用法:

CLEAR
CLS
DESCRIBE

打印模式元素或集羣的描述(通常是一系列DDL語句)。這對於轉儲全部或部分模式很有用。

用法:

DESCRIBE CLUSTER
DESCRIBE SCHEMA
DESCRIBE KEYSPACES
DESCRIBE KEYSPACE <keyspace name>
DESCRIBE TABLES
DESCRIBE TABLE <table name>
DESCRIBE INDEX <index name>
DESCRIBE MATERIALIZED VIEW <view name>
DESCRIBE TYPES
DESCRIBE TYPE <type name>
DESCRIBE FUNCTIONS
DESCRIBE FUNCTION <function name>
DESCRIBE AGGREGATES
DESCRIBE AGGREGATE <aggregate function name>

在任何命令中,DESC都可以代替使用DESCRIBE

該命令顯示集羣名稱和分區程序:DESCRIBE CLUSTER

cqlsh> DESCRIBE CLUSTER

Cluster: Test Cluster
Partitioner: Murmur3Partitioner

該命令顯示重新創建整個架構所需的DDL語句。這對於轉儲架構以克隆集羣或從備份還原特別有用。DESCRIBE SCHEMA

COPY TO

將數據從表複製到CSV文件。

用法:

COPY <table name> [(<column>, ...)] TO <file name> WITH <copy option> [AND <copy option> ...]

如果未指定任何列,則表中的所有列將被複制到CSV文件。可以通過在表名後面添加一個用逗號括起來的列名列表來指定要複製的列子集。

本應是代表目標文件的路徑字符串文字(單引號)。這也可以是特殊值(不帶單引號),以將CSV打印到stdout。```STDOUT`

有關同時適用於和的選項,請參見共享的COPY選項COPY TO``COPY FROM

COPY TO選項
  • MAXREQUESTS

    最大令牌數範圍可以同時獲取。默認爲6。

  • PAGESIZE

    單個頁面中要獲取的行數。預設爲1000。

  • PAGETIMEOUT

    默認情況下,頁面超時爲頁面大小每1000個條目10秒,如果頁面大小較小則爲10秒。

  • BEGINTOKENENDTOKEN

    要導出的令牌範圍。默認爲導出完整的鈴聲。

  • MAXOUTPUTSIZE

    輸出文件的最大大小,以行數爲單位;超出此最大值,輸出文件將被拆分爲多個段。-1表示無限制,並且是默認值。

  • ENCODING

    用於字符的編碼。默認爲utf8

COPY FROM

將數據從CSV文件複製到表。

用法:

COPY <table name> [(<column>, ...)] FROM <file name> WITH <copy option> [AND <copy option> ...]

如果未指定任何列,則CSV文件中的所有列都將複製到表中。可以通過在表名後面添加一個用逗號括起來的列名列表來指定要複製的列子集。

的應爲字符串文字(帶單引號),代表源文件的路徑。這也可以是特殊值(不帶單引號),以便從stdin讀取CSV數據。```STDIN`

有關同時適用於和的選項,請參見共享的COPY選項COPY TO``COPY FROM

COPY TO選項
  • INGESTRATE

    每秒要處理的最大行數。默認爲100000

  • MAXROWS

    要導入的最大行數。-1表示無限制,並且是默認值。

  • SKIPROWS

    要跳過的許多初始行。默認爲0。

  • SKIPCOLS

    以逗號分隔的要忽略的列名稱列表。默認情況下,不跳過任何列。

  • MAXPARSEERRORS

    要忽略的最大解析錯誤總數。-1表示無限制,並且是默認值。

  • MAXINSERTERRORS

    要忽略的最大插入錯誤總數。-1表示無限。默認值爲1000。

  • ERRFILE =

    來存儲無法導入所有行的文件,在默認情況下,這是import__.err地方是你的密鑰空間,並爲你的表名。

  • MAXBATCHSIZE

    單個批次中插入的最大行數。默認爲20

  • MINBATCHSIZE

    單個批處理中插入的最小行數。默認爲2。

  • CHUNKSIZE

    一次從主進程傳遞給子工作進程的行數。預設爲1000。

共享的COPY選項

和共有的選項。COPY TO``COPY FROM

  • NULLVAL

    空值的字符串佔位符。默認爲null

  • HEADER

    對於,控制CSV輸出文件中的第一行是否包含列名稱。對於COPY FROM,指定CSV輸入文件中的第一行是否包含列名。默認爲。COPY TO``false

  • DECIMALSEP

    用作小數點分隔符的字符。默認爲.

  • THOUSANDSSEP

    用於分隔數千個字符。默認爲空字符串。

  • BOOLSTYlE

    布爾值的字符串文字格式。默認爲True,False

  • NUMPROCESSES

    COPY任務創建的子工作進程數。默認值最大爲4,最大爲16 。但是,最多將創建(num_cores-1)個進程。COPY FROM``COPY TO

  • MAXATTEMPTS

    在放棄之前獲取數據範圍(使用時)或插入數據塊(使用時)的最大嘗試失敗次數。默認爲5。COPY TO``COPY FROM

  • REPORTFREQUENCY

    狀態更新的頻率(以秒爲單位)。默認值爲0.25。

  • RATEFILE

    一個可選文件,用於輸出速率統計信息。默認情況下,統計信息不會輸出到文件中。

客戶端驅動程序

以下列出了Java、Python、Go語言的Cassandra客戶端驅動程序。在選擇驅動程序之前,應驗證特定驅動程序支持的Cassandra版本和功能。

Java

Python

Go

客戶端的詳細使用細則,讀者可點擊鏈接相應的學習,後面有機會的話考慮出一部分教程。

學而時習之

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章