
- MapReduce 教程
- MapReduce - 首頁
- MapReduce - 簡介
- MapReduce - 演算法
- MapReduce - 安裝
- MapReduce - API
- MapReduce - Hadoop 實現
- MapReduce - 分割槽器
- MapReduce - 組合器
- MapReduce - Hadoop 管理
- MapReduce 資源
- MapReduce - 快速指南
- MapReduce - 有用資源
- MapReduce - 討論
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)
此方法對鍵值對集合上的每個鍵呼叫一次。