目录
1.HDFS(Hadoop Distributed File System):
3.YARN(Yet Another Resource Negotiator):
一、Hadoop的简介
Hadoop的架构是一个设计用于处理大规模数据集的分布式系统基础架构。其核心组件包括Hadoop Distributed File System(HDFS)和MapReduce,以及作为资源管理和任务调度的YARN(Yet Another Resource Negotiator)。以下是Hadoop架构的详细描述:
1.HDFS(Hadoop Distributed File System):
- HDFS是Hadoop的分布式文件系统,用于存储大数据集。它采用主从架构,由一个NameNode和多个DataNode组成。
- NameNode负责管理文件系统的元数据,如文件的名称、权限、块信息等。它还负责处理客户端的读写请求,并将这些请求转发给相应的DataNode。
- DataNode负责存储实际的数据块。当客户端需要读取或写入数据时,它会与NameNode进行通信,以获取数据块的位置信息,并与相应的DataNode进行数据传输。
- HDFS具有高容错性,它通过将数据块复制到多个DataNode上来实现数据的冗余备份。当某个DataNode出现故障时,HDFS可以自动从其他DataNode中恢复数据块,保证数据的可靠性和可用性。
2.MapReduce:
- MapReduce是Hadoop的计算框架,用于处理和分析存储在HDFS上的大数据集。它将复杂的计算任务拆分成两个简单的阶段:采用了Map和Reduce两个阶段。在Map阶段,输入数据被切分成若干个小块,并对每个小块进行处理,输出中间结果。而在Reduce阶段,这些中间结果被合并,得到最终的输出结果。
- 在Map阶段,Hadoop将输入数据划分为多个数据块,并将每个数据块分配给集群中的一个或多个节点进行处理。每个节点执行Map任务,对输入数据块进行处理,并生成一系列的中间结果。
- 在Reduce阶段,Hadoop将Map阶段生成的中间结果按照相同的键进行分组,并将这些结果分配给集群中的一个或多个节点进行合并和计算。每个节点执行Reduce任务,对分组后的中间结果进行计算,并生成最终的输出结果。
- MapReduce框架通过并行处理和分布式计算的方式,能够高效地处理大规模数据集,并自动处理节点之间的数据传输和同步。
3.YARN(Yet Another Resource Negotiator):
- YARN是Hadoop的资源管理和任务调度框架,用于管理集群中的计算资源,并将计算任务分配给合适的节点进行处理。
- YARN包括一个ResourceManager和多个NodeManager。ResourceManager负责全局的资源管理和任务调度,它接收客户端提交的计算任务,并根据集群的资源情况将任务分配给合适的NodeManager。NodeManager负责管理单个节点上的资源,并执行ResourceManager分配的计算任务。
- YARN还支持多种计算框架的集成,如Spark、Flink等。这些计算框架可以运行在YARN之上,共享Hadoop集群的计算资源,并通过YARN进行任务调度和资源管理。
二、MapReduce计算每个月份的总销售额
1.引入外部类、接口或其他资源
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import java.io.IOException;
2.map阶段
public class MonthlySales {
public static class MonthlySalesMapper extends Mapper<Object, Text, Text, IntWritable> {
private static Text month = new Text();
private static IntWritable sales = new IntWritable();
public void map(Object key, Text value, Context context) throws IOException, InterruptedException {
// 假设输入值是以空格分隔的,第一个字段是月份,第二个是销售额
String[] fields = value.toString().split(" ");
month.set(fields[0]);
sales.set(Integer.parseInt(fields[1]));
context.write(month, sales);
}
}
3.reduce阶段
public static class MonthlySalesReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
private static IntWritable totalSales = new IntWritable();
public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
int sum = 0;
for (IntWritable val : values) {
sum += val.get();
}
totalSales.set(sum);
context.write(key, totalSales);
}
}
4.main
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
Job job = Job.getInstance(conf, "Monthly Sales");
job.setJarByClass(MonthlySales.class);
job.setMapperClass(MonthlySalesMapper.class);
job.setReducerClass(MonthlySalesReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
//输入路径
FileInputFormat.addInputPath(job, new Path(E:\\pppppp\\Hadoop\\input2\\inputscorestatistics\\subject_score.csv));
//输出路径
FileOutputFormat.setOutputPath(job, new Path(E:\\pppppp\\Hadoop\\output2\\wordcount2));
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}
三、 总结
Hadoop的生态系统非常丰富,包含许多相关工具和技术,如Hive、Pig、HBase等,可以方便地构建复杂的大数据应用。Hadoop的架构通过HDFS实现数据的分布式存储和容错性保障,通过MapReduce实现计算任务的并行处理和分布式计算,通过YARN实现计算资源的统一管理和任务调度。这种架构使得Hadoop能够高效地处理和分析大规模数据集,成为大数据领域的重要工具之一。