Hadoop集群的扩展性与容错能力

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
简介: 【8月更文第28天】Hadoop 是一种用于处理和存储大规模数据集的开源软件框架。它由两个核心组件构成:Hadoop 分布式文件系统 (HDFS) 和 MapReduce 计算框架。Hadoop 的设计考虑了可扩展性和容错性,使其成为大规模数据处理的理想选择。

引言

Hadoop 是一种用于处理和存储大规模数据集的开源软件框架。它由两个核心组件构成:Hadoop 分布式文件系统 (HDFS) 和 MapReduce 计算框架。Hadoop 的设计考虑了可扩展性和容错性,使其成为大规模数据处理的理想选择。

Hadoop的可扩展性

Hadoop 的可扩展性是指其能够轻松地通过添加更多的节点来扩展存储容量和处理能力。这种水平扩展的能力是 Hadoop 最大的优势之一。

HDFS的可扩展性
  • 数据块大小:HDFS 默认的数据块大小为 128MB(或 256MB,取决于版本),这意味着每个文件被分割成多个块,每个块都可以存储在集群的不同节点上。这种设计使得 HDFS 能够高效地处理大型文件。
  • 复制因子:每个数据块都会被复制到集群内的多个节点上,默认复制因子为 3。这不仅提高了数据的可用性,还允许系统通过添加更多节点来扩展存储容量。
MapReduce的可扩展性
  • 任务划分:MapReduce 框架将数据处理任务划分为多个小任务(map 和 reduce),这些任务可以并行执行。这意味着随着集群规模的增长,处理能力也会线性增长。
  • 动态资源分配:Hadoop YARN(Yet Another Resource Negotiator)负责管理集群的资源,它可以根据需要动态地分配资源给不同的应用程序,从而提高了资源利用率。

Hadoop的容错能力

Hadoop 的设计也考虑到了数据的一致性和高可用性。通过数据复制、节点故障检测和自动恢复机制,Hadoop 可以有效地处理节点故障。

HDFS的容错机制
  • 数据块复制:如前所述,每个数据块会被复制到集群中的多个节点。如果某个节点失效,系统可以从其他节点检索数据。
  • 心跳机制:NameNode 定期接收来自 DataNodes 的心跳信号,以检测节点是否存活。如果 DataNode 失效,NameNode 会标记该节点为不可用,并重新复制丢失的数据块。
  • 故障恢复:当 NameNode 发现数据块丢失时,它会自动触发数据块的复制,以保持预定的复制因子。
MapReduce的容错机制
  • 任务重试:如果 map 或 reduce 任务失败,JobTracker(或在 YARN 中的 ResourceManager)会自动重新分配任务到另一个节点。
  • 状态检查点:在执行过程中,reduce 任务的状态会被定期保存,以防止任务执行中断后需要完全重新开始。
  • 故障转移:如果 JobTracker 失效,可以配置一个备用的 JobTracker 来接管任务。

示例代码

下面是一个简单的 Java 代码示例,展示如何使用 Hadoop MapReduce API 创建一个简单的 word count 程序。此程序能够展示 Hadoop 如何处理数据和容错。

import java.io.IOException;
import java.util.StringTokenizer;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
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;

public class WordCount {
   

  public static class TokenizerMapper
       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 {
   
      StringTokenizer itr = new StringTokenizer(value.toString());
      while (itr.hasMoreTokens()) {
   
        word.set(itr.nextToken());
        context.write(word, one);
      }
    }
  }

  public static class IntSumReducer
       extends Reducer<Text,IntWritable,Text,IntWritable> {
   
    private IntWritable result = 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();
      }
      result.set(sum);
      context.write(key, result);
    }
  }

  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(TokenizerMapper.class);
    job.setCombinerClass(IntSumReducer.class);
    job.setReducerClass(IntSumReducer.class);
    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(IntWritable.class);
    FileInputFormat.addInputPath(job, new Path(args[0]));
    FileOutputFormat.setOutputPath(job, new Path(args[1]));
    System.exit(job.waitForCompletion(true) ? 0 : 1);
  }
}

总结

Hadoop 通过其独特的设计提供了强大的可扩展性和容错能力。通过使用 HDFS 的数据块复制和 MapReduce 的任务重试机制,Hadoop 能够在节点故障的情况下继续运行并保证数据的完整性。此外,Hadoop 还可以通过添加更多的节点来扩展其存储和处理能力,这使得它非常适合处理大规模的数据集。

目录
相关文章
|
17天前
|
分布式计算 Kubernetes Hadoop
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
大数据-82 Spark 集群模式启动、集群架构、集群管理器 Spark的HelloWorld + Hadoop + HDFS
94 6
|
18天前
|
分布式计算 Hadoop Shell
Hadoop-35 HBase 集群配置和启动 3节点云服务器 集群效果测试 Shell测试
Hadoop-35 HBase 集群配置和启动 3节点云服务器 集群效果测试 Shell测试
45 4
|
18天前
|
SQL 分布式计算 Hadoop
Hadoop-37 HBase集群 JavaAPI 操作3台云服务器 POM 实现增删改查调用操作 列族信息 扫描全表
Hadoop-37 HBase集群 JavaAPI 操作3台云服务器 POM 实现增删改查调用操作 列族信息 扫描全表
27 3
|
18天前
|
分布式计算 Hadoop Shell
Hadoop-36 HBase 3节点云服务器集群 HBase Shell 增删改查 全程多图详细 列族 row key value filter
Hadoop-36 HBase 3节点云服务器集群 HBase Shell 增删改查 全程多图详细 列族 row key value filter
43 3
|
18天前
|
SQL 存储 分布式计算
Hadoop-16-Hive HiveServer2 HS2 允许客户端远程执行HiveHQL HCatalog 集群规划 实机配置运行
Hadoop-16-Hive HiveServer2 HS2 允许客户端远程执行HiveHQL HCatalog 集群规划 实机配置运行
36 3
|
18天前
|
SQL 分布式计算 Hadoop
Hadoop-12-Hive 基本介绍 下载安装配置 MariaDB安装 3台云服务Hadoop集群 架构图 对比SQL HQL
Hadoop-12-Hive 基本介绍 下载安装配置 MariaDB安装 3台云服务Hadoop集群 架构图 对比SQL HQL
38 3
|
18天前
|
分布式计算 资源调度 Hadoop
Hadoop-10-HDFS集群 Java实现MapReduce WordCount计算 Hadoop序列化 编写Mapper和Reducer和Driver 附带POM 详细代码 图文等内容
Hadoop-10-HDFS集群 Java实现MapReduce WordCount计算 Hadoop序列化 编写Mapper和Reducer和Driver 附带POM 详细代码 图文等内容
67 3
|
18天前
Hadoop-09-HDFS集群 JavaClient 代码上手实战!详细附代码 安装依赖 上传下载文件 扫描列表 PUT GET 进度条显示(二)
Hadoop-09-HDFS集群 JavaClient 代码上手实战!详细附代码 安装依赖 上传下载文件 扫描列表 PUT GET 进度条显示(二)
34 3
|
18天前
|
SQL 分布式计算 Hadoop
Hadoop-19 Flume Agent批量采集数据到HDFS集群 监听Hive的日志 操作则把记录写入到HDFS 方便后续分析
Hadoop-19 Flume Agent批量采集数据到HDFS集群 监听Hive的日志 操作则把记录写入到HDFS 方便后续分析
37 2
|
18天前
|
SQL 存储 数据管理
Hadoop-15-Hive 元数据管理与存储 Metadata 内嵌模式 本地模式 远程模式 集群规划配置 启动服务 3节点云服务器实测
Hadoop-15-Hive 元数据管理与存储 Metadata 内嵌模式 本地模式 远程模式 集群规划配置 启动服务 3节点云服务器实测
40 2