0

私の会社では、Hadoop で MapReduce アプリケーションを開発しています。これらのプロジェクトの依存関係の管理について議論が行われています。ご意見をお聞かせください。

Cloudera の Hadoop ディストリビューション (CDH) を使用しています。

開発ワークフロー:

  • MapReduce プロジェクトは SVN リポジトリでホストされています
  • それらのそれぞれには、依存関係が定義されたPOMファイルがあります(およびその他のものも)
  • また、これらの MapReduce プロジェクトを POM の依存関係として定義し、MapReduce プロジェクトの実行フローを定義する責任を負う Oozie ワークフロー プロジェクトも作成します。
  • Oozie プロジェクトのビルド アーティファクトは、使用するすべての MapReduce jar とその依存関係を含む jar ファイルです (Maven のアセンブリ プラグインを使用して圧縮します)。これは後で HDFS にデプロイするアーティファクトです (解凍後)。
  • Jenkinsが管理するMavenでプロジェクトを構築します
  • 成功したビルドは Archiva サーバーにデプロイされます
  • HDFS へのデプロイは Archiva からオンデマンドで行われ、Oozie プロジェクト ビルドのアーティファクトを取得し、それを抽出して HDFS に配置します。
  • 一部の依存関係 (つまり、Oozie で使用されるもの、Hive、Sqoop、MySQL コネクタ、Jline、commons-... など) は、プロジェクトのビルドには必要ありませんが、プロジェクトが機能するためには必要でした。

まだ私と一緒に?

現在の議論は、MapReduce および Oozie プロジェクトのこれらの依存関係を定義することです。二つの立場があります。

これらの依存関係 (つまり、プロジェクトのビルドに不要なもの) を POM ファイルで定義する必要はなく、代わりに HDFS の共有ディレクトリに配置し、常にそこにあると想定する必要があると言う人もいます。

長所:

  • 開発者はこれらを処理する必要はありません (ただし、開発者は他の処理を行います)
  • ほとんどの場合、CDH ディストリビューションを更新するときは、プロジェクトごとに個別に更新するよりも、共有ディレクトリでこれらを更新する方が簡単です (これが必要かどうかはわかりませんが)。

短所:

  • プロジェクトに対していくつかの依存関係が定義されていますが、いくつかは正しくないと想定されています
  • 共有ディレクトリは未使用の JAR のシンクになる可能性があり、どれがまだ使用されていてどれが使用されていないか誰もわかりません
  • これらの JAR が適切なバージョンの HDFS に常に存在すると想定されるため、コードの移植性が低下します。

それで、あなたたちはどう思いますか?

編集:書くのを忘れましたが、2番目のオプションはすべての依存関係を定義することであることは明らかです-たとえそれらがほとんどのプロジェクトで繰り返され、メンテナンスが必要な場合でも。

4

1 に答える 1

0

私は 2 番目に投票します。これは、共有ディレクトリではなく、各プロジェクトの依存関係を処理および維持することを意味します。問題の原因は、共有ディレクトリが時間の経過とともに変更され、しばらくすると他のプロジェクトが機能しなくなり、誰かが依存関係を削除するなどの原因になることです。したがって、依存関係を意図した pom に保持することをお勧めします。さらに、共有ディレクトリの現在の状態に依存することなく、どのプロジェクトもすぐに実行できます。

使用すべきいくつかのデフォルトの依存関係を含む親 pom について考えるかもしれません。これは、dependencyManagement セクションの定義によって処理でき、特定のプロジェクトはバージョンなしで実際の依存関係を定義します。他の解決策は、インポート スコープを使用することです。

<dependency>
  <groupId>yourGroupIdy</groupId>
  <artifactId>YourArtifactId</artifactId>
  <version>1.0</version>
  <scope>import</scope>
</dependency>

これにより、依存関係を担当するこの単一の pom プロジェクトでのみ、すべてのプロジェクトで維持する必要のない定義済みの依存関係のセットを持つことができます。

于 2012-05-14T18:43:27.990 に答える