6

6 ノードの Cloudera ベースの Hadoop クラスターがあり、oozie の sqoop アクションから Oracle データベースに接続しようとしています。

ojdbc6.jar を sqoop lib の場所にコピーしました (私にとっては /opt/cloudera/parcels/CDH-4.2.0-1.cdh4.2.0.p0.10/lib/sqoop/lib/ にあります)。 )すべてのノードで実行し、6 つのノードすべてから単純な「sqoop eval」を実行できることを確認しました。

Oozie の sqoop アクションを使用して同じコマンドを実行すると、「Could not load db driver class: oracle.jdbc.OracleDriver」というメッセージが表示されます。

共有ライブラリの使用に関するこの記事を読みましたが、タスク/アクション/ワークフロー固有の依存関係について話しているとき、それは理にかなっています。しかし、JDBC ドライバーのインストールは sqoop の拡張機能であると考えているため、sqoop インストール ライブラリに属していると思います。

問題は、sqoop は私が lib フォルダーに入れたこの ojdbc6 jar を認識しているのに、どうして私の Oozie ワークフローはそれを認識しないのでしょうか?

これは期待されているものですか、それとも何か不足していますか?

余談ですが、JDBC ドライバー jar の適切な場所はどこだと思いますか?

前もって感謝します!

4

4 に答える 4

7

JDBC ドライバー jar (およびそれが依存するすべての jar) は、HDFS の Oozie sharelib フォルダーに配置する必要があります。Cloudera 4.2 ではなく Hortonworks Data Platform 1.2 を実行しているため、詳細は異なる場合がありますが、私の JDBC ドライバーは にあり/user/oozie/share/lib/sqoopます。これにより、Oozie を介して JDBC で Sqoop を実行できるようになります。

データノードの sqoop lib にある JDBC ドライバー jar に配置する必要はありません。私のセットアップではsqoop eval、データ ノードのコマンド ラインから簡単なコマンドを実行できません。これがうまくいくとあなたが考えた理由の論理を理解しています。JDBC ドライバー jar が HDFS 上にある必要がある理由は、すべてのデータ ノードが JDBC ドライバー jar にアクセスできるようにするためです。ソリューションは同じ目標を達成する必要があります。sharelibの使用が機能する理由を説明するには、Oozieの内部の仕組みに十分に精通していませんが、ソリューションは機能しません。

于 2013-04-12T18:49:49.433 に答える
1

CDH-5 を使用している場合、JDBC ドライバー jar (およびそれが依存するすべての jar) は、HDFS の「/user/oozie/share/lib/lib_timestamp/sqoop」フォルダーに配置する必要があります。

于 2015-11-30T04:54:42.047 に答える