温馨提示×

CentOS Hadoop如何高效部署

小樊
66
2025-09-22 12:08:46
栏目: 智能运维

CentOS环境下Hadoop高效部署指南

一、前置准备:标准化环境是高效部署的基础

1. 硬件规划

  • 集群规模:生产环境建议至少3台节点(1 NameNode + 2 DataNode),若需高可用则增加2台JournalNode(共5台);测试环境可采用单节点或伪分布式部署。
  • 资源配置:每节点推荐4核CPU+8GB内存+50GB SSD(NameNode需更大内存,DataNode侧重磁盘容量);所有节点需静态IP,避免网络波动影响通信。

2. 基础软件安装

  • Java环境:Hadoop依赖Java 8(推荐OpenJDK),所有节点执行:
    sudo yum install -y java-1.8.0-openjdk-devel
    echo 'export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk' >> /etc/profile
    source /etc/profile
    
  • SSH免密登录:在主节点生成密钥对,分发至所有节点,实现无密码通信:
    ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    scp ~/.ssh/authorized_keys user@slave1:~/.ssh/  # 重复至所有从节点
    

3. 系统配置优化

  • 关闭防火墙与SELinux:避免端口拦截,生产环境建议用iptables替代:
    sudo systemctl stop firewalld && sudo systemctl disable firewalld
    sudo setenforce 0
    sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
    
  • 配置hosts文件:所有节点同步映射主机名与IP,确保名称解析一致性:
    echo "192.168.1.101 node1
    192.168.1.102 node2
    192.168.1.103 node3" | sudo tee -a /etc/hosts
    

4. Hadoop安装包准备

  • 从Apache官网下载稳定版本(如3.3.4+),解压至所有节点的统一目录(如/opt/hadoop),并设置所有权:
    wget https://downloads.apache.org/hadoop/common/hadoop-3.3.4/hadoop-3.3.4.tar.gz
    tar -xzvf hadoop-3.3.4.tar.gz -C /opt/
    sudo chown -R user:user /opt/hadoop  # 替换为实际用户
    

二、核心配置:精准调整参数提升性能

1. 环境变量配置

  • 编辑/etc/profile,添加Hadoop路径:
    echo 'export HADOOP_HOME=/opt/hadoop' >> /etc/profile
    echo 'export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin' >> /etc/profile
    source /etc/profile
    

2. 关键配置文件说明

  • core-site.xml:定义HDFS全局访问点与ZooKeeper集群(高可用必备):
    <configuration>
      <property>
        <name>fs.defaultFS</name>
        <value>hdfs://mycluster</value>  <!-- HA逻辑名称 -->
      </property>
      <property>
        <name>ha.zookeeper.quorum</name>
        <value>node1:2181,node2:2181,node3:2181</value>  <!-- ZooKeeper集群 -->
      </property>
    </configuration>
    
  • hdfs-site.xml:配置HA、JournalNode与副本策略(生产环境建议副本数≥3):
    <configuration>
      <property>
        <name>dfs.nameservices</name>
        <value>mycluster</value>
      </property>
      <property>
        <name>dfs.ha.namenodes.mycluster</name>
        <value>nn1,nn2</value>  <!-- 两个NameNode ID -->
      </property>
      <property>
        <name>dfs.namenode.rpc-address.mycluster.nn1</name>
        <value>node1:8020</value>
      </property>
      <property>
        <name>dfs.namenode.rpc-address.mycluster.nn2</name>
        <value>node2:8020</value>
      </property>
      <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://node1:8485;node2:8485;node3:8485/mycluster</value>  <!-- JournalNode共享目录 -->
      </property>
      <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/opt/hadoop/journal</value>  <!-- JournalNode数据目录 -->
      </property>
      <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>  <!-- 开启自动故障转移 -->
      </property>
      <property>
        <name>dfs.replication</name>
        <value>3</value>  <!-- 数据副本数 -->
      </property>
    </configuration>
    
  • yarn-site.xml:配置ResourceManager与NodeManager资源分配:
    <configuration>
      <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>node1</value>  <!-- ResourceManager所在节点 -->
      </property>
      <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>  <!-- Shuffle服务 -->
      </property>
      <property>
        <name>yarn.scheduler.maximum-allocation-mb</name>
        <value>8192</value>  <!-- 单个任务最大内存 -->
      </property>
    </configuration>
    
  • mapred-site.xml:指定MapReduce运行框架为YARN:
    <configuration>
      <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
      </property>
    </configuration>
    

三、启动与验证:确保集群稳定性

1. 格式化NameNode(仅首次启动)

  • 在主NameNode节点执行,初始化HDFS元数据:
    hdfs namenode -format
    

2. 启动集群服务

  • 启动HDFS:
    start-dfs.sh
    
  • 启动YARN:
    start-yarn.sh
    

3. 验证状态

  • 进程检查:使用jps命令查看各节点进程(主节点应有NameNode、ResourceManager;从节点应有DataNode、NodeManager)。
  • Web界面:访问http://node1:9870(HDFS Web UI)和http://node1:8088(YARN Web UI),确认集群状态正常。
  • 功能测试:上传文件至HDFS,验证读写功能:
    hdfs dfs -put /local/file.txt /user/root/
    hdfs dfs -ls /user/root/
    

四、性能优化:挖掘集群潜力

1. HDFS参数调优

  • 块大小调整:根据数据规模设置(大文件用128MB/256MB,小文件用64MB),减少NameNode内存压力:
    <property>
      <name>dfs.blocksize</name>
      <value>256M</value>
    </property>
    
  • 数据本地性:增加DataNode数量,提高数据本地读取率(减少网络传输)。

2. YARN资源优化

  • 内存分配:根据节点资源调整yarn.scheduler.maximum-allocation-mb(如8GB内存节点设置为6GB),避免单个任务占用过多资源。
  • 容器配置:优化yarn.nodemanager.resource.memory-mb(如设置为节点内存的80%),提升资源利用率。

3. 硬件升级

  • 磁盘:使用SSD替代HDD,提升HDFS读写速度(尤其是NameNode的元数据操作)。
  • 网络:采用千兆/万兆以太网,减少节点间通信延迟。

五、高可用配置(生产必选)

1. NameNode高可用(HA)

  • 组件:需部署2个NameNode(Active/Standby)、3个JournalNode(奇数节点保证仲裁)、ZooKeeper集群(监控NameNode状态)。
  • 配置步骤:参考Hadoop官方文档,重点配置hdfs-site.xml中的dfs.ha.namenodesdfs.namenode.shared.edits.dir等参数,以及core-site.xml中的ha.zookeeper.quorum

2. 数据安全

  • 小文件合并:使用Hadoop Archive(HAR)或合并工具,减少NameNode负载。
  • 备份策略:定期备份NameNode元数据(至异地)与HDFS数据(至对象存储)。

0