一個MapReduce 程式示例 細節決定成敗(一)
最近在看MapReduce,想起一直都是Copy 然後修改的方法來寫。突然想試試自己動手寫一個及其簡單的mr程式。
細節決定成敗啊,不試不知道,一試才能發現平時注意不到的細節。
下面是我用了很快時間寫好的一個程式,注意,這份是有問題的!
寫完成編譯,打包然後執行。
上面的問題百思不得甚解,完全不知道什麼地方錯了。
然後跟之前copy的程式碼進行比對。終於找出了問題所在!
注意Mapper 與 Reducer 類寫成內部類,一定要加static !!!!
留個小任務,檢視一下生成的結果檔案可以發現什麼?
使用TextInputFormat時,進入map 函式中的LongWritable型別的key 代表什麼?
經實驗確認這個key 其實是本行的首字元在整個檔案中的偏移量。
下一篇中介紹瞭如何檢視執行日誌,通過不斷改進一個mapreduce 任務學習hadoop
一個MapReduce 程式示例 細節決定成敗(二) :觀察日誌及 Counter
細節決定成敗啊,不試不知道,一試才能發現平時注意不到的細節。
下面是我用了很快時間寫好的一個程式,注意,這份是有問題的!
點選(此處)摺疊或開啟
-
package wordcount;
-
-
import java.io.IOException;
-
-
import org.apache.commons.lang.StringUtils;
-
import org.apache.hadoop.conf.Configuration;
-
import org.apache.hadoop.conf.Configured;
-
import org.apache.hadoop.fs.Path;
-
import org.apache.hadoop.io.LongWritable;
-
import org.apache.hadoop.io.Text;
-
import org.apache.hadoop.mapreduce.Job;
-
import org.apache.hadoop.mapreduce.Mapper;
-
import org.apache.hadoop.mapreduce.Reducer;
-
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
-
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
-
import org.apache.hadoop.util.Tool;
-
import org.apache.hadoop.util.ToolRunner;
-
import org.apache.log4j.Logger;
-
-
public class MyWordCountJob extends Configured implements Tool {
-
Logger log = Logger.getLogger(MyWordCountJob.class);
-
-
public class MyWordCountMapper extends
-
Mapper<LongWritable, Text, LongWritable, Text> {
-
Logger log = Logger.getLogger(MyWordCountJob.class);
-
-
LongWritable mapKey = new LongWritable();
-
Text mapValue = new Text();
-
@Override
-
protected void map(LongWritable key, Text value, Context context)
-
throws IOException, InterruptedException {
-
mapKey.set(key.get());
-
mapValue.set(value.toString());
-
log.info("Mapper: mapKey--" + mapKey.get() + "mapValue --"+ mapValue.toString());
-
context.write(mapKey, mapValue);
-
}
-
-
}
-
-
public class MyWordCountReducer extends Reducer<LongWritable, Text, LongWritable, Text> {
-
-
@Override
-
protected void reduce(LongWritable key, Iterable<Text> values,Context context)
-
throws IOException, InterruptedException {
-
for(Text value :values)
-
context.write(key, value);
-
}
-
}
-
-
@Override
-
public int run(String[] args) throws Exception {
-
log.info("begin to run");
-
Job job = Job.getInstance(getConf(), "MyWordCountJob");
-
job.setJarByClass(MyWordCountJob.class);
-
-
Path inPath = new Path("demos/pigdemo.txt");
-
Path outPath = new Path("demos/pigdemoOut.txt");
-
-
outPath.getFileSystem(getConf()).delete(outPath,true);
-
TextInputFormat.setInputPaths(job, inPath);
-
TextOutputFormat.setOutputPath(job, outPath);
-
-
-
job.setMapperClass(MyWordCountJob.MyWordCountMapper.class);
-
job.setReducerClass(MyWordCountJob.MyWordCountReducer.class);
-
job.setInputFormatClass(TextInputFormat.class);
-
job.setOutputFormatClass(TextOutputFormat.class);
-
-
job.setMapOutputKeyClass(LongWritable.class);
-
job.setMapOutputValueClass(Text.class);
-
job.setOutputKeyClass(LongWritable.class);
-
job.setOutputValueClass(Text.class);
-
return job.waitForCompletion(true)?0:1;
-
}
-
public static void main(String [] args){
-
int result = 0;
-
try {
-
result = ToolRunner.run(new Configuration(), new MyWordCountJob(), args);
-
} catch (Exception e) {
-
e.printStackTrace();
-
}
-
System.exit(result);
-
}
-
- }
點選(此處)摺疊或開啟
-
16/05/10 22:43:46 INFO mapreduce.Job: Running job: job_1462517728035_0033
-
16/05/10 22:43:54 INFO mapreduce.Job: Job job_1462517728035_0033 running in uber mode : false
-
16/05/10 22:43:54 INFO mapreduce.Job: map 0% reduce 0%
-
16/05/10 22:43:58 INFO mapreduce.Job: Task Id : attempt_1462517728035_0033_m_000000_0, Status : FAILED
-
Error: java.lang.RuntimeException: java.lang.NoSuchMethodException: wordcount.MyWordCountJob$MyWordCountMapper.<init>()
-
at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:131)
-
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:721)
-
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:339)
-
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:162)
-
at java.security.AccessController.doPrivileged(Native Method)
-
at javax.security.auth.Subject.doAs(Subject.java:396)
-
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1491)
-
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:157)
-
Caused by: java.lang.NoSuchMethodException: wordcount.MyWordCountJob$MyWordCountMapper.<init>()
-
at java.lang.Class.getConstructor0(Class.java:2706)
-
at java.lang.Class.getDeclaredConstructor(Class.java:1985)
-
at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:125)
-
... 7 more
-
-
16/05/10 22:44:02 INFO mapreduce.Job: Task Id : attempt_1462517728035_0033_m_000000_1, Status : FAILED
-
Error: java.lang.RuntimeException: java.lang.NoSuchMethodException: wordcount.MyWordCountJob$MyWordCountMapper.<init>()
-
at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:131)
-
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:721)
-
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:339)
-
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:162)
-
at java.security.AccessController.doPrivileged(Native Method)
-
at javax.security.auth.Subject.doAs(Subject.java:396)
-
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1491)
-
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:157)
-
Caused by: java.lang.NoSuchMethodException: wordcount.MyWordCountJob$MyWordCountMapper.<init>()
-
at java.lang.Class.getConstructor0(Class.java:2706)
-
at java.lang.Class.getDeclaredConstructor(Class.java:1985)
-
at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:125)
-
... 7 more
-
-
16/05/10 22:44:07 INFO mapreduce.Job: Task Id : attempt_1462517728035_0033_m_000000_2, Status : FAILED
-
Error: java.lang.RuntimeException: java.lang.NoSuchMethodException: wordcount.MyWordCountJob$MyWordCountMapper.<init>()
-
at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:131)
-
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:721)
-
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:339)
-
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:162)
-
at java.security.AccessController.doPrivileged(Native Method)
-
at javax.security.auth.Subject.doAs(Subject.java:396)
-
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1491)
-
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:157)
-
Caused by: java.lang.NoSuchMethodException: wordcount.MyWordCountJob$MyWordCountMapper.<init>()
-
at java.lang.Class.getConstructor0(Class.java:2706)
-
at java.lang.Class.getDeclaredConstructor(Class.java:1985)
-
at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:125)
-
... 7 more
-
-
16/05/10 22:44:14 INFO mapreduce.Job: map 100% reduce 100%
-
16/05/10 22:44:14 INFO mapreduce.Job: Job job_1462517728035_0033 failed with state FAILED due to: Task failed task_1462517728035_0033_m_000000
-
Job failed as tasks failed. failedMaps:1 failedReduces:0
-
-
16/05/10 22:44:15 INFO mapreduce.Job: Counters: 6
-
Job Counters
-
Failed map tasks=4
-
Launched map tasks=4
-
Other local map tasks=3
-
Data-local map tasks=1
-
Total time spent by all maps in occupied slots (ms)=99584
- Total time spent by all reduces in occupied slots (ms)=0
上面的問題百思不得甚解,完全不知道什麼地方錯了。
然後跟之前copy的程式碼進行比對。終於找出了問題所在!
注意Mapper 與 Reducer 類寫成內部類,一定要加static !!!!
留個小任務,檢視一下生成的結果檔案可以發現什麼?
使用TextInputFormat時,進入map 函式中的LongWritable型別的key 代表什麼?
經實驗確認這個key 其實是本行的首字元在整個檔案中的偏移量。
下一篇中介紹瞭如何檢視執行日誌,通過不斷改進一個mapreduce 任務學習hadoop
一個MapReduce 程式示例 細節決定成敗(二) :觀察日誌及 Counter
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30066956/viewspace-2107549/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 一個MapReduce 程式示例 細節決定成敗(五) :Partitioner
- 一個MapReduce 程式示例 細節決定成敗(九):RawComparator
- 一個MapReduce 程式示例 細節決定成敗(八):TotalOrderPartitioner
- 一個MapReduce 程式示例 細節決定成敗(六) :CombineFileInputFormatORM
- 一個MapReduce 程式示例 細節決定成敗(三) :Combiner
- 一個MapReduce 程式示例 細節決定成敗(二) :觀察日誌及 Counter
- 一個MapReduce 程式示例 細節決定成敗(七) :自定義Key 及RecordReader
- 細節決定成敗 MapReduce任務實戰 Map Join
- 細節決定成敗 MapReduce任務實戰 Reduce Join
- 細節決定成敗 MapReduce任務實戰 倒排索引索引
- 第五章 Vlookup函式示例-細節決定成敗函式
- 細節決定成敗!APP設計不容忽視的20個細節APP
- 如何讓程式設計師幸福工作:細節決定成敗程式設計師
- 面試:黃金法則——細節決定成敗面試
- Java集合詳解8:Java集合類細節精講,細節決定成敗Java
- 開發者談F2P模式:細節決定成敗模式
- 邦芒簡歷:求職簡歷細節決定成敗求職
- Python讀書筆記:細節決定成敗(2)Python筆記
- Python讀書筆記:細節決定成敗(1)Python筆記
- 汪峰FIIL Diva智慧耳機究竟如何?細節決定成敗
- 細節決定ERP專案啟動會的成敗
- 細節決定成敗,不容忽視的10道Node面試題面試題
- 細節決定成敗——無CSS時網頁的可讀性CSS網頁
- 軟體設計是怎樣煉成的(7)——細節決定成敗(詳細設計)
- 一個簡單的MapReduce示例(多個MapReduce任務處理)
- 【原創】構建高效能ASP.NET站點之三 細節決定成敗ASP.NET
- 【2024-03-06】細節成敗
- 細節決定一切-多工控制檔案有感
- 決定開發者面試成敗的 3 個問題面試
- Laravel 的一個命名細節分享Laravel
- 一個小的技術細節
- Hadoop 除錯第一個mapreduce程式過程詳細記錄總結Hadoop除錯
- AutoCAD 2024:細節決定成敗,精準設計從這裡開始 mac/win啟用版Mac
- MapReduce 程式設計模型 & WordCount 示例程式設計模型
- Node 中如何引入一個模組及其細節
- 一個4節點Hadoop叢集的配置示例Hadoop
- 領導方式決定團隊成敗 (轉)
- 細化特徵也決定了這個市場不可能一特徵