一、Hadoop 简介

Apache Hadoop 是一个开源的分布式计算框架,专为大规模数据处理设计,具有以下特点:

  • 分布式存储:通过 HDFS(Hadoop Distributed File System)实现数据的分块存储和冗余备份。
  • 分布式计算:基于 MapReduce 编程模型,支持并行处理海量数据。
  • 高容错性:数据自动复制,节点故障不影响任务执行。
  • 可扩展性:从单节点扩展到数千节点集群。

二、环境准备

1. 前置条件
  • 操作系统:CentOS 7+(其他 Linux 发行版类似)。
  • Java:Hadoop 依赖 JDK 1.8+,需提前安装并配置环境变量。
  • SSH 免密登录:所有节点间需配置 SSH 免密登录(生产环境建议创建专用用户,如 hadoop)。
2. 下载 Hadoop

从官网或镜像站下载 Hadoop 安装包(如 hadoop-3.3.5.tar.gz):

wget https://archive.apache.org/dist/hadoop/core/hadoop-3.3.5/hadoop-3.3.5.tar.gz
tar -xzf hadoop-3.3.5.tar.gz -C /usr/local/
ln -s /usr/local/hadoop-3.3.5 /usr/local/hadoop
3. 配置环境变量

~/.bashrc 中添加:

export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export JAVA_HOME=/usr/local/jdk1.8.0_401

使配置生效:

source ~/.bashrc

三、Hadoop 集群搭建

1. 单机模式(开发测试)

直接运行 Hadoop 命令,无需额外配置:

start-dfs.sh  # 启动 HDFS
start-yarn.sh  # 启动 YARN
jps  # 查看进程(NameNode, DataNode, ResourceManager 等)
2. 伪分布式模式(单节点模拟集群)

编辑 etc/hadoop/core-site.xml

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

编辑 etc/hadoop/hdfs-site.xml

<property>
  <name>dfs.replication</name>
  <value>1</value>  # 单机模式仅需 1 个副本
</property>

启动集群:

start-dfs.sh
start-yarn.sh
3. 多节点集群模式
  1. 配置主机名与 IP 映射(所有节点修改 /etc/hosts):
    192.168.245.128 hadoop01
    192.168.245.129 hadoop02
    192.168.245.130 hadoop03
    
  2. 配置主节点(NameNode)
    • 修改 core-site.xml
      <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop01:9000</value>
      </property>
      
    • 修改 hdfs-site.xml
      <property>
        <name>dfs.namenode.name.dir</name>
        <value>/data/hadoop/dfs/name</value>
      </property>
      <property>
        <name>dfs.datanode.data.dir</name>
        <value>/data/hadoop/dfs/data</value>
      </property>
      <property>
        <name>dfs.replication</name>
        <value>3</value>  # 副本数等于 DataNode 数量
      </property>
      
  3. 同步配置文件到所有节点
    scp -r /usr/local/hadoop/etc/hadoop hadoop02:/usr/local/hadoop/etc/
    scp -r /usr/local/hadoop/etc/hadoop hadoop03:/usr/local/hadoop/etc/
    
  4. 格式化 NameNode(仅首次启动时执行):
    hdfs namenode -format
    
  5. 启动集群
    start-dfs.sh  # 启动 HDFS
    start-yarn.sh  # 启动 YARN
    

四、HDFS 操作

1. 上传文件到 HDFS
hadoop fs -mkdir /user/input
hadoop fs -put local_file.txt /user/input/
2. 查看文件内容
hadoop fs -cat /user/input/local_file.txt
3. 删除文件
hadoop fs -rm -r /user/input/local_file.txt
4. 浏览器查看 HDFS

访问 http://hadoop01:9870 查看 HDFS 状态。

五、MapReduce 编程

1. WordCount 示例
  1. 编写代码(Java 示例):
    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(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);
      }
    }
    
  2. 编译与提交任务
    javac -classpath $HADOOP_HOME/share/hadoop/common/hadoop-common-3.3.5.jar:$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-client-core-3.3.5.jar -d wordcount_classes WordCount.java
    jar -cvf wordcount.jar -C wordcount_classes/ .
    hadoop jar wordcount.jar WordCount /user/input/local_file.txt /user/output/
    
  3. 查看输出
    hadoop fs -cat /user/output/part-r-00000
    

六、常见问题与优化

1. 问题排查
  • NameNode 无法启动:检查 core-site.xml 中的 fs.defaultFS 是否正确。
  • DataNode 失联:确保防火墙关闭,且 dfs.datanode.data.dir 目录权限正确。
  • 任务执行失败:查看日志($HADOOP_HOME/logs)或 Web UI(http://hadoop01:8088)。
2. 性能优化
  • 调整副本数:根据集群规模设置 dfs.replication
  • 启用压缩:使用 SnappyGzip 压缩 MapReduce 输出。
  • 资源调优:通过 yarn.scheduler.maximum-allocation-mbyarn.scheduler.minimum-allocation-mb 调整资源分配。

七、学习资源

  1. 官方文档:https://hadoop.apache.org/docs/current/
  2. 教程网站
  3. 实践平台

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐