このドキュメントの目的は、Hadoop互換性ガイドラインを、システム管理者にとって関連性の高い情報に絞り込むことです。
対象読者は、Apache Hadoopクラスタの維持管理を担当し、クラスタのアップグレードを計画および実行する必要がある管理者です。
Hadoop開発コミュニティは、新しい機能を導入し、既存の問題を解決するために、定期的に新しいHadoopリリースを提供しています。リリースは3つのカテゴリに分類されます。
Hadoopが依存するネイティブコンポーネントのセットは、Hadoop ABIの一部と見なされます。Hadoop開発コミュニティは、可能な限りABI互換性を維持することに努めています。マイナーリリース間では、セキュリティまたはライセンスの問題など、必要がない限り、Hadoopのネイティブ依存関係の最小サポートバージョン番号は増分されません。このような変更が発生した場合、Hadoop開発コミュニティは、同じメジャーバージョンを維持し、マイナーバージョンのみを更新しようとします。
HadoopはJava仮想マシンに依存しています。JVMの最小サポートバージョンは、Hadoopのメジャーリリース間では変更されません。現在の最小サポートJVMバージョンがメジャーリリース間でサポートされなくなった場合、マイナーリリースで最小サポートJVMバージョンが変更される可能性があります。
Hadoopは、SSLなどのいくつかのトランスポートレベルテクノロジに依存しています。セキュリティまたはライセンスの問題など、必要がない限り、これらの依存関係の最小サポートバージョンは増分されません。このような変更が発生した場合、Hadoop開発コミュニティは、同じメジャーバージョンを維持し、マイナーバージョンのみを更新しようとします。
Hadoopのサービスポート番号は、メジャーバージョン内では同じままですが、メジャーリリースで変更される可能性があります。
Hadoopの内部ワイヤープロトコルは、クライアントとサーバー間、およびサーバー間で、同じメジャーバージョン内のマイナーリリース全体で、後方および前方互換性が維持されます。これは、ローリングアップグレードを有効にすることを目的としています。メジャーリリース間のワイヤープロトコルの前方および後方互換性は可能であり、特定の条件下ではローリングアップグレードを許可する可能性がありますが、保証はありません。
Hadoop REST APIは、Hadoopシステムの状態に関する情報を収集するための簡単なメカニズムを提供します。RESTクライアントをサポートするために、Hadoop REST APIはバージョン管理されており、バージョン内では非互換に変更されません。エンドポイント自体と、サポートされているパラメータのリスト、およびエンドポイントからの出力は、RESTエンドポイントバージョン内では非互換に変更することは禁止されています。ただし、新しいフィールドやその他の追加的な変更は互換性のある変更と見なされるため、REST APIのコンシューマは、不明なフィールドを無視するのに十分な柔軟性を持つ必要があります。
REST APIバージョンは単一の数字であり、Hadoopバージョン番号とは関係ありません。バージョン番号は、「v」で始まるエンドポイントURLにエンコードされます(例:「v1」)。新しいRESTエンドポイントバージョンは、マイナーまたはメジャーリリースでのみ導入できます。RESTエンドポイントバージョンは、完全なメジャーリリースで非推奨とラベル付けされた後にのみ削除できます。
Hadoopは、自動化されたツールによって解析される可能性のあるさまざまな出力を生成します。Hadoopからの出力を消費する際には、次の点に注意してください。
HadoopのCLIセットは、システムのさまざまな側面を管理し、システムの状態に関する情報を検出する機能を提供します。メジャーリリース間では、CLIツールオプションは削除されたり、セマンティックに変更されたりすることはありません。そのルールの例外は、実験的であり変更される可能性があると明示的にラベル付けされているCLIツールとツールオプションです。CLIツールからの出力も、特に記載がない限り、メジャーバージョン番号内では同じままです。
CLIツール出力への変更は、非互換な変更と見なされることに注意してください。そのため、メジャーバージョン間では、CLI出力は変更されません。CLIツール出力は、CLIツールによって生成されるログ出力とは異なることに注意してください。ログ出力は自動化された消費を目的としておらず、いつでも変更される可能性があります。
Hadoopによって公開されるWeb UIは、人間の消費のみを目的としています。UIからデータをスクレイピングすることは、サポートされていません。リリース間でWeb UIに表示されるデータの互換性を確保するための努力は行われていません。
Hadoopの内部システム状態はプライベートであり、直接変更しないでください。次のポリシーは、さまざまな内部状態ストアのアップグレード特性を規定しています。
Hadoop は、XML 構成ファイルとログ構成ファイルという2つの主要な構成ファイル形式を使用します。
XML 構成ファイルには、名前と値のペアとしてプロパティのセットが含まれています。プロパティの名前と意味は Hadoop によって定義され、マイナーリリース間で安定していることが保証されています。プロパティはメジャーリリースでのみ、少なくとも1つのメジャーリリース期間、非推奨としてマークされている場合にのみ削除できます。ほとんどのプロパティにはデフォルト値があり、XML 構成ファイルにプロパティが明示的に設定されていない場合に使用されます。デフォルトのプロパティ値はメンテナンスリリース中に変更されません。さまざまな Hadoop コンポーネントでサポートされているプロパティの詳細については、コンポーネントのドキュメントを参照してください。
ダウンストリームプロジェクトとユーザーは、独自のツールやアプリケーションで使用するために、独自のプロパティを XML 構成ファイルに追加できます。Hadoop は新しいプロパティの定義について正式な制限を設けていませんが、Hadoop によって定義されたプロパティと競合する新しいプロパティは、予期せぬ望ましくない結果につながる可能性があります。ユーザーは、Hadoop によって定義されたプロパティの名前空間と競合するカスタム構成プロパティ名を使用しないようにすることをお勧めします。そのため、Hadoop が使用するプレフィックス(例:hadoop、io、ipc、fs、net、file、ftp、kfs、ha、file、dfs、mapred、mapreduce、yarn)を使用することは避けるべきです。
Hadoop デーモンと CLI によって生成されるログ出力は、一連の構成ファイルによって制御されます。これらのファイルは、Hadoop のさまざまなコンポーネントによって出力されるログメッセージの最小レベル、およびそれらのメッセージの保存場所と方法を制御します。マイナーリリース間では、ログメッセージを削減、削除、またはリダイレクトするログ構成に変更は加えられません。
Hadoop は、JSON リソースプロファイル構成や XML フェアスケジューラ構成など、さまざまな形式の他のタイプの構成ファイルを多数使用しています。マイナーリリース内では、構成ファイル形式に互換性のない変更は導入されません。マイナーリリース間でも、互換性のない構成ファイル形式の変更は、可能な限り回避されます。
Hadoop 構成ファイル、ジョブ履歴情報(ジョブ履歴サーバーが消費)、および Hadoop によって生成されるログファイルの場所と一般的な構造は、メンテナンスリリース間で維持されます。
Hadoop ディストリビューションの内容(例:JAR ファイル)は、いつでも変更される可能性があり、クライアントアーティファクトを除いて、信頼できるものとして扱うべきではありません。クライアントアーティファクトとその内容は、メジャーリリース内では互換性が維持されます。Hadoop 開発コミュニティの目標は、アプリケーションコードがマイナーリリース間、そして可能な限りメジャーリリース間でも変更せずに機能し続けるようにすることです。クライアントアーティファクトの現在のリストは次のとおりです。
一部の Hadoop コンポーネントは、環境変数を通じて情報を受け取ります。たとえば、HADOOP_OPTS
環境変数は、ほとんどの Hadoop プロセスによって、新しい JVM を開始するときに使用される追加の JVM 引数の文字列として解釈されます。マイナーリリース間では、Hadoop が環境変数を解釈する方法が互換性のない方法で変更されることはありません。つまり、同じ変数に配置された同じ値は、同じメジャーバージョン内のすべての Hadoop リリースで同じ結果を生成する必要があります。
Hadoop は、その動作のために多数のサードパーティライブラリに依存しています。Hadoop 開発コミュニティは、可能な限りこれらの依存関係をダウンストリーム開発者から隠蔽しようと努めています。それにもかかわらず、Hadoop は特に Hadoop 3 より前のバージョンで、いくつかの依存関係を公開しています。メジャーリリース間では、クライアントアーティファクトを通じて Hadoop によって新しい依存関係が公開されることはありません。
一般的なダウンストリームのアンチパターンは、hadoop classpath
の出力を使用してダウンストリームアプリケーションのクラスパスを設定するか、Hadoop に含まれるすべてのサードパーティ JAR をダウンストリームアプリケーションのクラスパスに追加することです。この方法は、ダウンストリームアプリケーションと Hadoop のサードパーティの依存関係間に緊密な結合を作成し、Hadoop の依存関係が変化するにつれて保守が困難になる脆弱なアプリケーションにつながります。この方法は強く推奨されません。
Hadoop には、圧縮、コンテナエグゼキュータバイナリ、さまざまなネイティブ統合など、いくつかのネイティブコンポーネントも含まれています。これらのネイティブコンポーネントは、Hadoop のネイティブ依存関係のセットを導入します。ネイティブ依存関係のセットはマイナーリリースで変更される可能性がありますが、Hadoop 開発コミュニティは、依存関係のバージョンの変更を可能な限りマイナーバージョンの変更に制限しようとします。
Hadoop は現在、x86 と AMD プロセッサで動作する Linux と Windows で Hadoop 開発コミュニティによってサポートされています。これらの OS とプロセッサは、今後も見込まれる限りサポートされる可能性が高いです。サポート計画が変更された場合、削除される OS またはプロセッサは、実際に削除される前に、少なくとも完全なマイナーリリース、理想的には完全なメジャーリリースの間、非推奨として文書化されます。Hadoop は他の OS とプロセッサアーキテクチャで機能する場合がありますが、問題が発生した場合、コミュニティが支援を提供できない可能性があります。
Hadoop デーモンに必要な最小リソースがリリース間(メンテナンスリリース間でも)どのように変化するかは保証されません。それにもかかわらず、Hadoop 開発コミュニティは、マイナーリリース内で要件を増やすことを回避しようとします。
FileSystem API を通じてサポートされているファイルシステム(Hadoop でサポートされているファイルシステムなど)は、ほとんどの場合、メジャーリリース全体で引き続きサポートされます。メジャーバージョン内でファイルシステムのサポートを削除できる唯一のケースは、代替クライアント実装へのクリーンな移行パスが提供された場合です。
Apache Hadoop を使用してアプリケーションとプロジェクトを開発することについての質問は、ユーザーメーリングリストにお問い合わせください。