MapReduce - API



在本章中,我們將仔細研究參與 MapReduce 程式設計操作的類及其方法。我們將主要關注以下內容:

  • JobContext 介面
  • Job 類
  • Mapper 類
  • Reducer 類

JobContext 介面

JobContext 介面是所有類的超級介面,它定義了 MapReduce 中的不同作業。它提供了作業的只讀檢視,這些檢視在任務執行時提供給任務。

以下是 JobContext 介面的子介面。

序號 子介面描述
1. MapContext<KEYIN, VALUEIN, KEYOUT, VALUEOUT>

定義提供給 Mapper 的上下文。

2. ReduceContext<KEYIN, VALUEIN, KEYOUT, VALUEOUT>

定義傳遞給 Reducer 的上下文。

Job 類是實現 JobContext 介面的主要類。

Job 類

Job 類是 MapReduce API 中最重要的類。它允許使用者配置作業、提交作業、控制作業執行以及查詢作業狀態。set 方法僅在作業提交之前有效,之後它們將丟擲 IllegalStateException。

通常,使用者建立應用程式,描述作業的各個方面,然後提交作業並監視其進度。

以下是如何提交作業的示例:

// Create a new Job
Job job = new Job(new Configuration());
job.setJarByClass(MyJob.class);

// Specify various job-specific parameters
job.setJobName("myjob");
job.setInputPath(new Path("in"));
job.setOutputPath(new Path("out"));

job.setMapperClass(MyJob.MyMapper.class);
job.setReducerClass(MyJob.MyReducer.class);

// Submit the job, then poll for progress until the job is complete
job.waitForCompletion(true);

建構函式

以下是 Job 類的建構函式摘要。

序號 建構函式摘要
1 Job()
2 Job(Configuration conf)
3 Job(Configuration conf, String jobName)

方法

Job 類的一些重要方法如下:

序號 方法描述
1 getJobName()

使用者指定的作業名稱。

2 getJobState()

返回作業的當前狀態。

3 isComplete()

檢查作業是否已完成。

4 setInputFormatClass()

設定作業的 InputFormat。

5 setJobName(String name)

設定使用者指定的作業名稱。

6 setOutputFormatClass()

設定作業的 Output Format。

7 setMapperClass(Class)

設定作業的 Mapper。

8 setReducerClass(Class)

設定作業的 Reducer。

9 setPartitionerClass(Class)

設定作業的 Partitioner。

10 setCombinerClass(Class)

設定作業的 Combiner。

Mapper 類

Mapper 類定義了 Map 作業。將輸入鍵值對對映到一組中間鍵值對。對映是將輸入記錄轉換為中間記錄的單個任務。轉換後的中間記錄的型別不必與輸入記錄相同。給定的輸入對可以對映到零個或多個輸出對。

方法

map 是 Mapper 類中最突出的方法。語法定義如下:

map(KEYIN key, VALUEIN value, org.apache.hadoop.mapreduce.Mapper.Context context)

此方法對輸入拆分中的每個鍵值對呼叫一次。

Reducer 類

Reducer 類定義了 MapReduce 中的 Reduce 作業。它將共享一個鍵的一組中間值減少到一組較小的值。Reducer 實現可以透過 JobContext.getConfiguration() 方法訪問作業的 Configuration。Reducer 有三個主要階段:Shuffle、Sort 和 Reduce。

  • Shuffle - Reducer 使用 HTTP 透過網路複製來自每個 Mapper 的排序輸出。

  • Sort - 框架按鍵合併排序 Reducer 輸入(因為不同的 Mapper 可能會輸出相同的鍵)。shuffle 和 sort 階段同時發生,即在獲取輸出的同時,它們也會合並。

  • Reduce - 在此階段,對排序輸入中的每個 <key, (值集合)> 呼叫 reduce (Object, Iterable, Context) 方法。

方法

reduce 是 Reducer 類中最突出的方法。語法定義如下:

reduce(KEYIN key, Iterable<VALUEIN> values, org.apache.hadoop.mapreduce.Reducer.Context context)

此方法對鍵值對集合上的每個鍵呼叫一次。

廣告