0

問題は、jar ファイルが Spring ORM を使用して永続構成をロードし、これらの構成に基づいて、ファイルが HDFS の適切なフォルダーに移動されることです。「hadoop jar」の代わりに「java -cp」を使用すると、HDFS へのコピーに失敗し、FileSystem エラーが発生します。

hadoop jar コマンド (Spring orm が注入されている) を使用して jar を呼び出すと、例外は次のようになります。

スレッド「メイン」での例外org.springframework.beans.factory.BeanCreationException:名前のBeanの作成中にエラーが発生しました

クラスパスリソース[applicationContext.xml]に「org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor#0」を定義

クラス パス リソース [applicationContext.xml] で定義された名前が「entityManagerFactory」の Bean の作成中にエラーが発生しました: init メソッドの呼び出しに失敗しました。ネストされた例外は java.lang.IllegalStateException です: 名前 'Persistance' の持続性ユニットの定義が競合しています: file:/home/user/Desktop/ABC/apnJar.jar, file:/tmp/hadoop-ABC/hadoop-unjar2841422106164401019/

原因: java.lang.IllegalStateException: 名前 'Persistance' の持続性ユニットの定義が競合しています

Hadoop が jar ファイルをいくつかの tmp フォルダーに解凍しているようですが、これは本当に必要ですか? 構成を変更して、この手順を省略できますか?

これについての考えは大歓迎です。

4

2 に答える 2

0

回避策として、構成 xml を jar から抽出し、それらを作業ディレクトリに配置しました。

これは機能しましたが、適切な解決策を探していました。

したがって、同様の問題に直面している場合は、すべての構成 xml を削除し、コンパイルされたクラス ファイルのみを含む jar を配置します。

于 2013-06-04T13:49:54.583 に答える
0

「hadoop jar」を使用すると、hadoop はorg.apache.hadoop.util.RunJarを実行します。RunJarは、jar を一時フォルダー (この場合は /tmp/hadoop-ABC/hadoop-unjar2841422106164401019/) に解凍し、現在のクラス ローダーにロードします。最後に、メイン クラスを呼び出して MapReduce アプリケーションを実行します。

jar を CLASSPATH に追加しましたか? その場合、jar とパッケージ化されていないフォルダーがクラス ローダーにあります。それが春が文句を言う理由だと思います。

于 2013-06-03T08:23:07.723 に答える