新建Hadoop集群配置,核心是把硬件(内存、CPU、磁盘)和软件(JAVA环境、Hadoop发行版、SSH免密)一次性调对,否则后面扩容和调优都会走弯路。 简单说:主节点靠内存撑,从节点靠磁盘堆,如果你用的是阿里云或酷盾安全服务器,优先选按量付费的机型,省下不算少的预算。
hadoop云服务器配置需要多大内存和CPU才算够用
配置不是拍脑袋,是按角色拆开的,新手最容易犯的错,是把所有节点配成一样的规格,结果NameNode内存撑爆,DataNode磁盘又闲置。
三个角色各干各的活
- NameNode(主节点):负责元数据,全程在内存里跑,它是系统里最“吃”内存的角色,内存配小了,整个集群连启动都成问题。
- DataNode(从节点):负责存数据块,吃的是磁盘和带宽,CPU要求一般,内存按磁盘容量比例配就行。
- SecondaryNameNode(辅助节点):好多人忽略它,但它要定期合并元数据日志,内存需求其实和NameNode相当。
第一台测试集群建议这么配:1台主节点用8核16G云服务器(仅作验证可行),2台从节点用4核8G,如果跑真实数据,主节点内存要提到32G,从节点每增加1TB存储,至少配1GB内存。
磁盘和带宽的隐藏成本
| 配置项 | 合理选择 | 坑点说明 |
|---|---|---|
| 系统盘 | 40-80G SSD | 装系统和JAVA,不够就尴尬了 |
| 数据盘 | 每节点4T起(按需) | 高IO版价格贵,冷数据用普通云盘更划算 |
| 带宽 | 5Mbps起步,按量计费 | 复制数据时带宽不够,全集群“堵车” |
| 内存 | 重点砸在NameNode上 | 从节点内存和磁盘按1:4到1:8配比 |
如果你在考虑“自建hadoop集群和云服务器哪个好”,多数场景云服务器更合适,因为拉专线和备硬盘的钱省下来,够交好几年云租金了。
阿里云和酷盾安全在搭建Hadoop集群时的真实体验差异
很多人在网上搜“阿里云hadoop集群部署教程”和“酷盾安全搭建hadoop集群教程”,两个平台的安装步骤一致,区别全在细节上。
安全组规则要提前规划好
这是纯新手最容易卡住的地方,Hadoop节点之间要开一堆端口:
- 8020:NameNode RPC端口,节点间通信用
- 9870:NameNode的WebUI端口(Hadoop 3.x版本)
- 9864:DataNode的数据传输端口
- 8088:YARN的ResourceManager端口
阿里云默认安全组只放行22端口,其他全封,要在“安全组-入方向规则”里手动添加,指定源为内网段(比如10.0.0.0/8),酷盾安全的安全组在控制台左上角“云服务器-安全组”里设置,操作类似,但注意酷盾安全默认会额外放行80和443端口,虽然用不上也别删,后面挂别的服务可能要用。
内网互通是集群的命脉
同地域、同VPC下的服务器才能走内网互通,跨地域节点的延迟会让你怀疑人生,注册完账号买完机器,先确认服务器在同一个专有网络里,不然节点间通信走公网IP,数据流转一圈,速度慢不说,流量费直接翻倍,如果你预算有限,想用hadoop集群部署哪家云便宜的方案,可以试试三个节点用抢占式实例,价格是包年包月的两成左右,适合跑测试任务。
新建Hadoop集群配置的五步实操流程
下面这套流程在CentOS 7.9和Ubuntu 22.04上都验证过,直接抄作业,前提是三台云服务器已经搞定,操作系统选CentOS 7.9或Ubuntu 22.04,分配好内网IP。
第一步:主机名和主机映射
每台机器都执行,把hostname改成集群里的角色名字:
hostnamectl set-hostname node1 # 主节点,其他节点依次改node2、node3 vi /etc/hosts
在hosts文件里加入三台机器的内网IP:
16.0.2 node1
172.16.0.3 node2
172.16.0.4 node3
这里要自己替换成买到的实际内网IP,这个步骤写错的话,后面所有节点互相不认识。
第二步:配置SSH免密登录
主节点生成密钥,然后拷贝到所有节点(包括自己):
ssh-keygen -t rsa -P '' ssh-copy-id node1 ssh-copy-id node2 ssh-copy-id node3
要求省略生成密钥时的交互动作,如果执行时报权限错误,检查/root/.ssh目录权限是不是700。
第三步:安装JDK并配置环境变量
Hadoop 3.x要求JDK 8或11,用OpenJDK就行:
yum install -y java-1.8.0-openjdk-devel # CentOS环境 apt install -y openjdk-8-jdk # Ubuntu环境 echo 'export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk' >> /etc/profile echo 'export PATH=$PATH:$JAVA_HOME/bin' >> /etc/profile source /etc/profile java -version # 确认能输出版本号
JDK路径最好用update-alternatives --list java查一下,不同版本的路径有差异。
第四步:解压Hadoop并修改核心配置文件
下载Hadoop二进制包,放到/usr/local/hadoop,然后修改这几个文件,这是整个配置中最容易疏漏的部分。
core-site.xml:
<property> <name>fs.defaultFS</name> <value>hdfs://node1:8020</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/data/hadoop/tmp</value> </property>
hdfs-site.xml:
<property> <name>dfs.namenode.name.dir</name> <value>/data/hadoop/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/data/hadoop/data</value> </property> <property> <name>dfs.replication</name> <value>2</value> </property>
副本数设为2,前提是至少有两台DataNode,设为3也行,那是经典方案,但三台机器只有一个副本真正在工作,不算最优解。
slaves文件(或workers文件,取决于版本):
node2
node3
第五步:启动集群并验证
在主节点上格式化(只做一次):
hdfs namenode -format start-dfs.sh start-yarn.sh jps
看到主节点有NameNode和SecondaryNameNode进程,从节点有DataNode进程,就算全员上线,然后用hdfs dfsadmin -report看存储容量是否正常。
集群跑慢时配置上的两大元凶
配置正确只是入门,要让集群稳定运行,还要会排查问题,不管你在哪个云平台,性能问题基本都出在这两个地方:
Swap分区把内存拖死
新购的云服务器默认都不开Swap,但有些镜像会开启,Hadoop进程内存被打满时,一旦触发Swap,NameNode的响应时间会从毫秒级掉到秒级,整个集群直接“僵住”,检查命令:
free -h
如果Swap项不是0,先用swapoff -a临时关掉,然后永久关闭:注释掉/etc/fstab里的swap行,Hadoop跑在JVM里,它有自己的内存管理机制,不需要操作系统级的Swap来兜底。
数据盘格式化不分区,吞吐量上不去
很多云平台的默认数据盘是裸设备,直接格式化挂载,没有文件系统调优,如果数据盘用XFS格式,执行:
mkfs.xfs -f /dev/vdb
加一层-f参数,格式化完成后,挂载参数建议加noatime选项:
mount -o noatime /dev/vdb /data
在/etc/fstab里也写全挂载选项,防止重启后挂载参数丢失,这个细节很简单,却直接影响磁盘读写性能,跑MapReduce任务的时候数据量大,这一点就能拉开不小差距。
关于hadoop云服务器配置的常见疑问解答
Q1:hadoop云服务器配置需要多大内存才能跑起生产集群?
生产环境比测试环境大不少,业内专家指出,NameNode所在的主节点至少32GB内存起步,每100万个文件块约占用1GB内存,按文件数量反推内存空间,从节点按存储量配,1TB存储对应1GB内存是最低标准,同时保留至少20%的内存余量给操作系统和DataNode自身开销,小文件多的话,这个配比还要再往上调。
Q2:新建Hadoop集群配置时,能不能直接复用一台大内存云服务器跑完所有角色?
可以,但不推荐用于生产,单机部署Hadoop(伪分布式模式)只适合学习API和跑通流程,它的容错机制完全失效,NameNode挂掉,整个集群没有备份,元数据直接丢失,真正新建集群时,即便是测试环境,也应遵循“一主二从”的最低配置,否则无法验证副本机制和故障转移逻辑。
Q3:yarn和hdfs的配置有冲突怎么处理?
YARN的内存配置和HDFS的DataNode内存是独立的两套参数,很多报错是两者叠加超出物理内存导致的,核心参数是yarn.nodemanager.resource.memory-mb和yarn.scheduler.maximum-allocation-mb,后者数值要设得比前者小,如果节点总内存16G,建议给YARN分配12G,给DataNode留4G,再预留1-2G给操作系统,就不会出现Container内存溢出问题。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/559167.html