Java ETL加载程序抛出FileNotFoundException:加载json文件时出错

Java ETL加载程序抛出FileNotFoundException:加载json文件时出错,java,orientdb,orientdb2.2,orientdb-etl,Java,Orientdb,Orientdb2.2,Orientdb Etl,我试图让ETL加载器在OSX机器(10.11.6)上的OrientDB 2.2.5上工作,但我一直在输入JSON文件上获得FileNotFoundException 我要离开可以在post.csv和post.json文件教程中找到的。我修改了它们以删除路径,因为它们与我自己的路径结构不太一致 以下是我的post.csv: id,title 10,NoSQL movement 20,New Orientdb post.json文件: { "source": { "file": { "path

我试图让ETL加载器在OSX机器(10.11.6)上的OrientDB 2.2.5上工作,但我一直在输入JSON文件上获得FileNotFoundException

我要离开可以在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
OrientDB etl v.2.2.4(构建2.2。x@rf5282664db9300ef3358fb4d7e2066ad418c2e61;2016-07-08 12:30:59+0000)www.orientdb.com
线程“main”com.orientechnologies.orient.core.Exception.OConfigurationException中出现异常:加载配置文件时出错:post.json
在com.orientechnologies.orient.etl.OETLProcessor.parseConfigAndParameters上(OETLProcessor.java:131)
在com.orientechnologies.oriente.etl.OETLProcessor.main(OETLProcessor.java:108)
原因:java.io.FileNotFoundException:post.json(无此类文件或目录)
在java.io.FileInputStream.open(本机方法)
位于java.io.FileInputStream。(FileInputStream.java:138)
在com.orientechnologies.common.io.OIOUtils.readFileAsString(OIOUtils.java:140)上
在com.orientechnologies.orient.etl.OETLProcessor.parseConfigAndParameters上(OETLProcessor.java:120)
... 还有一个
我不确定正确的解决方法是什么。。。我的问题似乎与另一个问题类似,但由于我在任何路径中都没有空间,因此对此问题的修复对我来说并不起作用。我已经尝试在配置文件中设置绝对路径,但这并没有改变任何东西

我从posts.json和posts.csv文件所在的目录运行oetl.sh,但它似乎仍然找不到posts.json

更新:两个文件(posts.json、posts.csv)都位于同一目录中。我已经试着运行oetl.sh以及oetl.sh posts.json,但是异常一直在发生。我还尝试编辑posts.json,这样它也有完整的绝对路径,并且不会改变结果


任何帮助都将不胜感激。。。我想这可能是某种java配置问题,但我对java比较陌生,所以可能遗漏了一些环境变量或其他什么?

我想我已经解决了。。。为存档目的添加答案

我的路径中有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
行,脚本工作正常,因此我不确定脚本中该行的实际值/耸耸肩

你的post.json在哪里?正如异常所说,问题肯定在路径的某个地方。请尝试使用绝对路径,例如/User/myname/adirectory/input.csv