上一篇
hadoop服务器部署
- 行业动态
- 2025-05-15
- 6
Hadoop服务器部署需完成环境准备、安装JDK及Hadoop,配置SSH互信、核心参数文件,格式化NameNode元数据,启动HDFS/YARN服务,并通过Web界面或命令验证
Hadoop服务器部署详解
部署前准备
硬件要求
Hadoop集群的性能依赖硬件配置,需根据业务规模选择:- 单主节点(NameNode/ResourceManager):建议4核CPU+8GB内存+SSD存储
- 数据节点(DataNode/NodeManager):建议2核CPU+4GB内存+机械硬盘(大容量)
- 网络要求:千兆网卡,低延迟网络(如RDMA技术可选)
软件环境
| 组件 | 版本要求 | 说明 |
|——————–|———————–|————————–|
| Java | JDK 1.8+ | Hadoop依赖Java运行环境 |
| SSH | OpenSSH 6.0+ | 节点间免密登录 |
| 操作系统 | CentOS 7/Ubuntu 18+ | 推荐Linux发行版 |
| 网络协议 | NTP同步 | 保证集群时间一致 |用户权限规划
- 创建专用用户(如hadoop),避免使用root
- 配置
/etc/sudoers
允许hadoop用户执行特定操作(如HDFS格式化) - 设置SSH无密码登录(通过
ssh-keygen
生成密钥对并分发公钥)
部署模式选择
Hadoop支持三种部署模式,对比如下:
模式 | 适用场景 | 特点 |
---|---|---|
本地模式 | 开发测试 | 单节点运行,无HDFS,直接读写本地文件系统 |
伪分布式模式 | 个人学习/小规模验证 | 单节点模拟集群,HDFS和YARN在同一机器运行 |
全分布式模式 | 生产环境 | 多节点组成集群,需配置高可用(HA)和负载均衡 |
全分布式集群部署步骤
SSH免密配置
在所有节点生成密钥对并分发公钥:ssh-keygen -t rsa # 生成密钥对 ssh-copy-id -i ~/.ssh/id_rsa.pub user@nodeX # 分发到其他节点
软件安装
- 下载Hadoop二进制包(如
hadoop-3.3.4.tar.gz
) - 解压到统一目录(如
/opt/hadoop
),并在所有节点创建相同目录结构 - 配置环境变量(
~/.bashrc
):export HADOOP_HOME=/opt/hadoop export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
- 下载Hadoop二进制包(如
核心配置文件修改
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>
格式化HDFS
仅首次部署时执行:hdfs namenode -format # 格式化NameNode元数据
启动集群
- 启动HDFS:
start-dfs.sh
- 启动YARN:
start-yarn.sh
- 验证状态:
jps
命令查看进程(如NameNode、DataNode、ResourceManager)
- 启动HDFS:
关键参数调优
参数 | 默认值 | 优化建议 | 作用 |
---|---|---|---|
dfs.blocksize | 134217728 | 64MB(小文件场景) | 数据块大小 |
yarn.scheduler.maximum-allocation-mb | 8192 | 根据任务需求调整 | 单个容器最大内存分配 |
mapreduce.task.io.sort.mb | 1024 | 2048+(大数据集场景) | Map端数据排序内存 |
高可用性配置(HA模式)
双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通信地址
- 编辑
ZooKeeper集成
- 安装ZooKeeper集群(推荐3个节点)
- 修改
hdfs-site.xml
添加:<property> <name>dfs.ha.fencing.methods</name> <value>sshfence</value> </property>
安全加固
Kerberos认证
- 部署KDC服务器(如MIT Kerberos)
- 修改
core-site.xml
启用认证:<property> <name>hadoop.security.authentication</name> <value>kerberos</value> </property>
- 生成Keytab文件并分发至各节点
HDFS ACL权限控制
- 启用ACL支持:
dfs.namenode.acls.enabled=true
- 使用
-setACL
命令设置目录权限
- 启用ACL支持:
监控与运维
常用监控工具
- Hadoop自带Web UI(NameNode:50070, ResourceManager:8088)
- 集成Prometheus+Grafana监控JVM指标、磁盘IO等
- 使用Ambari/Cloudera Manager进行集群管理
日志管理
- 集中收集日志(如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:可通过以下步骤验证:
- HDFS健康检查:执行
hdfs dfsadmin -report
,查看Block数量、副本数、DataNode状态 - YARN资源验证:访问ResourceManager Web UI(默认8088端口),查看Nodes列表和活跃节点数
- 提交测试作业:运行自带的WordCount示例:
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-.jar wordcount /input /output
- 数据读写测试:创建HDFS目录并上传文件:
hdfs dfs -mkdir /testdir hdfs dfs -put localfile.txt /testdir/ hdfs dfs -cat /testdir/