このドキュメントでは、Apache Hadoop MapReduce アプリケーションを Apache Hadoop 1.x から Apache Hadoop 2.x に移行するための情報を提供します。
Apache Hadoop 2.x では、リソース管理機能を汎用分散アプリケーション管理フレームワークである Apache Hadoop YARN に分離しました。一方、Apache Hadoop MapReduce (MRv2) は純粋な分散計算フレームワークとして残っています。
一般的に、以前の MapReduce ランタイム (MRv1) は再利用されており、大きな変更は行われていません。そのため、MRv2 は MRv1 アプリケーションとの十分な互換性を確保できます。ただし、いくつかの改良とコードのリファクタリングにより、いくつかの API は後方互換性がなくなりました。
このページの残りの部分では、Apache Hadoop MapReduce 2.x (MRv2) でサポートされる後方互換性の範囲とレベルについて説明します。
まず、古い **mapred** API を使用するアプリケーションとのバイナリ互換性を確保します。これは、MRv1 **mapred** API に対してビルドされたアプリケーションは、再コンパイルすることなく、構成を介して Apache Hadoop 2.x クラスタを指すだけで、YARN 上で直接実行できることを意味します。
MRv1 以降、**mapreduce** API は大幅に進化しているため、**mapreduce** API を使用するアプリケーションとの完全なバイナリ互換性を確保することはできません。ただし、バイナリ互換性を損なう **mapreduce** API のソース互換性は確保します。つまり、ユーザーは **mapreduce** API を使用するアプリケーションを MRv2 jar に対して再コンパイルする必要があります。注目すべきバイナリ非互換性の変更点は、Counter と CounterGroup です。
MRv2 では、`mradmin` コマンドは存在せず、`rmadmin` のコマンドに置き換えられたため、MRAdmin は削除されました。このクラスを直接使用するアプリケーションのバイナリ互換性とソース互換性の両方がサポートされていません。
残念ながら、MRv1 アプリケーションのバイナリ互換性を維持すると、特に Hadoop 0.23 ユーザーのような MRv2 の早期導入ユーザーにとって、バイナリ互換性の問題が発生する可能性があります。**mapred** API については、ユーザーベースが大きい MRv1 アプリケーションとの互換性を選択しました。**mapreduce** API については、Hadoop 0.23 アプリケーションに大きな影響を与えない限り、MRv1 アプリケーションと互換性を持たせるように変更しています。以下は、Hadoop 0.23 と互換性のない MapReduce API のリストです。
問題のある関数 | 非互換性の問題 |
---|---|
org.apache.hadoop.util.ProgramDriver#drive |
戻り値の型が `void` から `int` に変更されました |
org.apache.hadoop.mapred.jobcontrol.Job#getMapredJobID |
戻り値の型が `String` から `JobID` に変更されました |
org.apache.hadoop.mapred.TaskReport#getTaskId |
戻り値の型が `String` から `TaskID` に変更されました |
org.apache.hadoop.mapred.ClusterStatus#UNINITIALIZED_MEMORY_VALUE |
データ型が `long` から `int` に変更されました |
org.apache.hadoop.mapreduce.filecache.DistributedCache#getArchiveTimestamps |
戻り値の型が `long[]` から `String[]` に変更されました |
org.apache.hadoop.mapreduce.filecache.DistributedCache#getFileTimestamps |
戻り値の型が `long[]` から `String[]` に変更されました |
同上 |
org.apache.hadoop.mapreduce.Job#failTask |
戻り値の型が `void` から `boolean` に変更されました |
org.apache.hadoop.mapreduce.Job#failTask |
org.apache.hadoop.mapreduce.Job#killTask |
同上 |
YARN で `hadoop-examples-1.x.x.jar` を試そうとしているユーザーは、`hadoop -jar hadoop-examples-1.x.x.jar` は、他の MRv2 jar とともにインストールされている `hadoop-mapreduce-examples-2.x.x.jar` を依然として使用することに注意してください。デフォルトでは、Hadoop フレームワーク jar はクラスパス内でユーザーの jar より前に表示されるため、2.x.x jar のクラスが選択されます。ユーザーは、クラスタ内のすべてのノードのクラスパスから `hadoop-mapreduce-examples-2.x.x.jar` を削除する必要があります。そうでない場合、ユーザーは `HADOOP_USER_CLASSPATH_FIRST=true` と `HADOOP_CLASSPATH=...:hadoop-examples-1.x.x.jar` を設定してターゲットの examples jar を実行し、`mapred-site.xml` に次の構成を追加して、YARN コンテナ内のプロセスもこの jar を選択するようにする必要があります。
<property> <name>mapreduce.job.user.classpath.first</name> <value>true</value> </property>