当前位置:首页 > 行业动态 > 正文

hadoop服务器部署

Hadoop服务器部署需完成环境准备、安装JDK及Hadoop,配置SSH互信、核心参数文件,格式化NameNode元数据,启动HDFS/YARN服务,并通过Web界面或命令验证

Hadoop服务器部署详解

部署前准备

  1. 硬件要求
    Hadoop集群的性能依赖硬件配置,需根据业务规模选择:

    • 单主节点(NameNode/ResourceManager):建议4核CPU+8GB内存+SSD存储
    • 数据节点(DataNode/NodeManager):建议2核CPU+4GB内存+机械硬盘(大容量)
    • 网络要求:千兆网卡,低延迟网络(如RDMA技术可选)
  2. 软件环境
    | 组件 | 版本要求 | 说明 |
    |——————–|———————–|————————–|
    | Java | JDK 1.8+ | Hadoop依赖Java运行环境 |
    | SSH | OpenSSH 6.0+ | 节点间免密登录 |
    | 操作系统 | CentOS 7/Ubuntu 18+ | 推荐Linux发行版 |
    | 网络协议 | NTP同步 | 保证集群时间一致 |

  3. 用户权限规划

    • 创建专用用户(如hadoop),避免使用root
    • 配置/etc/sudoers允许hadoop用户执行特定操作(如HDFS格式化)
    • 设置SSH无密码登录(通过ssh-keygen生成密钥对并分发公钥)

部署模式选择

Hadoop支持三种部署模式,对比如下:

模式 适用场景 特点
本地模式 开发测试 单节点运行,无HDFS,直接读写本地文件系统
伪分布式模式 个人学习/小规模验证 单节点模拟集群,HDFS和YARN在同一机器运行
全分布式模式 生产环境 多节点组成集群,需配置高可用(HA)和负载均衡

全分布式集群部署步骤

  1. SSH免密配置
    在所有节点生成密钥对并分发公钥:

    ssh-keygen -t rsa  # 生成密钥对
    ssh-copy-id -i ~/.ssh/id_rsa.pub user@nodeX  # 分发到其他节点
  2. 软件安装

    • 下载Hadoop二进制包(如hadoop-3.3.4.tar.gz
    • 解压到统一目录(如/opt/hadoop),并在所有节点创建相同目录结构
    • 配置环境变量(~/.bashrc):
      export HADOOP_HOME=/opt/hadoop
      export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
  3. 核心配置文件修改

    • hadoop-env.sh:设置Java路径
      export JAVA_HOME=/usr/lib/jvm/java-1.8.0
    • core-site.xml:配置HDFS基础参数
      <property>
        <name>fs.defaultFS</name>
        <value>hdfs://master:9000</value>
      </property>
    • hdfs-site.xml:定义NameNode与DataNode
      <property>
        <name>dfs.replication</name>
        <value>3</value> <!-根据节点数调整副本数 -->
      </property>
    • yarn-site.xml:配置资源管理器
      <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>master</value>
      </property>
  4. 格式化HDFS
    仅首次部署时执行:

    hdfs namenode -format  # 格式化NameNode元数据
  5. 启动集群

    • 启动HDFS:start-dfs.sh
    • 启动YARN:start-yarn.sh
    • 验证状态:jps命令查看进程(如NameNode、DataNode、ResourceManager)

关键参数调优

参数 默认值 优化建议 作用
dfs.blocksize 134217728 64MB(小文件场景) 数据块大小
yarn.scheduler.maximum-allocation-mb 8192 根据任务需求调整 单个容器最大内存分配
mapreduce.task.io.sort.mb 1024 2048+(大数据集场景) Map端数据排序内存

高可用性配置(HA模式)

  1. 双NameNode配置

    • 编辑hdfs-site.xml启用HA:
      <property>
        <name>dfs.nameservices</name>
        <value>mycluster</value>
      </property>
      <property>
        <name>dfs.ha.namenodes.mycluster</name>
        <value>nn1,nn2</value>
      </property>
      <property>
        <name>dfs.namenode.rpc-address.mycluster.nn1</name>
        <value>node1:9000</value>
      </property>
    • 配置共享存储(如NFS)存放EditLog
    • 设置JournalNode通信地址
  2. ZooKeeper集成

    • 安装ZooKeeper集群(推荐3个节点)
    • 修改hdfs-site.xml添加:
      <property>
        <name>dfs.ha.fencing.methods</name>
        <value>sshfence</value>
      </property>

安全加固

  1. Kerberos认证

    • 部署KDC服务器(如MIT Kerberos)
    • 修改core-site.xml启用认证:
      <property>
        <name>hadoop.security.authentication</name>
        <value>kerberos</value>
      </property>
    • 生成Keytab文件并分发至各节点
  2. HDFS ACL权限控制

    • 启用ACL支持:dfs.namenode.acls.enabled=true
    • 使用-setACL命令设置目录权限

监控与运维

  1. 常用监控工具

    • Hadoop自带Web UI(NameNode:50070, ResourceManager:8088)
    • 集成Prometheus+Grafana监控JVM指标、磁盘IO等
    • 使用Ambari/Cloudera Manager进行集群管理
  2. 日志管理

    • 集中收集日志(如ELK Stack)
    • 配置log4j.properties调整日志级别(如将INFO改为WARN减少日志量)

常见问题排查

  • DataNode无法连接NameNode:检查core-site.xml中的fs.defaultFS地址是否正确,防火墙是否开放9000端口
  • YARN容器启动失败:确认yarn.nodemanager.vmem-pmem-ratio参数与物理内存匹配,避免内存分配不足
  • HDFS数据不平衡:运行hdfs balancer命令重新平衡数据块分布

FAQs

Q1:部署Hadoop集群时,各节点时间不同步会导致什么问题?如何解决?
A1:时间不同步会导致以下问题:

  • HDFS文件时间戳异常,客户端可能读取到旧数据
  • Yarn应用日志时间混乱,难以调试
  • Kerberos认证失败(票据有效期依赖时间同步)
    解决方式:在所有节点安装NTP服务(如ntpd),并同步到同一时间源(如pool.ntp.org),配置示例:

    yum install ntp -y
    systemctl enable ntpd
    ntpdate pool.ntp.org  # 手动同步时间

Q2:如何验证Hadoop集群是否部署成功?
A2:可通过以下步骤验证:

  1. HDFS健康检查:执行hdfs dfsadmin -report,查看Block数量、副本数、DataNode状态
  2. YARN资源验证:访问ResourceManager Web UI(默认8088端口),查看Nodes列表和活跃节点数
  3. 提交测试作业:运行自带的WordCount示例:
    hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-.jar wordcount /input /output
  4. 数据读写测试:创建HDFS目录并上传文件:
    hdfs dfs -mkdir /testdir
    hdfs dfs -put localfile.txt /testdir/
    hdfs dfs -cat /testdir/
0