Hadoop 技术
Hadoop 是一个分布式系统基础架构,用于存储和处理大规模数据集。
HDFS
概述
HDFS(Hadoop Distributed File System)是 Hadoop 的分布式文件系统,具有高容错性和高吞吐量的特点。
架构组成
- NameNode: 管理文件系统的命名空间,维护文件系统树和元数据
- DataNode: 存储实际的数据块,执行数据的读写操作
- Secondary NameNode: 定期合并 NameNode 的 edit log 和 fsimage
核心概念
java
// HDFS 文件写入流程
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);
Path path = new Path("/user/hadoop/example.txt");
FSDataOutputStream out = fs.create(path);
out.write("Hello, HDFS!".getBytes());
out.close();
fs.close();特性
- 分块存储: 默认块大小为 128MB
- 副本机制: 默认 3 个副本
- 数据本地性: 计算向数据移动
MapReduce
概述
MapReduce 是一种分布式计算框架,采用分而治之的思想处理大规模数据。
执行流程
- Split: 将输入数据分割成多个分片
- Map: 对每个分片进行映射处理
- Shuffle: 对 Map 输出进行排序和分组
- Reduce: 对分组后的数据进行汇总
WordCount 示例
java
public class WordCount {
public static class Map extends Mapper<LongWritable, Text, Text, IntWritable> {
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
public void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException {
String line = value.toString();
StringTokenizer tokenizer = new StringTokenizer(line);
while (tokenizer.hasMoreTokens()) {
word.set(tokenizer.nextToken());
context.write(word, one);
}
}
}
public static class Reduce extends Reducer<Text, IntWritable, Text, IntWritable> {
public void reduce(Text key, Iterable<IntWritable> values, Context context)
throws IOException, InterruptedException {
int sum = 0;
for (IntWritable val : values) {
sum += val.get();
}
context.write(key, new IntWritable(sum));
}
}
}YARN
概述
YARN(Yet Another Resource Negotiator)是 Hadoop 的资源管理系统。
架构组成
- ResourceManager: 集群资源的管理者
- NodeManager: 单个节点的资源管理者
- ApplicationMaster: 管理单个应用的执行
工作流程
- Client 提交作业到 ResourceManager
- ResourceManager 分配第一个 Container 运行 ApplicationMaster
- ApplicationMaster 向 ResourceManager 请求资源
- ResourceManager 分配 Container 给 ApplicationMaster
- ApplicationMaster 启动任务执行