Symfoware

Symfowareについての考察blog

Cassandra 外部アクセスを許可しPython(Datastax)で接続する

Cassandraをインストールし、テーブルを作成。データを登録してみました。
Cassandra 3.7 cqlshでテーブルを作成してデータの登録、検索

別の端末からアクセスできるよう構成を変更し、
Python(Datastax Python driver)で接続してみます。



Cassandraの外部アクセス許可



Cassandraにはデフォルトで9042番ポートで接続します。
試しにtelnetしてみたら接続が拒否されました。


$ telnet 192.168.1.102 9042
Trying 192.168.1.102...
telnet: Unable to connect to remote host: Connection refused




外部からアクセスできるようCassandraの設定ファイルを編集します。


# vi /etc/cassandra/cassandra.yaml




編集するのは2箇所。
580行目の「start_rpc」をfalseからtrueに。


#start_rpc: false
start_rpc: true




600行目の「rpc_address」をlocalhostからサーバーのIPアドレスに。


#rpc_address: localhost
rpc_address: 192.168.1.102




編集が終わったらCassandraを再起動します。


# service cassandra restart




これで9042ポートに接続できるようになるはずです。


$ telnet 192.168.1.102 9042
Trying 192.168.1.102...
Connected to 192.168.1.102.
Escape character is '^]'.
^]
telnet> quit
Connection closed.





設定を変更したら、cqlshで接続できなくなります。


# cqlsh
Connection error: ('Unable to connect to any servers',
{'127.0.0.1': error(111, "Tried connecting to [('127.0.0.1', 9042)]. Last error: Connection refused")})




今後はIPアドレスを指定して接続することになります。


# cqlsh 192.168.1.102
Connected to Test Cluster at 192.168.1.102:9042.
[cqlsh 5.0.1 | Cassandra 3.7 | CQL spec 3.4.2 | Native protocol v4]
Use HELP for help.
cqlsh>







cassandra-driverのインストール



https://github.com/datastax/python-driver
こちらのドライバーを使用します。

インストール手順に従い、Ubuntu 16.04にインストールしました。
http://datastax.github.io/python-driver/installation.html


ビルド時に必要なライブラリをインストール


$ sudo apt install python-setuptools build-essential python-dev libev4 libev-dev




本体のインストール


$ sudo easy_install cassandra-driver




サンプルを参考に、
Cassandra 3.7 cqlshでテーブルを作成してデータの登録、検索
ここで登録したデータを検索してみます。
「sample」キースペースにある「t」テーブルへのselectです。


  1. # -*- coding:utf-8 -*-
  2. from cassandra.cluster import Cluster
  3. cluster = Cluster(['192.168.1.102'])
  4. session = cluster.connect('sample')
  5. rows = session.execute('SELECT id, value FROM t')
  6. for row in rows:
  7.     print row.id, row.value




実行してみるとちゃんとデータが取得できました。


$ python sample.py
2 テスト2




登録、削除も行ってみます。


  1. # -*- coding:utf-8 -*-
  2. from cassandra.cluster import Cluster
  3. cluster = Cluster(['192.168.1.102'])
  4. session = cluster.connect('sample')
  5. # id:3のデータを追加
  6. session.execute('INSERT INTO t(id, value) VALUES (%s, %s)', (3, u'テスト3'))
  7. # id:2のデータを削除
  8. session.execute('DELETE FROM t WHERE id = %s', (2, ))
  9. rows = session.execute('SELECT id, value FROM t')
  10. for row in rows:
  11.     print row.id, row.value




想定通りの結果です。


$ python sample.py
3 テスト3







BatchStatementによる一括登録



こちらを見ていると、バッチ実行で一括登録する機能があるようです。
http://datastax.github.io/python-driver/api/cassandra/query.html

動かしてみます。


  1. # -*- coding:utf-8 -*-
  2. from cassandra.cluster import Cluster
  3. from cassandra.query import BatchStatement
  4. cluster = Cluster(['192.168.1.102'])
  5. session = cluster.connect('sample')
  6. # データを全件削除
  7. # DELETE FROM tはエラーになる
  8. session.execute('TRUNCATE TABLE t')
  9. # BatchStatementによる一括登録
  10. # 「%s」ではなく「?」でパラメーターを指定
  11. insert_data = session.prepare("INSERT INTO t(id, value) VALUES (?, ?)")
  12. batch = BatchStatement()
  13. batch.add(insert_data, (1, u'テスト登録1'))
  14. batch.add(insert_data, (2, u'テスト登録2'))
  15. batch.add(insert_data, (3, u'テスト登録3'))
  16. batch.add(insert_data, (4, u'テスト登録4'))
  17. # 一括登録実行
  18. session.execute(batch)
  19. rows = session.execute('SELECT id, value FROM t')
  20. for row in rows:
  21.     print row.id, row.value




いい感じです。


$ python sample.py
1 テスト登録1
2 テスト登録2
4 テスト登録4
3 テスト登録3






【参考URL】

Configuring Cassandra

The cassandra.yaml configuration file

Client drivers

DataStax Python Driver for Apache Cassandra

Installation

Getting Started



関連記事

テーマ:サーバ - ジャンル:コンピュータ

  1. 2016/08/12(金) 00:01:40|
  2. Cassandra
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<Cassandra 3.7 のクラスタ構築 | ホーム | Cassandra 3.7 cqlshでテーブルを作成してデータの登録、検索>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1918-5b072291
この記事にトラックバックする(FC2ブログユーザー)