2016年5月25日水曜日

MapReduce applicationのHadoop 1.xから2.xへの移行について

MapReduce applicationのHadoop 1.xから2.xへの移行については、互換性が保証されています。

packageが"org.apache.hadoop.mapred"のもののみ使用している場合は、そのまま使用できます。

"org.apache.hadoop.mapreduce"を使用している場合は、recompileが必要です。
recompileせずに実行すると、下記のエラーが発生します。

java.lang.IncompatibleClassChangeError: Found interface org.apache.hadoop.mapreduce.JobContext, but class was expected

参考:
http://hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduce_Compatibility_Hadoop1_Hadoop2.html

補足:

Mavenを使っている場合は、pom.xmlに下記の修正が必要です。

[修正前]
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-core</artifactId>
        <scope>provided</scope>
    </dependency>

[修正後]
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-common</artifactId>
        <version>2.7.2</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-mapreduce-client-core</artifactId>
        <version>2.7.2</version>
        <scope>provided</scope>
    </dependency>

※hadoop-commonは、org.apache.hadoop.conf, fs, io, util, securityのAPIを
使うのに必要
※hadoop-mapreduce-client-coreは、org.apache.hadoop.mapreduce, mapredの
APIを使うのに必要