Hive Thrift および JDBC インターフェースを使用して重要な Hive ジョブを作成しようとしていますが、適切な JUnit テストのセットアップに問題があります。自明ではないということは、メタストアのみを処理するのではなく、ジョブが少なくとも 1 つの MapReduce ステージをもたらすことを意味します。
このテストでは、Hive サーバーを起動し、データをテーブルにロードし、そのテーブルで重要なクエリを実行して、結果を確認する必要があります。
Spring リファレンスに従って、Spring コンテキストを配線しました。ただし、ジョブは MapReduce フェーズで失敗し、Hadoop バイナリが存在しないというエラーが表示されます。
java.io.IOException: プログラム "/usr/bin/hadoop" を実行できません (ディレクトリ "/Users/yoni/opower/workspace/intellij_project_root" 内): エラー = 2、そのようなファイルまたはディレクトリはありません
問題は、Hive サーバーがメモリ内で実行されているが、実行するために Hive のローカル インストールに依存していることです。プロジェクトを自己完結型にするためには、HDFS クラスターや MapReduce クラスターなどの Hive サービスを組み込む必要があります。Hive QTestUtilソースとHBaseTestUtilityで使用されているパターンと同様に、同じ Spring メソッドを使用してMiniDFSClusterとMiniMRClusterを指す Hive サーバーを起動しようとしました。しかし、私はそれを機能させることができませんでした。
Hive の統合テストを 3 日間試した後、コミュニティに質問してみようと思いました。
- Hive ジョブの統合テストをどのように行うことをお勧めしますか?
- インメモリ HDFS、MR、および Hive インスタンスを使用して Hive ジョブを統合テストするための実際の JUnit の例はありますか?
私が見た追加のリソース:
編集: ローカルまたはリモートにかかわらず、Hadoop クラスターに対して作業すると、フルスタックの Hive インスタンスに対して統合テストを実行できることを十分に認識しています。問題は、前述のように、これが Hive ワークフローを効果的にテストするための実行可能なソリューションではないことです。