Apache Hadoop互換性

目的

このドキュメントの目的は、Hadoop互換性ガイドラインを、システム管理者にとって関連性の高い情報に絞り込むことです。

対象読者

対象読者は、Apache Hadoopクラスタの維持管理を担当し、クラスタのアップグレードを計画および実行する必要がある管理者です。

Hadoopリリース

Hadoop開発コミュニティは、新しい機能を導入し、既存の問題を解決するために、定期的に新しいHadoopリリースを提供しています。リリースは3つのカテゴリに分類されます。

  • メジャー:メジャーリリースには、通常、重要な新しい機能が含まれ、一般的に最大のアップグレード互換性のリスクを表します。メジャーリリースは、リリースバージョンの最初の番号を増分します(例:2.8.2から3.0.0)。
  • マイナー:マイナーリリースには、通常、いくつかの新しい機能と、いくつかの注目すべき問題に対する修正が含まれます。マイナーリリースは、ほとんどの場合、大きなアップグレードリスクをもたらすことはありません。マイナーリリースは、リリースバージョンの真ん中の番号を増分します(例:2.8.2から2.9.0)。
  • メンテナンス:メンテナンスリリースには、新しい機能は含まれません。メンテナンスリリースの目的は、開発コミュニティによって重要なものと見なされ、新しいリリースをプッシュして対処する価値があると判断された一連の問題を解決することです。メンテナンスリリースは、非常に小さなアップグレードリスクをもたらすはずです。メンテナンスリリースは、リリースバージョンの最後の番号を増分します(例:2.8.2から2.8.3)。

プラットフォーム依存関係

Hadoopが依存するネイティブコンポーネントのセットは、Hadoop ABIの一部と見なされます。Hadoop開発コミュニティは、可能な限りABI互換性を維持することに努めています。マイナーリリース間では、セキュリティまたはライセンスの問題など、必要がない限り、Hadoopのネイティブ依存関係の最小サポートバージョン番号は増分されません。このような変更が発生した場合、Hadoop開発コミュニティは、同じメジャーバージョンを維持し、マイナーバージョンのみを更新しようとします。

HadoopはJava仮想マシンに依存しています。JVMの最小サポートバージョンは、Hadoopのメジャーリリース間では変更されません。現在の最小サポートJVMバージョンがメジャーリリース間でサポートされなくなった場合、マイナーリリースで最小サポートJVMバージョンが変更される可能性があります。

ネットワーク

Hadoopは、SSLなどのいくつかのトランスポートレベルテクノロジに依存しています。セキュリティまたはライセンスの問題など、必要がない限り、これらの依存関係の最小サポートバージョンは増分されません。このような変更が発生した場合、Hadoop開発コミュニティは、同じメジャーバージョンを維持し、マイナーバージョンのみを更新しようとします。

Hadoopのサービスポート番号は、メジャーバージョン内では同じままですが、メジャーリリースで変更される可能性があります。

Hadoopの内部ワイヤープロトコルは、クライアントとサーバー間、およびサーバー間で、同じメジャーバージョン内のマイナーリリース全体で、後方および前方互換性が維持されます。これは、ローリングアップグレードを有効にすることを目的としています。メジャーリリース間のワイヤープロトコルの前方および後方互換性は可能であり、特定の条件下ではローリングアップグレードを許可する可能性がありますが、保証はありません。

スクリプティングと自動化

REST API

Hadoop REST APIは、Hadoopシステムの状態に関する情報を収集するための簡単なメカニズムを提供します。RESTクライアントをサポートするために、Hadoop REST APIはバージョン管理されており、バージョン内では非互換に変更されません。エンドポイント自体と、サポートされているパラメータのリスト、およびエンドポイントからの出力は、RESTエンドポイントバージョン内では非互換に変更することは禁止されています。ただし、新しいフィールドやその他の追加的な変更は互換性のある変更と見なされるため、REST APIのコンシューマは、不明なフィールドを無視するのに十分な柔軟性を持つ必要があります。

REST APIバージョンは単一の数字であり、Hadoopバージョン番号とは関係ありません。バージョン番号は、「v」で始まるエンドポイントURLにエンコードされます(例:「v1」)。新しいRESTエンドポイントバージョンは、マイナーまたはメジャーリリースでのみ導入できます。RESTエンドポイントバージョンは、完全なメジャーリリースで非推奨とラベル付けされた後にのみ削除できます。

Hadoop出力の解析

Hadoopは、自動化されたツールによって解析される可能性のあるさまざまな出力を生成します。Hadoopからの出力を消費する際には、次の点に注意してください。

  • Hadoopログ出力は、正確性の問題を解決する場合を除き、メンテナンスリリースで変更されることは想定されていません。ログ出力はソフトウェアによって直接消費できますが、主に人間の読者を対象としています。
  • Hadoopは、さまざまな操作の監査ログを生成します。監査ログはマシン可読であることを目的としていますが、新しいレコードとフィールドの追加は、互換性のある変更と見なされます。監査ログのコンシューマは、予期しないレコードとフィールドを許可する必要があります。監査ログ形式は、メジャーリリース間で非互換に変更されることはありません。
  • Hadoopによって生成されるメトリクスデータは、主に自動化された消費を目的としています。メトリクス形式はメジャーリリース間で非互換な方法で変更されることはありませんが、新しいレコードとフィールドはいつでも互換性のある方法で追加できます。メトリクスデータのコンシューマは、不明なレコードとフィールドを許可する必要があります。

CLI

HadoopのCLIセットは、システムのさまざまな側面を管理し、システムの状態に関する情報を検出する機能を提供します。メジャーリリース間では、CLIツールオプションは削除されたり、セマンティックに変更されたりすることはありません。そのルールの例外は、実験的であり変更される可能性があると明示的にラベル付けされているCLIツールとツールオプションです。CLIツールからの出力も、特に記載がない限り、メジャーバージョン番号内では同じままです。

CLIツール出力への変更は、非互換な変更と見なされることに注意してください。そのため、メジャーバージョン間では、CLI出力は変更されません。CLIツール出力は、CLIツールによって生成されるログ出力とは異なることに注意してください。ログ出力は自動化された消費を目的としておらず、いつでも変更される可能性があります。

Web UI

Hadoopによって公開されるWeb UIは、人間の消費のみを目的としています。UIからデータをスクレイピングすることは、サポートされていません。リリース間でWeb UIに表示されるデータの互換性を確保するための努力は行われていません。

Hadoop状態データ

Hadoopの内部システム状態はプライベートであり、直接変更しないでください。次のポリシーは、さまざまな内部状態ストアのアップグレード特性を規定しています。

  • MapReduceワークロードの実行中にローリングアップグレードを容易にするために、内部MapReduce状態データは、同じメジャーバージョン内のマイナーリリース間で互換性が維持されます。
  • HDFS は、HDFS に格納されたデータに関するメタデータを、バージョン管理された独自の内部形式で保持します。互換性のない変更が発生した場合、ストアのバージョン番号が増分されます。既存のクラスタをアップグレードする場合、可能であればメタデータストアは自動的にアップグレードされます。メタデータストアのアップグレード後、アップグレードプロセスを元に戻すことは常に可能です。
  • AWS S3A ガードは、独自の内部メタデータストアを保持していました。この機能が削除されたため、ストアは廃止され、削除できます。
  • YARN リソースマネージャーは、アプリケーションとスケジューラの情報を保持する、バージョン管理された独自の内部状態ストアを保持しています。互換性のない変更により、バージョン番号が増分されます。アップグレードでストアの再フォーマットが必要な場合は、リリースノートに記載されます。
  • YARN ノードマネージャーは、アプリケーション情報を保持する、バージョン管理された独自の内部状態ストアを保持しています。互換性のない変更により、バージョン番号が増分されます。アップグレードでストアの再フォーマットが必要な場合は、リリースノートに記載されます。
  • YARN フェデレーションサービスは、アプリケーションとクラスタ情報を保持する、バージョン管理された独自の内部状態ストアを保持しています。互換性のない変更により、バージョン番号が増分されます。アップグレードでストアの再フォーマットが必要な場合は、リリースノートに記載されます。

Hadoop 構成

Hadoop は、XML 構成ファイルとログ構成ファイルという2つの主要な構成ファイル形式を使用します。

XML 構成ファイル

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 ディストリビューションの内容(例:JAR ファイル)は、いつでも変更される可能性があり、クライアントアーティファクトを除いて、信頼できるものとして扱うべきではありません。クライアントアーティファクトとその内容は、メジャーリリース内では互換性が維持されます。Hadoop 開発コミュニティの目標は、アプリケーションコードがマイナーリリース間、そして可能な限りメジャーリリース間でも変更せずに機能し続けるようにすることです。クライアントアーティファクトの現在のリストは次のとおりです。

  • hadoop-client
  • hadoop-client-api
  • hadoop-client-minicluster
  • hadoop-client-runtime
  • hadoop-hdfs-client
  • hadoop-hdfs-native-client
  • hadoop-mapreduce-client-app
  • hadoop-mapreduce-client-common
  • hadoop-mapreduce-client-core
  • hadoop-mapreduce-client-jobclient
  • hadoop-mapreduce-client-nativetask
  • hadoop-yarn-client

環境変数

一部の Hadoop コンポーネントは、環境変数を通じて情報を受け取ります。たとえば、HADOOP_OPTS 環境変数は、ほとんどの Hadoop プロセスによって、新しい JVM を開始するときに使用される追加の JVM 引数の文字列として解釈されます。マイナーリリース間では、Hadoop が環境変数を解釈する方法が互換性のない方法で変更されることはありません。つまり、同じ変数に配置された同じ値は、同じメジャーバージョン内のすべての Hadoop リリースで同じ結果を生成する必要があります。

ライブラリ依存関係

Hadoop は、その動作のために多数のサードパーティライブラリに依存しています。Hadoop 開発コミュニティは、可能な限りこれらの依存関係をダウンストリーム開発者から隠蔽しようと努めています。それにもかかわらず、Hadoop は特に Hadoop 3 より前のバージョンで、いくつかの依存関係を公開しています。メジャーリリース間では、クライアントアーティファクトを通じて Hadoop によって新しい依存関係が公開されることはありません。

一般的なダウンストリームのアンチパターンは、hadoop classpath の出力を使用してダウンストリームアプリケーションのクラスパスを設定するか、Hadoop に含まれるすべてのサードパーティ JAR をダウンストリームアプリケーションのクラスパスに追加することです。この方法は、ダウンストリームアプリケーションと Hadoop のサードパーティの依存関係間に緊密な結合を作成し、Hadoop の依存関係が変化するにつれて保守が困難になる脆弱なアプリケーションにつながります。この方法は強く推奨されません。

Hadoop には、圧縮、コンテナエグゼキュータバイナリ、さまざまなネイティブ統合など、いくつかのネイティブコンポーネントも含まれています。これらのネイティブコンポーネントは、Hadoop のネイティブ依存関係のセットを導入します。ネイティブ依存関係のセットはマイナーリリースで変更される可能性がありますが、Hadoop 開発コミュニティは、依存関係のバージョンの変更を可能な限りマイナーバージョンの変更に制限しようとします。

ハードウェアと OS の依存関係

Hadoop は現在、x86 と AMD プロセッサで動作する Linux と Windows で Hadoop 開発コミュニティによってサポートされています。これらの OS とプロセッサは、今後も見込まれる限りサポートされる可能性が高いです。サポート計画が変更された場合、削除される OS またはプロセッサは、実際に削除される前に、少なくとも完全なマイナーリリース、理想的には完全なメジャーリリースの間、非推奨として文書化されます。Hadoop は他の OS とプロセッサアーキテクチャで機能する場合がありますが、問題が発生した場合、コミュニティが支援を提供できない可能性があります。

Hadoop デーモンに必要な最小リソースがリリース間(メンテナンスリリース間でも)どのように変化するかは保証されません。それにもかかわらず、Hadoop 開発コミュニティは、マイナーリリース内で要件を増やすことを回避しようとします。

FileSystem API を通じてサポートされているファイルシステム(Hadoop でサポートされているファイルシステムなど)は、ほとんどの場合、メジャーリリース全体で引き続きサポートされます。メジャーバージョン内でファイルシステムのサポートを削除できる唯一のケースは、代替クライアント実装へのクリーンな移行パスが提供された場合です。

質問

Apache Hadoop を使用してアプリケーションとプロジェクトを開発することについての質問は、ユーザーメーリングリストにお問い合わせください。