《Hadoop 權威指南 - 大資料的儲存與分析》學習筆記
阿新 • • 發佈:2018-10-31
第一章 初識Hadoop
1.2 資料的儲存與分析
對多個硬碟中的資料並行進行讀/寫資料,有以下兩個重要問題:
- 硬體故障問題。解決方案:複製(replication),系統儲存資料的副本(replica)。
- 以某種方式結合大部分資料來共同完成分析。MapReduce 提出一個程式設計模型,該模型抽象出這些硬體讀/寫問題,並且將其轉換成對一個數據集(由鍵-值對組成)的計算。
簡而言之,Hadoop 為我們提供了一個儲存和分析平臺。
1.5 關係型資料庫和Hadoop 的區別
- 它們所操作的資料集的結構化程度。Hadoop 對 非結構化(unstructured data)和 半結構化(semi-structured data)資料非常有效。Web 伺服器日誌就是典型的非規範化的資料記錄,這就是Hadoop 非常適合於分析各種日誌的原因。
第二章 關於MapReduce
2.3 使用Hadoop 來分析資料
- MapReduce 任務分為兩個處理階段。每個階段都是以鍵值對作為輸入輸出。 對程式設計師來說, 需要寫兩個函式:map 函式 和 reduce 函式。好友一個MaperReduce 作業。
- 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); } }
- LongWritable — Long, Text – -String, IntWritable — Integer
- job 作業日誌關鍵字: job_local26392882
- mapper 任務 task 日誌關鍵字: attempt_local26392882_001_m_0000_0
- reduce 任務task 日誌關鍵字: attempt_local26392882_001_r_0000_0
2.4 橫向擴充套件
- 作業(job): 客戶端需要執行的一個工作單元。包括輸入資料,MapReduce 程式和配置資訊。
- Hadoop 將作業分成若干個任務(task)。任務包括兩類:map(任務),reduce(任務)。
- 任務執行在叢集的節點上,由YARN 進行排程。