New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Storm and Titan Interop Problems #301
Comments
Ah! I'm not using one version of Kryo. When I run gremlin.sh, it's using the 2.21 version of Kryo. I'll try dropping in the 2.17 version of Kryo into the titan install. This implies that Kryo might have introduced a binary incompatibility between 2.17 and 2.21. |
That fixed the problem. |
Your analysis of both Kyro version configurations looks sound and complete to me. Is there anything else we can do on this issue? |
Thanks Dan! I'm not a seasoned Java developer. Is overwriting the JAR file an acceptable solution for me to use? For all I know Titan depends on something released in version 2.21 of Kryo (e.g. a performance improvement in Kryo). Was there a binary compatibility issue related to serialization introduced by Kryo between version 2.17 and 2.21? It might be nice to know how important binary compatibility is to Kryo because that could make staying current a pain for the fantastic folks developing Titan and potentially for Titan's users. Thanks again! |
@timjstewart Thanks for explaining everything. I had the same issue and I thought I forgot to implement Serializable in one of my classes in Storm but no. Rolling back to Kryo 2.17 in both sides solved the problem. |
@timjstewart , thanks for this analysis. We just ran into the same problem. Good work. |
Looks like this is resolved with a nice discussion and can be closed. Recommend closing. |
@timjstewart was there anything more to do here? i kinda lost track. |
Closing - pending specific feedback that we need to keep this open for something. |
Hello, I'm writing a Storm bolt that will insert data into a Titan graph backed by Cassandra (by DataStax, version ReleaseVersion: 1.2.5).
Titan Version: 0.3.1 (depends on Kryo version: 2.21)
Storm Version: 0.8.2 (depends on Kryo version: 2.17)
I think I have a Catch-22. I can either tell the build tool to use Titan's Kryo dependency or Storm's Kryo dependency. No matter what I do, I see a problem.
Use Titan's Kryo Dependency
First, when I specify that Titan's version of Kryo should be used (version 2.21), I get the following stack trace when I run my Storm topology:
Storm's DefaultKryoFactory defines a nested class named KryoSerializableDefault which extends Kryo. DefaultKryoFactory calls Kryo's setReferences method.
Kryo's setReferences method currently has the following signature:
On August 17, 2012 nathan.sweet checked in a change that changed the return type of setReferences to boolean.
You'll note that the stack trace above shows the missing method to be:
where the V stands for void and Z stands for boolean (see here for more details on type codes).
Use Storm's Kryo Dependency
When I use Storm's Kryo dependency (version 2.17), drop the titan keyspace in cassandra-cli, and then run my Storm topology, every thing seems to work fine at first but then when I want to view my database with gremlin, I start having problems:
I start up gremlin and enter the following:
So far, everything works great. So I want to see how many vertices I have:
And I get this:
I hit Y to see the stack trace and I get this:
This is where I get confused. If we're just using one version of Kryo, then you'd think that we would be able to read anything we had written (unless there was a bug in Kryo).
Do you know of any workarounds, or fixes I could employ here?
Thanks!
Tim Stewart
The text was updated successfully, but these errors were encountered: