Hadoop四大模块

Apache Hadoop是一个用于可靠数据存储和处理大规模数据集的开源框架。它由四个核心模块组成:Hadoop Common、Hadoop Distributed File System(HDFS)、Hadoop YARN(Yet Another Resource Negotiator)和Hadoop MapReduce。这些模块共同提供了一个分布式、可扩展、高可用的平台,用于处理大规模数据集。

Hadoop Common

Hadoop Common模块是所有Hadoop组件的基础,它提供了一组通用的工具和库,用于支持其他Hadoop模块的功能。它包含一些重要的组件,如Hadoop的配置系统、日志框架、RPC(远程过程调用)系统等。

配置系统

Hadoop使用一个基于XML的配置系统,它允许用户通过修改配置文件来控制集群的行为。配置文件通常存储在Hadoop集群的主节点上,并在启动集群时被加载。下面是一个简单的Hadoop配置文件的示例:

<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://localhost:9000</value>
  </property>

  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
</configuration>

日志框架

Hadoop使用Apache Log4j作为其日志框架,它允许开发人员在代码中插入日志语句来记录程序的执行情况。通过配置日志级别,开发人员可以控制日志输出的详细程度。下面是一个使用Log4j记录日志的示例代码:

import org.apache.log4j.Logger;

public class Example {
  private static final Logger logger = Logger.getLogger(Example.class);

  public void doSomething() {
    logger.info("Doing something...");
    // do something here
    logger.info("Something done.");
  }
}

Hadoop Distributed File System (HDFS)

HDFS是Hadoop的分布式文件系统,它被设计用于存储大规模数据集,并提供高吞吐量的数据访问。HDFS将数据划分为多个块,并将这些块分布到不同的物理节点上,从而实现数据的并行处理。下面是一个使用HDFS Java API读取文件的示例:

import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class ReadFile {
  public static void main(String[] args) throws IOException {
    Configuration conf = new Configuration();
    FileSystem fs = FileSystem.get(conf);
    Path filePath = new Path("/path/to/file");
    InputStream inputStream = fs.open(filePath);

    try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) {
      String line;
      while ((line = reader.readLine()) != null) {
        System.out.println(line);
      }
    }
  }
}

Hadoop YARN

YARN是Hadoop的资源管理器,它负责分配和管理集群中的计算资源。YARN允许用户在集群上运行各种类型的应用程序,而不仅仅是MapReduce作业。下面是一个使用YARN API提交一个简单的MapReduce作业的示例:

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.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
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 IOException, ClassNotFoundException, InterruptedException {
    Configuration conf = new Configuration();
    Job job = Job.getInstance(conf, "word count");
    job.setJarByClass(WordCount.class);
    job.setMapperClass(WordCountMapper.class);
    job.setReducerClass(WordCountReducer.class);
    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(IntWritable.class);
    FileInputFormat.addInputPath(job, new Path("/path/to/input"));
    FileOutputFormat.setOutputPath(job, new Path("/path/to/output"));
    System.exit(job.waitForCompletion(true) ? 0 : 1);
  }
}

Hadoop MapReduce

MapReduce是Hadoop的计算模型和编程框架,用于并行处理大规模数据集。它将任务分为两个阶段:Map阶段和Reduce阶段。Map阶段