1

OSX マシン (10.11.6) 上の OrientDB 2.2.5 で ETL ローダーを動作させようとしていますが、入力 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

正しい修正方法がわからない... 私の問題は、以前に尋ねられた別の質問に似ているようですが、パスにスペースがないため、その修正はうまくいきませんでした。構成ファイルに絶対パスを設定しようとしましたが、何も変更されていません。

posts.json および posts.csv ファイルが配置されているディレクトリから oetl.sh を実行していますが、まだ posts.json を見つけることができないようです。

更新: 両方のファイル (posts.json、posts.csv) は同じディレクトリに配置されています。oetl.sh だけでなく oetl.sh posts.json も実行しようとしましたが、例外が発生し続けます。また、posts.json を編集して、完全な絶対パスも含まれるようにして、結果が変わらないようにしました。

どんな助けでも大歓迎です...おそらくある種のJava構成の問題だと思いますが、私はJavaに比較的慣れていないので、環境変数などを見逃している可能性がありますか?

4

1 に答える 1

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 が使用されます。これは、post.json ファイルをコマンド ラインで絶対パスで指定する必要があることを意味します。また、post.json ファイル内にリストされている post.csv ファイルにも絶対パスが必要です。

cd 行をコメント アウトするdirname $0と、スクリプトは正常に動作するので、スクリプト内のその行の実際の値がわかりません。/肩をすくめる

于 2016-07-26T05:15:01.997 に答える