Hadoop 简介及应用示例
Hadoop 是一个开源的分布式计算框架,专为大数据处理而设计。它允许用户利用商用硬件集群高效存储和处理海量的数据。Hadoop 的核心组件包括 Hadoop 分布式文件系统(HDFS)和 MapReduce 编程模型。
Hadoop 的架构
Hadoop 的架构主要由以下几个部分组成:
- Hadoop 分布式文件系统(HDFS):负责数据的存储和管理。
- MapReduce:负责数据的处理和计算。
- YARN(Yet Another Resource Negotiator):负责管理资源和作业调度。
以下是这三个组件之间的关系图:
erDiagram
HDFS ||--o{ DataNodes : contains
DataNodes }o--|| NameNode : manages
MapReduce ||--o{ Jobs : executes
Jobs }o--|| YARN : schedules
这个关系图显示了 Hadoop 的各个组件之间的关联:HDFS 存储数据,MapReduce 处理数据,而 YARN 负责资源的管理和作业的调度。
Hadoop 使用示例
为了更好地理解 Hadoop 的工作原理,下面是一个简单的代码示例,演示如何使用 MapReduce 处理文本文件并统计单词频率。
1. Mapper 类
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import java.io.IOException;
public class WordCountMapper extends Mapper<LongWritable, Text, Text, LongWritable> {
private final static LongWritable one = new LongWritable(1);
private Text word = new Text();
@Override
protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
String[] words = value.toString().split("\\s+");
for (String w : words) {
word.set(w);
context.write(word, one);
}
}
}
2. Reducer 类
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
import java.io.IOException;
public class WordCountReducer extends Reducer<Text, LongWritable, Text, LongWritable> {
@Override
protected void reduce(Text key, Iterable<LongWritable> values, Context context) throws IOException, InterruptedException {
long sum = 0;
for (LongWritable val : values) {
sum += val.get();
}
context.write(key, new LongWritable(sum));
}
}
3. 运行主程序
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
public class WordCount {
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
Job job = Job.getInstance(conf, "word count");
job.setJarByClass(WordCount.class);
job.setMapperClass(WordCountMapper.class);
job.setCombinerClass(WordCountReducer.class);
job.setReducerClass(WordCountReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(LongWritable.class);
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}
Hadoop 执行流程
以下是 Hadoop 中 MapReduce 的执行流程序列图:
sequenceDiagram
participant Client
participant YARN
participant NodeManager
participant TaskTracker
Client->>YARN: Submit job
YARN->>Client: Acknowledge submission
YARN->>NodeManager: Allocate resources
NodeManager->>TaskTracker: Start Mapper tasks
TaskTracker->>YARN: Mapper completed
YARN->>NodeManager: Assign Reducer tasks
NodeManager->>TaskTracker: Start Reducer tasks
TaskTracker->>YARN: Reducer completed
YARN->>Client: Job finished
在这个序列图中,客户端向 YARN 提交作业,YARN 分配资源并启动 Mapper 和 Reducer 任务。最终,YARN 通知客户端作业完成。
结尾
Hadoop 提供了强大而灵活的工具来处理大规模的数据集。通过分布式计算,用户能够轻松处理复杂的数据分析任务。掌握 Hadoop 的基本概念和使用方法,将有助于更好地利用大数据技术,推动业务的发展。希望这篇文章能够为你深入理解 Hadoop 的原理和应用提供帮助!