Finding nodes that own a given token/partition key
Hey all, In certain cases it would be useful for us to find out which node(s) have the data for a given token/partition key. The only solutions I'm aware of is to select from system.local and/or system.peers to grab the host_id and tokens, do `SELECT token(thing) FROM myks.mytable WHERE thing = 'value';`, then do the math (put the ring together) and figure out which node has the data. I'm assuming this is what token aware drivers are doing. Is there a simpler way to do this? A bit more context: we'd like to move some processing closer to data, but for a few reasons hadoop/spark aren't good options for the moment.
Re: Finding nodes that own a given token/partition key
Thanks guys, think both of these answer my question. Guess I had overlooked nodetool getendpoints. Hopefully findable by future googlers now. On Thu, Mar 26, 2015 at 2:37 PM, Adam Holmberg adam.holmb...@datastax.com wrote: Dan, Depending on your context, many of the DataStax drivers have the token ring exposed client-side. For example, Python: http://datastax.github.io/python-driver/api/cassandra/metadata.html#tokens-and-ring-topology Java: http://www.datastax.com/drivers/java/2.1/com/datastax/driver/core/Metadata.html You may not have to construct this yourself. Adam Holmberg On Thu, Mar 26, 2015 at 3:53 PM, Roman Tkachenko ro...@mailgunhq.com wrote: Hi Dan, Have you tried using nodetool getendpoints? It shows you nodes that currently own the specific key. Roman On Thu, Mar 26, 2015 at 1:21 PM, Dan Kinder dkin...@turnitin.com wrote: Hey all, In certain cases it would be useful for us to find out which node(s) have the data for a given token/partition key. The only solutions I'm aware of is to select from system.local and/or system.peers to grab the host_id and tokens, do `SELECT token(thing) FROM myks.mytable WHERE thing = 'value';`, then do the math (put the ring together) and figure out which node has the data. I'm assuming this is what token aware drivers are doing. Is there a simpler way to do this? A bit more context: we'd like to move some processing closer to data, but for a few reasons hadoop/spark aren't good options for the moment. -- Dan Kinder Senior Software Engineer Turnitin – www.turnitin.com dkin...@turnitin.com
Re: Finding nodes that own a given token/partition key
Dan, Depending on your context, many of the DataStax drivers have the token ring exposed client-side. For example, Python: http://datastax.github.io/python-driver/api/cassandra/metadata.html#tokens-and-ring-topology Java: http://www.datastax.com/drivers/java/2.1/com/datastax/driver/core/Metadata.html You may not have to construct this yourself. Adam Holmberg On Thu, Mar 26, 2015 at 3:53 PM, Roman Tkachenko ro...@mailgunhq.com wrote: Hi Dan, Have you tried using nodetool getendpoints? It shows you nodes that currently own the specific key. Roman On Thu, Mar 26, 2015 at 1:21 PM, Dan Kinder dkin...@turnitin.com wrote: Hey all, In certain cases it would be useful for us to find out which node(s) have the data for a given token/partition key. The only solutions I'm aware of is to select from system.local and/or system.peers to grab the host_id and tokens, do `SELECT token(thing) FROM myks.mytable WHERE thing = 'value';`, then do the math (put the ring together) and figure out which node has the data. I'm assuming this is what token aware drivers are doing. Is there a simpler way to do this? A bit more context: we'd like to move some processing closer to data, but for a few reasons hadoop/spark aren't good options for the moment.
Re: Finding nodes that own a given token/partition key
Hi Dan, Have you tried using nodetool getendpoints? It shows you nodes that currently own the specific key. Roman On Thu, Mar 26, 2015 at 1:21 PM, Dan Kinder dkin...@turnitin.com wrote: Hey all, In certain cases it would be useful for us to find out which node(s) have the data for a given token/partition key. The only solutions I'm aware of is to select from system.local and/or system.peers to grab the host_id and tokens, do `SELECT token(thing) FROM myks.mytable WHERE thing = 'value';`, then do the math (put the ring together) and figure out which node has the data. I'm assuming this is what token aware drivers are doing. Is there a simpler way to do this? A bit more context: we'd like to move some processing closer to data, but for a few reasons hadoop/spark aren't good options for the moment.