我在 gremlin 控制台中收到此错误
cegprakash@cegprakash:~/workspace/janusgraph-0.2.1-hadoop2$ ./bin/gremlin.sh
\,,,/
(o o)
-----oOOo-(3)-oOOo-----
plugin activated: janusgraph.imports
plugin activated: tinkerpop.server
plugin activated: tinkerpop.utilities
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/cegprakash/workspace/janusgraph-0.2.1-hadoop2/lib/slf4j-log4j12-1.7.12.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/cegprakash/workspace/janusgraph-0.2.1-hadoop2/lib/logback-classic-1.1.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
19:10:12 WARN org.apache.hadoop.util.NativeCodeLoader - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
plugin activated: tinkerpop.hadoop
plugin activated: tinkerpop.spark
plugin activated: tinkerpop.tinkergraph
gremlin> def graph=ConfiguredGraphFactory.create("mygraph")
org.janusgraph.graphdb.management.utils.ConfigurationManagementGraphNotEnabledException: Please add …Run Code Online (Sandbox Code Playgroud) 我有两个问题:
我在哪里可以找到 GraphSON 文件的基本格式,保证 gremlin 控制台成功加载?我正在尝试将 JSON(大约有 10-20 个字段)转换为另一个可以由 gremlin 查询的文件,但我实际上无法找到有关 graphson 格式保留的字段的任何相关信息,或者我应该如何处理 ID等等。我导出了他们提供的现代图形,它甚至不是一个有效的 JSON(多个 JSON 根元素),而是一个 JSON 列表 [1] 我还看到了像 outE、inE 这样的字段...创建?
如果我能够创建 JSON,那么在我启动它时,我应该在哪里告诉服务器将它加载为基础图?在配置文件中还是在脚本中?
谢谢!阿德里安
[1] https://pastebin.com/drwXhg5k
{"id":1,"label":"person","outE":{"created":[{"id":9,"inV":3,"properties":{"weight":0.4}}],"knows":[{"id":7,"inV":2,"properties":{"weight":0.5}},{"id":8,"inV":4,"properties":{"weight":1.0}}]},"properties":{"name":[{"id":0,"value":"marko"}],"age":[{"id":1,"value":29}]}}
{"id":2,"label":"person","inE":{"knows":[{"id":7,"outV":1,"properties":{"weight":0.5}}]},"properties":{"name":[{"id":2,"value":"vadas"}],"age":[{"id":3,"value":27}]}}
{"id":3,"label":"software","inE":{"created":[{"id":9,"outV":1,"properties":{"weight":0.4}},{"id":11,"outV":4,"properties":{"weight":0.4}},{"id":12,"outV":6,"properties":{"weight":0.2}}]},"properties":{"name":[{"id":4,"value":"lop"}],"lang":[{"id":5,"value":"java"}]}}
{"id":4,"label":"person","inE":{"knows":[{"id":8,"outV":1,"properties":{"weight":1.0}}]},"outE":{"created":[{"id":10,"inV":5,"properties":{"weight":1.0}},{"id":11,"inV":3,"properties":{"weight":0.4}}]},"properties":{"name":[{"id":6,"value":"josh"}],"age":[{"id":7,"value":32}]}}
{"id":5,"label":"software","inE":{"created":[{"id":10,"outV":4,"properties":{"weight":1.0}}]},"properties":{"name":[{"id":8,"value":"ripple"}],"lang":[{"id":9,"value":"java"}]}}
{"id":6,"label":"person","outE":{"created":[{"id":12,"inV":3,"properties":{"weight":0.2}}]},"properties":{"name":[{"id":10,"value":"peter"}],"age":[{"id":11,"value":35}]}}
Run Code Online (Sandbox Code Playgroud) 我正在添加这样的顶点:
g.addV("foobar").property("id", 1).property(...etc...
如何使用 uuid 而不是整数 id 设置属性?
我刚刚启动 JanusGraph,我的总 RAM 使用量超过 5GB,没有触发任何查询。我有以下依赖服务正在运行
我试图找出 janusgraph 的最低系统要求,但我无法在其文档中找到它。任何人都有相同的链接?或者知道最低系统要求是多少?
是否还有任何配置更改以使其消耗更少的 RAM?
我正在为我的 janusGraph 数据库使用 Docker 实例,并且非常具体;我使用以下 Docker 映像: https://github.com/sunside/janusgraph-docker
图像工作正常,除非我删除此 groovy 文件中的第 12 行:https://github.com/sunside/janusgraph-docker/blob/master/janusgraph/empty-sample.groovy其中包含以下内容:
graph.io(graphml()).readGraph('data/air-routes-small.graphml')
Run Code Online (Sandbox Code Playgroud)
如果我尝试使用 gremlin python 从数据库中选择任何顶点,在删除前面提到的行后,我会收到以下错误:
gremlin_python.driver.protocol.GremlinServerError: 499: The traversal source [g] for alias [g] is not configured on the server.
Run Code Online (Sandbox Code Playgroud)
因此,如果不导入任何现有数据,它就不起作用。但我想从一个空数据库开始,而不是现有数据库,这就是我不想导入 .graphml 文件的原因。但我想我仍然需要以某种方式初始化一个空数据库,有什么想法吗?
在我们的图中,有很多顶点的输出边超过 100k。我想知道处理由此产生的所有情况的方法是什么。
假设我们group_1在图中定义了一个。group_1有 100k members。我们有一些从member_x顶点开始的遍历并计算一些东西。这些遍历非常快,每次都在大约 2 秒内结束。
但是时代变了,现在我们需要将单个小遍历的所有结果汇总为一个数字。遍历必须包含来自group_1's 成员的所有结果。
最初,我们的方法是创建其发射一束遍历members_x通过使用skip和limit,然后,在应用层上采用并行处理,计数的我们的东西的总和。但是,这种方法几乎没有问题:
g.V().has('group',y).out('member_of').skip(0).limit(10)- 根据文档,这种遍历每次可以返回不同的结果。所以以这种方式创建包是不正确的g.V().has('group',y).out('member_of').skip(100_000).limit(10) 花费太长时间,因为正如我们发现的那样,数据库仍然需要访问 100k 个顶点因此,我们的下一个方法是存储一个遍历,该遍历会发出束,members然后在单独的线程中执行并行遍历,这些遍历对先前获取的成员进行计数:
while(is_not_the_end) {
List<Members> members = g.V().has('group',y).out('member_of').next(100)`
addMembersToExecutorThread(members) // done in async way
}
Run Code Online (Sandbox Code Playgroud)
那么,当你遇到这样的场景时,有什么方法呢?基本上,如果可以找到一种方法来快速获取某个顶点的所有祖先,我们就可以解决该问题。在我们的例子中,这将是一个group_1. 但是仅仅通过使用g.V().has('group',y).out('member_of').properties('members_id').
有没有办法解决这个问题?或者我们应该尝试在 GraphComputer 上执行这样的查询?
我在我的 Java 后端使用嵌入式 janusgraph 我的代码取决于从 graph = JanusGraphFactory.open(conf)
AFAIK 这直接连接到 Cassandra 和弹性搜索,并在我的后端应用程序 JVM 中运行 janusgraph 处理器。但是如果我想扩展 janusgraph,我需要在集群上运行单独的 janusgraph 服务器,并且需要作为客户端从我的后端连接到这些服务器。
根据github上的远程 janusgraph 示例,这是通过实例化一个 EmptyGraph 来完成的,该 EmptyGraphgraph = EmptyGraph.instance();不是 JanusGraph 的实例,而是 org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph;.
我可以从上面的示例中了解到,我只能通过将 gremlin 查询提交给 janusgraph 服务器来使用它们,但是除非将代码作为字符串提交给服务器,否则我将无法直接使用管理 API。
最后,我可以理解,单独运行 janusgraph 服务器对可扩展性更好,但我将无法在我的代码中直接访问 janusgraph api,所以我想知道我是否理解了一些我想念的 内容以及远程部署方法的优缺点和嵌入式方法相比我会失去什么?
编辑:
根据这个答案 纠正它,如果错了:
连接到远程 gremlin 服务器的优缺点
优点
缺点
我想向一个顶点添加多个属性,但从一开始就没有明确知道这些属性可能是什么。例如,假设将一个人作为顶点添加到图中,我们有以下属性字典:
人 1
{
"id": 1,
"first_name": "bob",
"age": 25,
"height": 177
}
Run Code Online (Sandbox Code Playgroud)
也许要添加另一个顶点,一个人具有以下属性:
人 2
{
"id": 2,
"first_name": "joe",
"surname": "bloggs",
"occupation": "lawyer",
"birthday": "12 September"
}
Run Code Online (Sandbox Code Playgroud)
有没有办法将两个人都添加到图中,而无需将属性键和值显式硬编码到 Gremlin属性函数中?
此链接提供了正确方向的答案。可在此处找到更多有用信息。以下行反映了建议的解决方案,按预期执行,并将新顶点添加到图中。伟大的。
g.addV("person").property("id", 1, "first_name", "bob", "age", 25, "height", 177).next()
Run Code Online (Sandbox Code Playgroud)
但是,它仅在输入是硬编码的情况下才寻求工作。我已将属性字典转换为 (k1, v1, k2, v2, ..., kn, vn) 形式的值元组,但我无法以编程方式传递值。例如
tup_vals = ("id", 1, "first_name", "bob", "age", 25, "height", 177)
Run Code Online (Sandbox Code Playgroud)
但无论出于何种原因,我都不能打电话:
g.addV("person").property(*tup_vals).next()
Run Code Online (Sandbox Code Playgroud)
上面的行不会抛出异常,它只是没有按预期执行(即没有传入属性)
有没有人对如何以计算方式将这些属性字典传递给 Gremlin 属性函数有任何见解?
更新:幼稚/低效的解决方案
下面提供了一个解决方案,但这是一个糟糕的解决方案,因为它每次迭代都会查询 gremlin 服务器。理想情况下,我想同时添加所有属性。并且只有在 id 是唯一的情况下才能真正按预期工作。
g.addV("person").property('id', id).next()
for …Run Code Online (Sandbox Code Playgroud) 我无法理解如何从使用ConfiguredGraphFactory 创建的图表中获取JanusGraphManagement 实例。
我尝试做这样的事情:
JanusGraphFactory.Builder config = JanusGraphFactory.build();
config.set("storage.hostname", storageHostname);
config.set("storage.port", storagePort);
config.set("storage.backend", STORAGE_BACKEND);
config.set("index.search.backend", SEARCH_BACKEND);
config.set("index.search.hostname", indexHostname);
config.set("index.search.port", indexPort);
config.set("graph.graphname", graphName);
JanusGraph graph = config.open();
JanusGraphManagement mgmt = graph.openManagement();
Run Code Online (Sandbox Code Playgroud)
但它会产生以下异常:
java.lang.NullPointerException:必须将 Gremlin 服务器配置为使用 JanusGraphManager。
gremlin-server 因以下配置而崩溃:
host: 0.0.0.0
port: 8182
scriptEvaluationTimeout: 180000
# channelizer: org.apache.tinkerpop.gremlin.server.channel.WebSocketChannelizer
channelizer: org.janusgraph.channelizers.JanusGraphWebSocketChannelizer
graphManager: org.janusgraph.graphdb.management.JanusGraphManager
graphs: {
#graph: conf/gremlin-server/janusgraph-cql-es-server.properties,
ConfigurationManagementGraph: conf/gremlin-server/janusgraph-cql-es-server-configured.properties
}
.....
Run Code Online (Sandbox Code Playgroud)
JanusGraph 的一个是这样的:
gremlin.graph=org.janusgraph.core.ConfiguredGraphFactory
graph.graphname=ConfigurationManagementGraph
storage.backend=cql
storage.hostname=127.0.0.1
storage.cql.keyspace=janusgraph
cache.db-cache = true
cache.db-cache-time = 180000
cache.db-cache-size = 0.25
index.search.backend=elasticsearch
index.search.hostname=127.0.0.1
index.search.elasticsearch.client-only=true
Run Code Online (Sandbox Code Playgroud)
我想做的是直接从Java代码定义图形模式,这就是为什么我需要管理实例并且遍历源是不够的
非常感谢您提前的帮助
我尝试按照https://docs.aws.amazon.com/neptune/latest/userguide/get-started.html中的说明设置我的 AWS Neptune 环境。设置似乎很好,我可以使用 Neptune Notebook 安装来检查状态。状态消息为:
{
"status": "healthy",
"startTime": "Tue May 12 04:24:52 UTC 2020",
"dbEngineVersion": "1.0.2.2.R2",
"role": "writer",
"gremlin": {
"version": "tinkerpop-3.4.3"
},
"sparql": {
"version": "sparql-1.1"
},
"labMode": {
"ObjectIndex": "disabled",
"ReadWriteConflictDetection": "enabled"
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我无法通过 EC2 客户端实例中的 Gremlin 控制台连接到它,我收到 403 禁止错误,如下所示:
\,,,/
(o o)
-----oOOo-(3)-oOOo-----
plugin activated: tinkerpop.server
plugin activated: tinkerpop.utilities
plugin activated: tinkerpop.tinkergraph
gremlin> :remote connect tinkerpop.server conf/neptune-remote.yaml
WARN org.apache.tinkerpop.gremlin.driver.Cluster - Using deprecated SSL trustCertChainFile support
ERROR org.apache.tinkerpop.gremlin.driver.Handler$GremlinResponseHandler - Could not …Run Code Online (Sandbox Code Playgroud) amazon-web-services gremlin amazon-iam gremlin-server amazon-neptune
gremlin-server ×10
gremlin ×7
janusgraph ×6
tinkerpop ×4
java ×2
tinkerpop3 ×2
amazon-iam ×1
docker ×1
graph ×1
graphson ×1
javascript ×1
json ×1
python ×1