Apache Hadoop MapReduce - 從 Apache Hadoop 1.x 遷移至 Apache Hadoop 2.x

簡介

這份文件提供使用者將其 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 上執行,無需重新編譯。

原始碼相容性

由於這些 API 自 MRv1 以來已大幅演進,因此我們無法確保與使用mapreduce API 的應用程式完全二進位相容。不過,我們會確保中斷二進位相容性的mapreduce API 具有原始碼相容性。換句話說,使用者應針對 MRv2 jar 重新編譯使用mapreduce API 的應用程式。一個值得注意的中斷二進位相容性的變更是 Counter 和 CounterGroup。

不支援

MRAdmin 已在 MRv2 中移除,因為mradmin 指令已不存在。它們已由rmadmin 中的指令取代。我們不支援直接使用此類別的應用程式的二進位相容性或原始碼相容性。

MRv1 使用者與早期 MRv2 採用者之間的折衷

遺憾的是,維持 MRv1 應用程式的二進位相容性可能會導致早期 MRv2 採用者(特別是 Hadoop 0.23 使用者)出現二進位相容性問題。對於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#killTask 傳回型別從void變更為boolean
org.apache.hadoop.mapreduce.Job#getTaskCompletionEvents 傳回型別從o.a.h.mapred.TaskCompletionEvent[]變更為o.a.h.mapreduce.TaskCompletionEvent[]

惡意

對於打算在 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=trueHADOOP_CLASSPATH=...:hadoop-examples-1.x.x.jar來執行目標範例 jar,並在mapred-site.xml中新增下列組態,讓 YARN 容器中的程序也能選取此 jar。

    <property>
        <name>mapreduce.job.user.classpath.first</name>
        <value>true</value>
    </property>