wiki:Hinet131105/Lab20

Version 1 (modified by jazz, 11 years ago) (diff)

--

◢ <實作十九> | <回課程大綱> ▲ | <實作二十一> ◣

實作二十 Lab20

預設的輸入格式
TextInputFormat

請先連線至 nodeN.3du.me , N 為您的報名編號
  • 為了觀察 FileInputFormat 的行為,我們使用 update jar 的技巧,對 TextInputFormat.java 做了小幅度的修改。
  • 官方實作的 TextInputFormat.java 有兩個(一個新版,一個舊版)
    user@node1:~$ find /home/user/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  
      3838  public RecordReader<LongWritable, Text>
      3939    createRecordReader(InputSplit split,
      4040                       TaskAttemptContext context) {
       41    System.err.println("TextInputFormat.createRecordReader()");
      4142    return new LineRecordReader();
      4243  }
      4344
      4445  @Override
      4546  @Override
      4647  protected boolean isSplitable(JobContext context, Path file) {
       48    System.err.println("TextInputFormat.isSplitable(context," + file.toString() + ")");
      4749    CompressionCodec codec =
      4850      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
    
  • export HADOOP_CONF_DIR=~/hadoop/conf.local/
    hadoop jar WordCount.jar my_input my_output
    unset HADOOP_CONF_DIR
    

實作習題

<問題 1> 當運行於全分散式模式,請問執行任務時,您觀察到幾行 "TextInputFormat.isSplitable"

<問題 2> 當運行於全分散式模式,請問執行任務時,您觀察到幾行 "TextInputFormat.createRecordReader"

<問題 3> 當運行於單機模式,請問執行任務時,您觀察到幾行 "TextInputFormat.isSplitable"

<問題 4> 當運行於單機模式,請問執行任務時,您觀察到幾行 "TextInputFormat.createRecordReader"