Apache Cassandra Kurulumu
Bu yazıda Apache Cassandra kurulumundan ve temel bazı araçların kullanımından bahsedeceğiz.
Öncelikle Cassandra’yı indirmekle başlayalım, resmi sitesinden en son sürümü indirebilirsiniz. Şu anda en güncel sürüm 1.1.1 olarak görünüyor. Ben bu tip uygulamaları /usr/java ya da /opt dizini altına kurmayı tercih ediyorum. Bu yazıda /usr/java dizinine kuracak şekilde anlatacağım.
İndirdiğim apache-cassandra-1.1.1-bin.tar.gz dosyasını /usr/java dizini altına açtıktan sonra erişimi ve ileride sürüm güncelleme işlemlerini kolaylaştırmak amacıyla sembolik link olarak da oluşturuyorum. Ayrıca veri ve log dizinlerini oluşturuyorum.
cd /usr/java wget "http://godel.cs.bilgi.edu.tr/apache/cassandra/1.1.1/apache-cassandra-1.1.1-bin.tar.gz" gzip -dc apache-cassandra-1.1.1-bin.tar.gz | tar xf - ln -s /usr/java/apache-cassandra-1.1.1 cassandra mkdir cassandra/data mkdir cassandra/logs
Cassandra’yı çalıştırmadan önce verileri ve logları saklayacağı klasörleri ayarlamamız gerekiyor. Cassandra’nın ayarları conf dizini altındaki cassandra.yaml dosyasından yapılıyor. Ben ilgili değerleri örnek olarak şöyle oluşturuyorum:
# disk üzerinde verilerin saklanacağı klasör data_file_directories: - /usr/java/cassandra/data/data # commit log dosyası commitlog_directory: /usr/java/cassandra/data/commitlog # kayıtlı önbellek saved_caches_directory: /usr/java/cassandra/data/saved_caches
Son olarak log4j-server.properties dosyasından logların kaydedileceği dizini değiştirmemiz gerekiyor:
# log dosyası log4j.appender.R.File=/usr/java/cassandra/logs/system.log
Ayarları yaptıktan sonra Cassandra’yı başlatmak için bin/cassandra -f komutunu kullanıyoruz.
$ bin/cassandra -f INFO 02:44:17,484 Logging initialized INFO 02:44:17,490 JVM vendor/version: Java HotSpot(TM) 64-Bit Server VM/1.6.0_29 INFO 02:44:17,490 Heap size: 1052770304/1052770304 INFO 02:44:17,490 Classpath: bin/../conf:bin/../build/classes/main:bin/../build/classes/thrift:bin/../lib/antlr-3.2.jar:bin/../lib/apache-cassandra-1.1.1.jar:bin/../lib/apache-cassandra-clientutil-1.1.1.jar:bin/../lib/apache-cassandra-thrift-1.1.1.jar:bin/../lib/avro-1.4.0-fixes.jar:bin/../lib/avro-1.4.0-sources-fixes.jar:bin/../lib/commons-cli-1.1.jar:bin/../lib/commons-codec-1.2.jar:bin/../lib/commons-lang-2.4.jar:bin/../lib/compress-lzf-0.8.4.jar:bin/../lib/concurrentlinkedhashmap-lru-1.3.jar:bin/../lib/guava-r08.jar:bin/../lib/high-scale-lib-1.1.2.jar:bin/../lib/jackson-core-asl-1.9.2.jar:bin/../lib/jackson-mapper-asl-1.9.2.jar:bin/../lib/jamm-0.2.5.jar:bin/../lib/jline-0.9.94.jar:bin/../lib/json-simple-1.1.jar:bin/../lib/libthrift-0.7.0.jar:bin/../lib/log4j-1.2.16.jar:bin/../lib/metrics-core-2.0.3.jar:bin/../lib/servlet-api-2.5-20081211.jar:bin/../lib/slf4j-api-1.6.1.jar:bin/../lib/slf4j-log4j12-1.6.1.jar:bin/../lib/snakeyaml-1.6.jar:bin/../lib/snappy-java-1.0.4.1.jar:bin/../lib/snaptree-0.1.jar:bin/../lib/jamm-0.2.5.jar INFO 02:44:17,493 JNA not found. Native methods will be disabled. INFO 02:44:17,504 Loading settings from file:/usr/java/apache-cassandra-1.1.1/conf/cassandra.yaml INFO 02:44:17,661 DiskAccessMode 'auto' determined to be mmap, indexAccessMode is mmap INFO 02:44:17,867 Global memtable threshold is enabled at 334MB INFO 02:44:18,082 Initializing key cache with capacity of 50 MBs. INFO 02:44:18,095 Scheduling key cache save to each 14400 seconds (going to save all keys). INFO 02:44:18,097 Initializing row cache with capacity of 0 MBs and provider org.apache.cassandra.cache.SerializingCacheProvider INFO 02:44:18,101 Scheduling row cache save to each 0 seconds (going to save all keys). INFO 02:44:18,396 Couldn't detect any schema definitions in local storage. INFO 02:44:18,397 Found table data in data directories. Consider using the CLI to define your schema. INFO 02:44:18,429 No commitlog files found; skipping replay INFO 02:44:18,469 Cassandra version: 1.1.1 INFO 02:44:18,474 Thrift API version: 19.32.0 INFO 02:44:18,477 CQL supported versions: 2.0.0,3.0.0-beta1 (default: 2.0.0) INFO 02:44:18,520 Loading persisted ring state INFO 02:44:18,525 Starting up server gossip INFO 02:44:18,583 Enqueuing flush of Memtable-LocationInfo@137493297(162/202 serialized/live bytes, 3 ops) INFO 02:44:18,585 Writing Memtable-LocationInfo@137493297(162/202 serialized/live bytes, 3 ops) INFO 02:44:18,636 Completed flushing /usr/java/cassandra/data/data/system/LocationInfo/system-LocationInfo-hd-1-Data.db (234 bytes) for commitlog position ReplayPosition(segmentId=1339717458349310000, position=586) INFO 02:44:18,677 Starting Messaging Service on port 7000 INFO 02:44:18,686 This node will not auto bootstrap because it is configured to be a seed node. WARN 02:44:18,694 Generated random token 97298029669747831194770523185926143402. Random tokens will result in an unbalanced ring; see http://wiki.apache.org/cassandra/Operations INFO 02:44:18,697 Enqueuing flush of Memtable-LocationInfo@1141296884(77/96 serialized/live bytes, 2 ops) INFO 02:44:18,698 Writing Memtable-LocationInfo@1141296884(77/96 serialized/live bytes, 2 ops) INFO 02:44:18,707 Completed flushing /usr/java/cassandra/data/data/system/LocationInfo/system-LocationInfo-hd-2-Data.db (163 bytes) for commitlog position ReplayPosition(segmentId=1339717458349310000, position=767) INFO 02:44:18,713 Node localhost/127.0.0.1 state jump to normal INFO 02:44:18,714 Bootstrap/Replace/Move completed! Now serving reads. INFO 02:44:18,730 Will not load MX4J, mx4j-tools.jar is not in the classpath INFO 02:44:18,760 Binding thrift service to localhost/127.0.0.1:9160 INFO 02:44:18,764 Using TFastFramedTransport with a max frame size of 15728640 bytes. INFO 02:44:18,770 Using synchronous/threadpool thrift server on localhost/127.0.0.1 : 9160 INFO 02:44:18,780 Listening for thrift clients...
Loglarda herhangi bir exception görmediyseniz Cassandra sorunsuz bir şekilde başlamış demektir. Bundan sonra yapacağımız SQL benzeri CQL ile örnek birkaç işlem yapmak. CQL konsolunu çalıştırmak için bin/cqlsh komutunu kullanıyoruz.
$ bin/cqlsh Connected to Test Cluster at localhost:9160. [cqlsh 2.2.0 | Cassandra 1.1.1 | CQL spec 2.0.0 | Thrift protocol 19.32.0] Use HELP for help. cqlsh>
Cassandra mimarisinde RDBMS sistemlerdeki şema kavramına karşılık gelen Keyspace kavramı mevcut. Keyspace’ler verileri barındırmak dışında verilerin nasıl dağıtılacağının ve nasıl kopyalarının oluşturulacağının da belirlendiği katman. data partitioning strategy and replication strategy parametreleri ile bu değerleri Keyspace yaratırken veriyoruz.
cqlsh> create keyspace devveri with strategy_class='SimpleStrategy' and strategy_options:replication_factor=1; cqlsh> use devveri; cqlsh:devveri>
Keyspace yarattıktan sonra sıra verileri saklayacak olan Column Family objesi yaratmaya geliyor. Column Family objeleri tablolara benzer fakat çok daha dinamik ve esnektir. Column Family oluştururken key alanı dışında statik olarak kolonları belirlemeye gerek yoktur.
cqlsh:devveri> create columnfamily members (memberId int primary key); cqlsh:devveri>
Bundan sonrası şekil itibariyle SQL cümlelerine çok benziyor, fakat işleyiş olarak ciddi bir fark var. Cassandra’da insert komutu yerine update komutu kullanabilirsiniz.
cqlsh:devveri> insert into members (memberId, name, email, age) values (1, 'Dave Mustaine', 'dave@megadeth.com', 51); cqlsh:devveri> update members set name='David Ellefson', email='david@megadeth.com', age=48 where memberId=2; cqlsh:devveri> select * from members; memberId | age | email | name ----------+-----+--------------------+---------------- 1 | 51 | dave@megadeth.com | Dave Mustaine 2 | 48 | david@megadeth.com | David Ellefson cqlsh:devveri>
Cassandra’nın güzel özelliklerinden birisi de oluşturacağınız kaydın küme içerisinde kaç sunucuda kopyasının olacağının query zamanında ayarlayabilir olması. Bu sayede verilerin tutarlılığı ayarlanabilir olmuş oluyor (tunable consistency). Örneğin 4 sunuculuk bir kümede verinin sunucuların yarısından bir fazlasına (quorum) yani 3 sunucuya da gitmesini isterseniz şöyle yapabiliyorsunuz:
cqlsh:devveri> update members using consistency quorum set name='Marty Friedman' where memberId=3; cqlsh:devveri>
CQL kullanarak key olarak belirlenen alan üzerinden select cümlesi ile istediğiniz kayıtlara ulaşabilirsiniz. Ancak diğer kolonlar üzerinden sorgulama yapmak isterseniz o zaman daha öncesinde indeks oluşturmuş olmanız gerekiyor.
Umarım bu yazı Cassandra kurup kurcalamaya başlamanız için faydalı olmuştur.
Hazelcast – Veri Dağıtım Sanatı Cloudera CDH3 Hadoop Kurulumu
Merhabalar! Yazınızı okudum ve söylediklerinizi de uyguladım çok da faydalı oldular ancak ben cassandrayı java ile bağlamak için çok uğraştım çok da kaynak buldum ancak sürekli bi hatalar zinciri aldı götürdü.. apache cassandra ile java arasında bağlantının yapıldığını, anlatabilir misiniz, (ben eclipse kullanıyorum ve işletim sistemim win7 ).. Şimdiden çok teşekkürler
Merhaba Ümit,
Cassandra istemci kütüphaneleri konusunda biraz sıkıntılı. http://devveri.com/nosql/apache-cassandra-jdbc yazımızda JDBC sürücüsü üzerinden nasıl kullanılabileceğini anlatmaya çalışmıştık. Bunun dışında aşağıdaki istemcileri kullanmak mümkün:
Astyanax:
https://github.com/Netflix/astyanax/wiki/Getting-Started
Hector (en yaygın ama bence fazla karmaşık):
http://prettyprint.me/2010/02/23/hector-a-java-cassandra-client/
eBay’in açık kaynaklı kodu Turmetic üzerinden kullanım:
https://www.ebayopensource.org/wiki/display/TURMERICDOC110GA/Cassandra
Tüm liste şöyle:
http://wiki.apache.org/cassandra/ClientOptions/
Diğer istemci kütüphaneleri ile ilgili örnek yazmayı bizde istiyoruz. Umarım yardımcı olabilmişizdir.
https://github.com/Netflix/astyanax/wiki/Getting-Started bu sayfada tamamen içerikten bahsediyo ama ben öncelikle bu dosyayı eclipse dahil etmek istiyorum.dosyayı indirdim ama eclipse ekleyemiyorum. Yardımcı olabilir misiniz?
ayrıca cassandranın cloud ortamda çalışması şart mı?
Selam Ümit,
Astyanax ile ilgili bir örnek hazırladım, umarım işine yarar: http://devveri.com/nosql/apache-cassandra-astyanax
1-)Hakan hocam öncelikle yazınız için çok tşk ederim çok faydalı oldu biz yeni başlayanlar için . hocam windows 7 üzerinde apache cassandra server bağlantısını gösterip CQL ile ekleme silme güncelleme seçme işlemlerini yapabilirmisiniz .
2-) Bir de hocam metadata ne demek söyleyebilirmisiniz?
Windows ile ilgili bir yazı da yazmaya çalışırım ilerleyen günlerde.
Metadata, veri hakkındaki veri anlamına geliyor. Örneğin JDBC kullanarak çektiğin veriler hakkındaki bilgiler yani verinin tipi, boyutu, şekli, kuralları vs Metadata oluyor.
teşekkür ederim hocam yardımlarınız için ..
Hakan hocam ;
bin klasörünün altıntaki cqlsh yi çalıştırmak istedigimde bana bu hata mesajını veriyor nasıl üstesinden gelebilirim yardımcı olurmusunuz ?
hbingol@hbingol-virtual-machine:~/Masaüstü/usr/java/apache-cassandra-1.0.8$ ./bin/cqlsh
Python CQL driver not installed, or not on PYTHONPATH.
You might try “easy_install cql”.
Python: /usr/bin/python
Module load path: [‘/home/hbingol/Masa\xc3\xbcst\xc3\xbc/usr/java/apache-cassandra-1.0.8/bin/../pylib’, ‘/home/hbingol/Masa\xc3\xbcst\xc3\xbc/usr/java/apache-cassandra-1.0.8/bin’, ‘/usr/lib/python2.7’, ‘/usr/lib/python2.7/plat-linux2’, ‘/usr/lib/python2.7/lib-tk’, ‘/usr/lib/python2.7/lib-old’, ‘/usr/lib/python2.7/lib-dynload’, ‘/usr/local/lib/python2.7/dist-packages’, ‘/usr/lib/python2.7/dist-packages’, ‘/usr/lib/python2.7/dist-packages/PIL’, ‘/usr/lib/python2.7/dist-packages/gst-0.10’, ‘/usr/lib/python2.7/dist-packages/gtk-2.0’, ‘/usr/lib/python2.7/dist-packages/ubuntu-sso-client’, ‘/usr/lib/python2.7/dist-packages/ubuntuone-client’, ‘/usr/lib/python2.7/dist-packages/ubuntuone-control-panel’, ‘/usr/lib/python2.7/dist-packages/ubuntuone-couch’, ‘/usr/lib/python2.7/dist-packages/ubuntuone-installer’, ‘/usr/lib/python2.7/dist-packages/ubuntuone-storage-protocol’]
Error: No module named cql
Harun, tam olarak anlayamadım ancak şöyle çalıştırman gerekmez miydi:
$ cd ~/Masaüstü/usr/java/apache-cassandra-1.0.8/bin
$ ./cqlsh
Hocam yardımlarınız için teşekkür ederim hepsini gerçekleştirdim ..
güzel bir yazı olmuş
DataStax direk Ubuntu dağıtımı veriyor..
direk servis olarak başlatabilirsiniz. init.d scripti aramaya gerek yok.
ilgilenlere duyurulur.
Casandrayı Sıfırdan Eclipse Kurmayı Anlatırsanız Çok sevinirim
Hocam merhaba cassandra hbase gibi bir hadoop projesi midir? Hadoop ile tam ilişkisi nedir? entegresi vs gibi bir durum var mı? Birde dışarıdan bir yazılım için her seferinde map reduce yazmak gerekir mi? Hadoop örneklerinde hep bir jar komutuyla map reduce tanımı yapılıyor(yada ben öyle sanıyorum) teşekkürler
Merhaba ,
cassandra 3.7 kurdum.Localde çalışmak istiyorum.
cqlsh çalıştırdığımda aldığım hatayı paylaşıyorum.Hatayı nasıl düzeltebilirim.
Connection error: (‘Unable to connect to any servers’,
{‘127.0.0.1’: error(61, “Tried connecting to [(‘127.0.0.1’, 9042)]. Last error: Connection refused”)}
)