我试图让ETL加载程序在OSX机器上运行OrientDB 2.2.5(10.11.6),但我在输入JSON文件上不断收到FileNotFoundException ...
我离开了example,可以在post.csv和post.json文件的教程中找到。我修改了它们以删除路径,因为那些路径不能很好地与我自己的路径结构对齐。
这是我的post.csv:
id,title
10,NoSQL movement
20,New Orientdb
post.json文件:
{
"source": { "file": { "path": "post.csv" } },
"extractor": { "csv": {} },
"transformers": [
{ "vertex": { "class": "Post" } }
],
"loader": {
"orientdb": {
"dbURL": "plocal:dbtest",
"dbType": "graph",
"classes": [
{"name": "Post", "extends": "V"},
{"name": "Comment", "extends": "V"},
{"name": "HasComments", "extends": "E"}
], "indexes": [
{"class":"Post", "fields":["id:integer"], "type":"UNIQUE" }
]
}
}
}
我将环境变量ORIENTDB_HOME设置为orientdb-community-2.2.4所在的位置,$ ORIENTDB_HOME / bin位于我的路径中。
如果我输入以下内容:
$ oetl.sh post.json
输出是这样的:
OrientDB etl v.2.2.4 (build 2.2.x@rf5282664db9300ef3358fb4d7e2066ad418c2e61; 2016-07-08 12:30:59+0000) www.orientdb.com
Exception in thread "main" com.orientechnologies.orient.core.exception.OConfigurationException: Error on loading config file: post.json
at com.orientechnologies.orient.etl.OETLProcessor.parseConfigAndParameters(OETLProcessor.java:131)
at com.orientechnologies.orient.etl.OETLProcessor.main(OETLProcessor.java:108)
Caused by: java.io.FileNotFoundException: post.json (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at com.orientechnologies.common.io.OIOUtils.readFileAsString(OIOUtils.java:140)
at com.orientechnologies.orient.etl.OETLProcessor.parseConfigAndParameters(OETLProcessor.java:120)
... 1 more
我不确定正确的解决方案是什么......我的问题看起来与另一个问题previously asked question类似,但由于我没有解决这个问题,因此对我没有任何帮助任何路径都有空格。我已经尝试在配置文件中设置绝对路径,但没有改变任何内容。
我从posts.json和posts.csv文件所在的目录运行oetl.sh,但它仍然无法找到posts.json。
更新:两个文件(posts.json,posts.csv)都位于同一目录中。我试过运行oetl.sh以及oetl.sh posts.json,但是异常一直在发生。我也尝试过编辑posts.json,这样它也有完整的绝对路径,并且不会改变结果。
任何帮助都将不胜感激......我认为它可能是某种java配置问题,但我对Java相对较新,所以我可能错过了一些环境变量或什么?
答案 0 :(得分:2)
我想我已经解决了......为档案目的添加答案。
我的PATH中有orientdb-community-2.2.4 / bin目录,并且试图从包含post.json和post.csv的目录运行。
oetl.sh脚本首先将其工作目录更改为脚本位置:
#!/bin/sh
#
# Copyright (c) 2014 Luca Garulli
#
#set current working directory
cd `dirname $0`
...
因此,当oetl.sh执行实际的java代码时,它使用工作目录$ ORIENTDB_HOME / bin而不是用户shell的当前工作目录。这意味着必须在命令行上使用其绝对路径指定post.json文件。此外,post.json文件中列出的post.csv文件也需要具有其绝对路径。
我可以注释掉cd dirname $0
行并且脚本运行正常,所以我不确定该行的值是什么。 /耸肩