cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Apache Wiki <>
Subject [Cassandra Wiki] Update of "FAQ" by JonathanEllis
Date Fri, 06 Sep 2013 02:52:15 GMT
Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Cassandra Wiki" for change notification.

The "FAQ" page has been changed by JonathanEllis:

clean out obsolete questions

  = Frequently asked questions =
   * [[#cant_listen_on_ip_any|Why can't I make Cassandra listen on (all my addresses)?]]
   * [[#ports|What ports does Cassandra use?]]
-  * [[#slows_down_after_lotso_inserts|Why does Cassandra slow down after doing a lot of inserts?]]
   * [[#existing_data_when_adding_new_nodes|What happens to existing data in my cluster when
I add new nodes?]]
-  * [[#node_clients_connect_to|Does it matter which node a Thrift or higher-level client
connects to?]]
   * [[#what_kind_of_hardware_should_i_use|What kind of hardware should I run Cassandra on?]]
   * [[#architecture|What are SSTables and Memtables?]]
   * [[#working_with_timeuuid_in_java|Why is it so hard to work with TimeUUIDType in Java?]]
   * [[#i_deleted_what_gives|I delete data from Cassandra, but disk usage stays the same.
What gives?]]
   * [[#cloned|Why does nodetool ring only show one entry, even though my nodes logged that
they see each other joining the ring?]]
-  * [[#range_ghosts|Why do deleted keys show up during range scans?]]
   * [[#change_replication|Can I change the ReplicationFactor on a live cluster?]]
   * [[#large_file_and_blob_storage|Can I store large files or BLOBs in Cassandra?]]
   * [[#jmx_localhost_refused|Nodetool says "Connection refused to host:" for any
remote host. What gives?]]
   * [[#iter_world|How can I iterate over all the rows in a ColumnFamily?]]
-  * [[#no_keyspaces|Why were none of the keyspaces described in storage-conf.xml loaded?]]
   * [[#gui|Is there a GUI admin tool for Cassandra?]]
   * [[#clustername_mismatch|Cassandra says "ClusterName mismatch: oldClusterName != newClusterName"
and refuses to start]]
   * [[#batch_mutate_atomic|Are batch_mutate operations atomic?]]
@@ -28, +24 @@

   * [[#rhel_selinux|Problems using on RHEL?]]
   * [[#auth|Is there an authentication/authorization mechanism for Cassandra?]]
   * [[#bulkloading|How do I bulk load data into Cassandra?]]
-  * [[#range_rp|Why aren't range slices/sequential scans giving me the expected results?]]
   * [[#unsubscribe|How do I unsubscribe from the email list?]]
   * [[#mmap|Why does top report that Cassandra is using a lot more memory than the Java heap
   * [[#jna|I'm getting Cannot run program "ln" when trying to snapshot
or update a keyspace]]
@@ -41, +36 @@

   * [[#ubuntu_hangs|I'm using Ubuntu with JNA, and holy crap weird things keep hanging and
stalling and printing scary tracebacks in dmesg!]]
   * [[#schema_disagreement|What are schema disagreement errors and how do I fix them?]]
   * [[#dropped_messages|Why do I see "... messages dropped.." in the logs?]]
-  * [[#cli_keys|Why does the 0.8 cli not assume keys are strings anymore?]]
   * [[#memlock|Cassandra dies with "java.lang.OutOfMemoryError: Map failed"]]
   * [[#opp|Why should I avoid order-preserving partitioners?]]
   * [[#clocktie|What happens if two updates are made with the same timestamp?]]
@@ -62, +56 @@

  == What ports does Cassandra use? ==
  By default, Cassandra uses 7000 for cluster communication (7001 if SSL is enabled), 9160
for clients (Thrift), and 7199 for [[JmxInterface|JMX]].  The internode communication and
Thrift ports are configurable in cassandra.yaml, and the JMX port is configurable in
(through JVM options). All ports are TCP. See also RunningCassandra.
- <<Anchor(slows_down_after_lotso_inserts)>>
- == Why does Cassandra slow down after doing a lot of inserts? ==
- This is a symptom of memory pressure, resulting in a storm of GC operations as the JVM frantically
tries to free enough heap to continue to operate.  Eventually, the server will crash from
OutOfMemory; usually, but not always, it will be able to log this final error before the JVM
- You can increase the amount of memory the JVM uses, or decrease the insert threshold before
Cassandra flushes its memtables.  See MemtableThresholds for details.
- Setting your cache sizes too large can result in memory pressure.
  == What happens to existing data in my cluster when I add new nodes? ==
  When a new nodes joins a cluster, it will automatically contact the other nodes in the cluster
and copy the right data to itself.
- In general, you should set the `initial_token` config option in cassandra.yaml before starting
a new node. Otherwise, a suboptimal token may be selected automatically, leading to an unbalanced
ring.  See [[Operations#Token_selection|token selection]] in the operations wiki.
- <<Anchor(node_clients_connect_to)>>
- == Does it matter which node a Thrift or higher-level client connects to? ==
- No, any node in the cluster will work; Cassandra nodes proxy your request as needed. This
leaves the client with a number of options for end point selection:
-  1. You can maintain a list of contact nodes (all or a subset of the nodes in the cluster),
and configure your clients to choose among them.
-  1. Use round-robin DNS and create a record that points to a set of contact nodes (recommended).
-  1. Use the `describe_ring(keyspace)` Thrift RPC call to obtain an update-to-date list of
the nodes in the cluster and cycle through them.
-  1. Deploy a load-balancer, proxy, etc.
- When using a higher-level client you should investigate which, if any, options are implemented
by your higher-level client to help you distribute your requests across nodes in a cluster.
  == What kind of hardware should I run Cassandra on? ==
@@ -98, +69 @@

  == What are SSTables and Memtables? ==
- See [[MemtableSSTable]] and MemtableThresholds.
+ See [[MemtableSSTable]].
@@ -209, +180 @@

  The easiest fix is to wipe the data and commitlog directories, thus making sure that each
node will generate a random token on the next restart.
- <<Anchor(range_ghosts)>>
- == Why do deleted keys show up during range scans? ==
- Because get_range_slice says, "apply this predicate to the range of rows given," meaning,
if the predicate result is empty, we have to include an empty result for that row key.  It
is perfectly valid to perform such a query returning empty column lists for some or all keys,
even if no deletions have been performed.
- So to special case leaving out result entries for deletions, we would have to check the
entire rest of the row to make sure there is no undeleted data anywhere else either (in which
case leaving the key out would be an error).
- This is what we used to do with the old get_key_range method, but the performance hit turned
out to be unacceptable.
- See DistributedDeletes for more on how deletes work in Cassandra.
  == Can I change the ReplicationFactor on a live cluster? ==
@@ -256, +216 @@

  == How can I iterate over all the rows in a ColumnFamily? ==
- Simple but slow: Use get_range_slices, start with the empty string, and after each call
use the last key read as the start key in the next iteration.
+ Use a CQL client ([ClientOptions]) and Cassandra 2.0.  The cursor support in 2.0 means you
can just write "SELECT * FROM foo" and paging through the resultset will be handled automatically.
+ Alternatively, you may with to use HadoopSupport.
- Most clients support an easy way to do this.  For example, [[|pycassa's
get_range()]], and [[|phpcassa's
get_range()]] return an iterator that fetches the next batch of rows automatically.  Hector
has an [[|example
of how to do this]].
- Better: use HadoopSupport.
- <<Anchor(no_keyspaces)>>
- == Why were none of the keyspaces described in storage-conf.xml loaded? ==
- Prior to 0.7, cassandra loaded a set of static keyspaces defined in a storage-conf.xml file.
 [[|CASSANDRA-44]] added the ability to
modify schema dynamically on a live cluster.  Part of this change required that we ignore
the schema defined in storage-conf.xml.  Additionally, 0.7 converts to YAML based configuration.
- If you have an existing storage-conf.xml file, you will first need to convert it to YAML
using the `bin/config-converter` tool, which can generate a cassandra.yaml file from a storage-conf.xml
file.  Once you have a cassandra.yaml, it is possible to do a one-time load of the schema
it defines.  0.7 adds a `loadSchemaFromYAML` method to `StorageServiceMBean` (triggered via
JMX: see ) which will load the schema
defined in cassandra.yaml, but this is a one-time operation.  A node that has had its schema
defined via `loadSchemaFromYAML` will load its schema from the system table on subsequent
restarts, which means that any further changes to the schema need to be made using the `system_*`
thrift operations (see [[API]]).
- It is recommended that you only perform schema updates on one node and let cassandra propagate
changes to the rest of the cluster.  If you try to perform the same updates simultaneously
on multiple nodes, you run the risk of introducing inconsistent migrations, which will lead
to a confused cluster.
- See LiveSchemaUpdates for more information.
  == Is there a GUI admin tool for Cassandra? ==
   * [[|DataStax Opscenter]], a management and monitoring
tool for Cassandra with a web-based UI.
-  * [[|cassandra-gui]], a Swing data browser.
   * [[|Cassandra Cluster Admin]], a PHP-based
web UI.
   * [[ | Toad for Cloud Databases]], a desktop application and Eclipse
plugin which support Cassandra.
   * [[ | DBeaver]], a desktop application, support Cassandra using
JDBC driver.
@@ -302, +248 @@

  == Are batch_mutate operations atomic? ==
- As a special case, mutations against a single key are atomic but not isolated. Reads which
occur during such a mutation may see part of the write before they see the whole thing. More
generally, batch_mutate operations are not atomic. [[API#batch_mutate|batch_mutate]] allows
grouping operations on many keys into a single call in order to save on the cost of network
round-trips. If `batch_mutate` fails in the middle of its list of mutations, no rollback occurs
and the mutations that have already been applied stay applied. The client should typically
retry the `batch_mutate` operation.
+ Since Cassandra 1.2, CQL batches are atomic by default (
 Thrift API users must call atomic_batch_mutate instead of batch_mutate if they want this
@@ -317, +264 @@

  == Who is using Cassandra and for what? ==
- See CassandraUsers.
+ See
  == Are there any OBDC drivers for Cassandra? ==
- No.
+ Yes:
@@ -332, +280 @@

  == On RHEL nodes are unable to join the ring ==
- Check if selinux is on, if it is turn it OFF
+ Check if selinux is on; if it is, turn it OFF.
@@ -343, +291 @@

  == How do I bulk load data into Cassandra? ==
  See BulkLoading
- <<Anchor(range_rp)>>
- == Why aren't range slices/sequential scans giving me the expected results? ==
- You're probably using the RandomPartitioner.  This is the default because it avoids hotspots,
but it means your rows are ordered by the md5 of the row key rather than lexicographically
by the raw key bytes.
- You '''can''' start out with a start key and end key of [empty] and use the row count argument
instead, if your goal is paging the rows.  To get the next page, start from the last key you
got in the previous page. This is what the Cassandra Hadoop RecordReader does, for instance.
- You can also use intra-row ordering of column names to get ordered results '''within'''
a row; with appropriate row 'bucketing,' you often don't need the rows themselves to be ordered.
@@ -413, +352 @@

  == Does single seed mean single point of failure? ==
- If you are using replicated CF on the ring, only one seed in the ring doesn't mean single
point of failure. The ring can operate or boot without the seed. However, it will need more
time to spread status changes of node over the ring. It is recommended to have multiple seeds
in production system.
+ The ring can operate or boot without a seed; however, you will not be able to add new nodes
to the cluster. It is recommended to configure multiple seeds in production system.
@@ -486, +425 @@

  == Why do I see "... messages dropped.." in the logs? ==
+ This is a symptom of load shedding -- Cassandra defending itself against more requests than
it can handle.
  Internode messages which are received by a node, but do not get not to be processed within
rpc_timeout are dropped rather than processed. As the coordinator node will no longer be waiting
for a response. If the Coordinator node does not receive Consistency Level responses before
the rpc_timeout it will return a !TimedOutException to the client. If the coordinator receives
Consistency Level responses it will return success to the client.
  For MUTATION messages this means that the mutation was not applied to all replicas it was
sent to. The inconsistency will be repaired by Read Repair or Anti Entropy Repair.
@@ -493, +434 @@

  For READ messages this means a read request may not have completed.
  Load shedding is part of the Cassandra architecture, if this is a persistent issue it is
generally a sign of an overloaded node or cluster.
- <<Anchor(cli_keys)>>
- == Why does the 0.8 cli not assume keys are strings anymore? ==
- Prior to 0.8, there was no type metadata available for row keys, and the cli interface treated
all keys as strings.  This made the cli unusable for the many applications whose rows were
numeric, uuids, or other non-string data.
- 0.8 added key_validation_class to the !ColumnFamily definition, similarly to the existing
comparator for column names, and column_metadata validation_class for column values.  This
both lets clients know the expected data type, and rejects updates with non-conformant values.
- To preserve application compatibility, the default key_validation_class is BytesType, i.e.,
"anything goes."  The CLI expects bytes to be provided in hex.
- If all your keys are of the same type, you should add information to the CF metadata, e.g.,
"update column family <cf> with key_validation_class = 'UTF8Type'".  If you have heterogeneous
keys, you can tell the cli what type to use on case-by-case basis, as in, "assume <cf>
keys as utf8".
  == Cassandra dies with "java.lang.OutOfMemoryError: Map failed" ==

View raw message