1. 程式人生 > >《Hadoop 權威指南 - 大資料的儲存與分析》學習筆記

《Hadoop 權威指南 - 大資料的儲存與分析》學習筆記

第一章 初識Hadoop

1.2 資料的儲存與分析

對多個硬碟中的資料並行進行讀/寫資料,有以下兩個重要問題:

  1. 硬體故障問題。解決方案:複製(replication),系統儲存資料的副本(replica)。
  2. 以某種方式結合大部分資料來共同完成分析。MapReduce 提出一個程式設計模型,該模型抽象出這些硬體讀/寫問題,並且將其轉換成對一個數據集(由鍵-值對組成)的計算。
    簡而言之,Hadoop 為我們提供了一個儲存和分析平臺。

1.5 關係型資料庫和Hadoop 的區別

  1. 它們所操作的資料集的結構化程度。Hadoop 對 非結構化(unstructured data)和 半結構化(semi-structured data)資料非常有效。Web 伺服器日誌就是典型的非規範化的資料記錄,這就是Hadoop 非常適合於分析各種日誌的原因。

第二章 關於MapReduce

2.3 使用Hadoop 來分析資料

  1. MapReduce 任務分為兩個處理階段。每個階段都是以鍵值對作為輸入輸出。 對程式設計師來說, 需要寫兩個函式:map 函式 和 reduce 函式。好友一個MaperReduce 作業。
  2. Java MapReduce:
    Mapper 函式:

public class MaxTemperatureMapper extends Mapper {

private static final int MISSING = 9999;

@Override
protected void map(Object key, Object value, Context context) throws IOException, InterruptedException {
    String line = value.toString();
    String year = line.substring(15, 19);
    int airTemperature;
    if (line.charAt(87) == '+') {
        airTemperature = Integer.parseInt(line.substring(88, 92));
    }else {
        airTemperature = Integer.parseInt(line.substring(87, 92));
    }
    String quality = line.substring(92, 93);
    if (airTemperature != MISSING && quality.matches("[01459]")) {
        context.write(new Text(year), new IntWritable(airTemperature));
    };
}

}

Reduce 函式:

import java.io.IOException;

public class MaxTemperatureReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
    @Override
    protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
        int maxValue = Integer.MIN_VALUE;
        for (IntWritable value : values) {
            maxValue = Math.max(maxValue, value.get());
        }
        context.write(key, new IntWritable(maxValue));
    }
}


public class MaxTemperatureDemo {
    public static void main(String[] args) throws Exception {
        Job job = new Job();
        job.setJarByClass(MaxTemperatureDemo.class);
        job.setJobName("Max temperature");

    FileInputFormat.addInputPath(job, new Path(args[0]));
    FileOutputFormat.setOutputPath(job, new Path(args[1]));
    job.setMapperClass(MaxTemperatureMapper.class);
    job.setReducerClass(MaxTemperatureReducer.class);

    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(IntWritable.class);
}
}
  1. LongWritable — Long, Text – -String, IntWritable — Integer
  2. job 作業日誌關鍵字: job_local26392882
  3. mapper 任務 task 日誌關鍵字: attempt_local26392882_001_m_0000_0
  4. reduce 任務task 日誌關鍵字: attempt_local26392882_001_r_0000_0

2.4 橫向擴充套件

  1. 作業(job): 客戶端需要執行的一個工作單元。包括輸入資料,MapReduce 程式和配置資訊。
  2. Hadoop 將作業分成若干個任務(task)。任務包括兩類:map(任務),reduce(任務)。
  3. 任務執行在叢集的節點上,由YARN 進行排程。