JanusGraph,Spark 集群无法连接到 Cassandra
JanusGraph, Spark cluster failing to connect to Cassandra
我正在尝试 运行 在创建 JanusGraph 的集群上执行 Spark 作业。
我在一台机器上有一个 JanusGraph 服务器、Cassandra、ES 运行ning 实例,只有 Spark 计算发生在集群上。 (基本上我在机器上做了一个janusgraph.sh start
我的配置如下(x是我运行上面实例所在机器的IP):
def getGraph(): JanusGraph = {
val config = JanusGraphFactory.build()
config.set("storage.backend", "cassandrathrift")
config.set("storage.cassandrathrift.keyspace", "jgex")
config.set("storage.hostname", "x")
config.set("index.jgex.backend", "elasticsearch")
config.set("index.jgex.index-name", "jgex")
config.set("jgex.hostname", "x")
config.open()
}
但是当我对集群上的 fat jar 执行 spark-submit
时,我得到了这个:
java.lang.IllegalArgumentException: Could not instantiate implementation: org.janusgraph.diskstorage.cassandra.thrift.CassandraThriftStoreManager
at org.janusgraph.util.system.ConfigurationUtil.instantiate(ConfigurationUtil.java:69)
at org.janusgraph.diskstorage.Backend.getImplementationClass(Backend.java:477)
at org.janusgraph.diskstorage.Backend.getStorageManager(Backend.java:409)
at org.janusgraph.graphdb.configuration.GraphDatabaseConfiguration.<init>(GraphDatabaseConfiguration.java:1376)
at org.janusgraph.core.JanusGraphFactory.open(JanusGraphFactory.java:164)
at org.janusgraph.core.JanusGraphFactory.open(JanusGraphFactory.java:133)
at org.janusgraph.core.JanusGraphFactory.open(JanusGraphFactory.java:123)
at org.janusgraph.core.JanusGraphFactory$Builder.open(JanusGraphFactory.java:264)
at janus_create$.getGraph(janus_create.scala:66)
at janus_create$.makePropertiesandIndexes(janus_create.scala:830)
at janus_create$.main(janus_create.scala:921)
at janus_create.main(janus_create.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.spark.deploy.yarn.ApplicationMaster$$anon.run(ApplicationMaster.scala:627)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.janusgraph.util.system.ConfigurationUtil.instantiate(ConfigurationUtil.java:58)
... 16 more
Caused by: org.janusgraph.diskstorage.TemporaryBackendException: Temporary failure in storage backend
at org.janusgraph.diskstorage.cassandra.thrift.CassandraThriftStoreManager.getCassandraPartitioner(CassandraThriftStoreManager.java:219)
at org.janusgraph.diskstorage.cassandra.thrift.CassandraThriftStoreManager.<init>(CassandraThriftStoreManager.java:198)
... 21 more
Caused by: org.apache.thrift.transport.TTransportException: java.net.ConnectException: Connection refused (Connection refused)
at org.apache.thrift.transport.TSocket.open(TSocket.java:187)
at org.apache.thrift.transport.TFramedTransport.open(TFramedTransport.java:81)
at org.janusgraph.diskstorage.cassandra.thrift.thriftpool.CTConnectionFactory.makeRawConnection(CTConnectionFactory.java:110)
at org.janusgraph.diskstorage.cassandra.thrift.thriftpool.CTConnectionFactory.makeObject(CTConnectionFactory.java:74)
at org.janusgraph.diskstorage.cassandra.thrift.thriftpool.CTConnectionFactory.makeObject(CTConnectionFactory.java:43)
at org.apache.commons.pool.impl.GenericKeyedObjectPool.borrowObject(GenericKeyedObjectPool.java:1179)
at org.janusgraph.diskstorage.cassandra.thrift.CassandraThriftStoreManager.getCassandraPartitioner(CassandraThriftStoreManager.java:216)
... 22 more
Caused by: java.net.ConnectException: Connection refused (Connection refused)
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at org.apache.thrift.transport.TSocket.open(TSocket.java:182)
... 28 more
我尝试在 cassandra 和 cassandrathrift 之间切换,但都没有用。另外,我在哪里指定我的 gremlin 在哪里 运行ning。这相关吗?
预先打包的分发假定每个 Cassandra、Elasticsearch 和 Gremlin 服务器都有一个本地主机节点。请注意堆栈跟踪底部的 java.net.ConnectException: Connection refused
。如果您在远程集群上安装了 Spark 运行,则需要确保服务器在非本地主机地址上可用。
- 先用
bin/janusgraph.sh stop
停止分发
使用机器的IP地址更新$JANUSGRAPH_HOME/conf/cassandra/cassandra.yaml
中的listen_address
和rpc_address
(Cassandra docs)
使用机器的IP地址(Elasticsearch docs)将network.host
添加到$JANUSGRAPH_HOME/elasticsearch/config/elasticsearch.yml
使用机器的 IP 地址更新 $JANUSGRAPH_HOME/conf/gremlin-server/gremlin-server.yaml
中的 host
(JanusGraph docs)
假设您正在使用默认的 Gremlin 服务器配置 gremlin-server.yaml
,您需要使用机器的 IP 地址更新 $JANUSGRAPH_HOME/conf/gremlin-server/janusgraph-cassandra-es-server.properties
中的属性文件。使用机器的 IP 地址更新 storage.hostname
和 index.search.hostname
,匹配上面的服务器设置。
更新:您的图形连接属性中似乎存在可能导致问题的错误:
config.set("storage.cassandrathrift.keyspace", "jgex")
-- 应该是 "storage.cassandra.keyspace"
config.set("jgex.hostname", "x")
-- 应该是 "index.jgex.hostname"
我正在尝试 运行 在创建 JanusGraph 的集群上执行 Spark 作业。
我在一台机器上有一个 JanusGraph 服务器、Cassandra、ES 运行ning 实例,只有 Spark 计算发生在集群上。 (基本上我在机器上做了一个janusgraph.sh start
我的配置如下(x是我运行上面实例所在机器的IP):
def getGraph(): JanusGraph = {
val config = JanusGraphFactory.build()
config.set("storage.backend", "cassandrathrift")
config.set("storage.cassandrathrift.keyspace", "jgex")
config.set("storage.hostname", "x")
config.set("index.jgex.backend", "elasticsearch")
config.set("index.jgex.index-name", "jgex")
config.set("jgex.hostname", "x")
config.open()
}
但是当我对集群上的 fat jar 执行 spark-submit
时,我得到了这个:
java.lang.IllegalArgumentException: Could not instantiate implementation: org.janusgraph.diskstorage.cassandra.thrift.CassandraThriftStoreManager
at org.janusgraph.util.system.ConfigurationUtil.instantiate(ConfigurationUtil.java:69)
at org.janusgraph.diskstorage.Backend.getImplementationClass(Backend.java:477)
at org.janusgraph.diskstorage.Backend.getStorageManager(Backend.java:409)
at org.janusgraph.graphdb.configuration.GraphDatabaseConfiguration.<init>(GraphDatabaseConfiguration.java:1376)
at org.janusgraph.core.JanusGraphFactory.open(JanusGraphFactory.java:164)
at org.janusgraph.core.JanusGraphFactory.open(JanusGraphFactory.java:133)
at org.janusgraph.core.JanusGraphFactory.open(JanusGraphFactory.java:123)
at org.janusgraph.core.JanusGraphFactory$Builder.open(JanusGraphFactory.java:264)
at janus_create$.getGraph(janus_create.scala:66)
at janus_create$.makePropertiesandIndexes(janus_create.scala:830)
at janus_create$.main(janus_create.scala:921)
at janus_create.main(janus_create.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.spark.deploy.yarn.ApplicationMaster$$anon.run(ApplicationMaster.scala:627)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.janusgraph.util.system.ConfigurationUtil.instantiate(ConfigurationUtil.java:58)
... 16 more
Caused by: org.janusgraph.diskstorage.TemporaryBackendException: Temporary failure in storage backend
at org.janusgraph.diskstorage.cassandra.thrift.CassandraThriftStoreManager.getCassandraPartitioner(CassandraThriftStoreManager.java:219)
at org.janusgraph.diskstorage.cassandra.thrift.CassandraThriftStoreManager.<init>(CassandraThriftStoreManager.java:198)
... 21 more
Caused by: org.apache.thrift.transport.TTransportException: java.net.ConnectException: Connection refused (Connection refused)
at org.apache.thrift.transport.TSocket.open(TSocket.java:187)
at org.apache.thrift.transport.TFramedTransport.open(TFramedTransport.java:81)
at org.janusgraph.diskstorage.cassandra.thrift.thriftpool.CTConnectionFactory.makeRawConnection(CTConnectionFactory.java:110)
at org.janusgraph.diskstorage.cassandra.thrift.thriftpool.CTConnectionFactory.makeObject(CTConnectionFactory.java:74)
at org.janusgraph.diskstorage.cassandra.thrift.thriftpool.CTConnectionFactory.makeObject(CTConnectionFactory.java:43)
at org.apache.commons.pool.impl.GenericKeyedObjectPool.borrowObject(GenericKeyedObjectPool.java:1179)
at org.janusgraph.diskstorage.cassandra.thrift.CassandraThriftStoreManager.getCassandraPartitioner(CassandraThriftStoreManager.java:216)
... 22 more
Caused by: java.net.ConnectException: Connection refused (Connection refused)
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at org.apache.thrift.transport.TSocket.open(TSocket.java:182)
... 28 more
我尝试在 cassandra 和 cassandrathrift 之间切换,但都没有用。另外,我在哪里指定我的 gremlin 在哪里 运行ning。这相关吗?
预先打包的分发假定每个 Cassandra、Elasticsearch 和 Gremlin 服务器都有一个本地主机节点。请注意堆栈跟踪底部的 java.net.ConnectException: Connection refused
。如果您在远程集群上安装了 Spark 运行,则需要确保服务器在非本地主机地址上可用。
- 先用
bin/janusgraph.sh stop
停止分发 使用机器的IP地址更新
$JANUSGRAPH_HOME/conf/cassandra/cassandra.yaml
中的listen_address
和rpc_address
(Cassandra docs)使用机器的IP地址(Elasticsearch docs)将
network.host
添加到$JANUSGRAPH_HOME/elasticsearch/config/elasticsearch.yml
使用机器的 IP 地址更新
$JANUSGRAPH_HOME/conf/gremlin-server/gremlin-server.yaml
中的host
(JanusGraph docs)假设您正在使用默认的 Gremlin 服务器配置
gremlin-server.yaml
,您需要使用机器的 IP 地址更新$JANUSGRAPH_HOME/conf/gremlin-server/janusgraph-cassandra-es-server.properties
中的属性文件。使用机器的 IP 地址更新storage.hostname
和index.search.hostname
,匹配上面的服务器设置。
更新:您的图形连接属性中似乎存在可能导致问题的错误:
config.set("storage.cassandrathrift.keyspace", "jgex")
-- 应该是"storage.cassandra.keyspace"
config.set("jgex.hostname", "x")
-- 应该是"index.jgex.hostname"