◢ <實作十九> | <回課程大綱> ▲ | <實作二十一> ◣
實作二十 Lab20
預設的輸入格式
TextInputFormat
請先連線至 nodeN.3du.me , N 為您的報名編號
- 為了觀察 FileInputFormat 的行為,我們使用 update jar 的技巧,對 TextInputFormat.java 做了小幅度的修改。
- 官方實作的 TextInputFormat.java 有兩個(一個新版,一個舊版)
~$ find ~/hadoop/src/ -name "TextInputFormat.java" /home/$USER/hadoop/src/mapred/org/apache/hadoop/mapreduce/lib/input/TextInputFormat.java /home/$USER/hadoop/src/mapred/org/apache/hadoop/mapred/TextInputFormat.java
- 這裡我們修改新版的 TextInputFormat.java
-
TextInputFormat.java
old new 38 38 public RecordReader<LongWritable, Text> 39 39 createRecordReader(InputSplit split, 40 40 TaskAttemptContext context) { 41 System.err.println("TextInputFormat.createRecordReader()"); 41 42 return new LineRecordReader(); 42 43 } 43 44 44 45 @Override 45 46 @Override 46 47 protected boolean isSplitable(JobContext context, Path file) { 48 System.err.println("TextInputFormat.isSplitable(context," + file.toString() + ")"); 47 49 CompressionCodec codec = 48 50 new CompressionCodecFactory(context.getConfiguration()).getCodec(file);
-
- 讓我們先來觀察一下執行的結果
unset HADOOP_CONF_DIR cd ~/hadoop_labs/lab011 ant cd ~/hadoop_labs/lab010 mkdir -p my_input echo "A B C D" > my_input/input1 echo "C D A B" > my_input/input2 hadoop fs -put my_input my_input sed -i 's#setNumReduceTasks(0)#setNumReduceTasks(1)#g' ~/hadoop_labs/lab010/src/WordCount.java ant hadoop jar WordCount.jar my_input my_output
- 切換到 Local Mode,再執行一次,並觀察有什麼差異。
export HADOOP_CONF_DIR=~/hadoop/conf.local/ hadoop jar WordCount.jar my_input my_output unset HADOOP_CONF_DIR
- Reference:
實作習題
<問題 1> 當運行於全分散式模式,請問執行任務時,您觀察到幾行 "TextInputFormat.isSplitable"
<問題 2> 當運行於全分散式模式,請問執行任務時,您觀察到幾行 "TextInputFormat.createRecordReader"
<問題 3> 當運行於單機模式,請問執行任務時,您觀察到幾行 "TextInputFormat.isSplitable"
<問題 4> 當運行於單機模式,請問執行任務時,您觀察到幾行 "TextInputFormat.createRecordReader"
Last modified 11 years ago
Last modified on Apr 11, 2014, 11:34:15 PM