大数据系统架构实践(二):Hadoop集群部署
文章目录
- 大数据系统架构实践(二):Hadoop集群部署
- 一、Hadoop简介
- 二、部署前准备
- 三、部署Hadoop集群
- 1. 下载并解压安装包
- 2. 配置hadoop-env.sh
- 3. 配置core-site.xml
- 4. 配置hdfs-site.xml
- 5. 配置mapred-site.xml
- 6. 配置yarn-site.xml
- 7. 同步Hadoop目录
- 8. 配置环境变量(三台主机都要进行配置)
- 9. 格式化hdfs文件系统
- 10. 修改启动脚本
- 11. 启动Hadoop集群
- 12. 界面展示
- 总结
随着数据规模的持续增长,传统单机存储和处理方式已无法满足现代企业对海量数据的存储、分析与处理需求。Hadoop 作为 Apache 生态下最重要的大数据基础平台之一,提供了分布式存储(HDFS)与分布式计算(MapReduce/YARN)能力,广泛应用于日志分析、数据仓库、机器学习等场景。
在本系列中,我们将围绕 Hadoop 在大数据系统中的地位与部署实践展开介绍。本篇作为第二篇,将聚焦于 Hadoop 的核心架构、组件说明、典型集群部署方式以及相关配置方法,为后续深入掌握其生态组件(如 Hive、HBase 等)奠定基础。
一、Hadoop简介
Hadoop 是一个开源的分布式计算框架,由 Apache 基金会维护,旨在处理海量数据的存储与计算任务。它基于 Google 的 GFS(Google File System)和 MapReduce 论文设计,实现了高可靠性、高可扩展性的大数据处理平台。
Hadoop 的 核心特性
包括:
- 高容错性:通过数据冗余和副本机制保障系统在节点宕机时仍可正常运行
- 横向扩展性:可通过增加普通商用服务器节点,线性扩展计算与存储能力
- 高吞吐量:适合批处理大规模数据任务
- 与硬件无关:在廉价硬件上运行,降低成本
Hadoop 包含两个 核心模块
:
- HDFS(Hadoop Distributed File System):分布式文件系统,负责存储海量数据,并通过副本机制提升数据可靠性
- YARN(Yet Another Resource Negotiator):资源调度与管理平台,用于统一调度集群资源,并支持多种计算框架如
MapReduce、Spark
此外,Hadoop 生态系统中还包括 Hive、HBase、Pig、Oozie 等丰富的组件,构建了功能强大、灵活可扩展的大数据平台,广泛应用于互联网、电商、金融、电信等行业。
二、部署前准备
Hadoop 是一个典型的主从架构系统,分为 资源管理节点 和 数据处理节点。为了实现高可用和负载均衡,通常部署为多节点集群:
- 最基本的部署架构包括:1 个 NameNode + 多个 DataNode
- 为提高高可用性,可以部署 Secondary NameNode 或使用 HA 模式
- 集群规模可根据业务需求扩展,一般从 3 台起步是比较常见的实践方式
在生产环境中,3 台服务器组成的小型 Hadoop 集群 可兼顾资源利用与基础高可用,适用于功能验证、开发测试和中小数据处理场景。
✅ 三台服务器的配置与角色
节点名称 | 主机名 | ip地址 | 角色 |
---|---|---|---|
master | master | 192.168.100.1 | NameNode,DataNode,NodeManager,ResourceManager,JobHistoryServer |
slave1 | slave1 | 192.168.100.2 | DataNode,NodeManager,ResourceManager |
slave2 | slave2 | 192.168.100.3 | DataNode,NodeManager,SecondaryNameNode |
SecondaryNameNode 不是 NameNode 的热备节点,它的作用是定期合并 FsImage 和 EditLog,减轻 NameNode 压力,但不能在主 NameNode 故障时接管工作
✅ JDK 依赖环境
Hadoop 是用 Java 编写的,运行前请确保已安装 JDK 1.8 或以上版本
三、部署Hadoop集群
以下步骤在 master
节点上执行,其他节点通过配置同步
1. 下载并解压安装包
# 下载地址(以3.2.0版本为例)
https://archive.apache.org/dist/hadoop/common/# 解压移动
tar xf hadoop-3.2.0.tar.gz
mv hadoop-3.2.0 /usr/local/hadoop
2. 配置hadoop-env.sh
cat > /usr/local/hadoop/etc/hadoop/hadoop-env.sh <<-EOF
export JAVA_HOME=/usr/local/jdk #根据实际的jdk安装路径填写
export HADOOP_PID_DIR=/usr/local/hadoop/pids
EOF
3. 配置core-site.xml
用于定义 HDFS 入口、临时目录和代理权限
vim /usr/local/hadoop/etc/hadoop/core-site.xml<configuration><property><name>fs.defaultFS</name><value>hdfs://master:9820</value></property><property><name>hadoop.tmp.dir</name><value>file:///usr/local/hadoop/tmp/hadoop-${user.name}</value></property><property><name>hadoop.proxyuser.root.hosts</name><value>*</value></property><property><name>hadoop.proxyuser.root.groups</name><value>*</value></property>
</configuration>
# 扩展配置,hadoop控制台安全认证
<property><name>hadoop.security.authorization</name><value>false</value></property><property><name>hadoop.security.authentication</name><value>simple</value></property><property><name>hadoop.http.filter.initializers</name><value>org.apache.hadoop.security.AuthenticationFilterInitializer</value></property><property><name>hadoop.http.authentication.type</name><value>simple</value></property><property><name>hadoop.http.authentication.token.validity</name><value>3600</value></property><property><name>hadoop.http.authentication.signature.secret.file</name><value>/usr/local/hadoop/etc/hadoop/hadoop-http-auth-signature-secret</value></property><property><name>hadoop.http.authentication.cookie.domain</name><value></value></property><property><name>hadoop.http.authentication.simple.anonymous.allowed</name><value>false</value>
</property>
4. 配置hdfs-site.xml
配置 HDFS 数据目录、副本策略及其他参数
vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml<configuration><property><name>dfs.namenode.name.dir</name><value>file:/usr/local/hadoop/dfs/name</value></property><property><name>dfs.datanode.data.dir</name><value>file:/usr/local/hadoop/dfs/data</value></property><property><name>dfs.replication</name><value>2</value></property><property><name>dfs.namenode.secondary.http-address</name><value>slave2:9868</value></property><property><name>dfs.permissions</name><value>false</value></property><property><name>dfs.datanode.socket.write.timeout</name><value>600000</value></property><property><name>dfs.client.socket-timeout</name><value>300000</value></property><property><name>dfs.datanode.max.transfer.threads</name><value>16384</value></property><property><name>dfs.datanode.du.reserved</name><value>10737418240</value></property><property><name>dfs.datanode.balance.bandwidthPerSec</name><value>52428800</value></property><property><name>dfs.datanode.balance.max.concurrent.moves</name><value>50</value></property>
</configuration>
5. 配置mapred-site.xml
指定使用 YARN 资源管理框架
vim /usr/local/hadoop/etc/hadoop/mapred-site.xml<configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property><property><name>yarn.app.mapreduce.am.env</name><value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value></property><property><name>mapreduce.map.env</name><value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value></property><property><name>mapreduce.reduce.env</name><value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value></property><property><name>mapreduce.application.classpath</name><value>/usr/local/hadoop/etc/hadoop,/usr/local/hadoop/share/hadoop/common/*,/usr/local/hadoop/share/hadoop/common/lib/*,/usr/local/hadoop/share/hadoop/hdfs/*,/usr/local/hadoop/share/hadoop/hdfs/lib/*,/usr/local/hadoop/share/hadoop/mapreduce/*,/usr/local/hadoop/share/hadoop/mapreduce/lib/*,/usr/local/hadoop/share/hadoop/yarn/*,/usr/local/hadoop/share/hadoop/yarn/lib/*</value></property><property><name>mapreduce.map.memory.mb</name><value>2048</value></property><property>
<!-- 日志监控服务的地址,一般填写为namenode机器地址 --><name>mapreduce.jobhistory.address</name><value>master:10020</value></property><property><name>mapreduce.jobhistory.webapp.address</name><value>master:19888</value></property>
</configuration>
6. 配置yarn-site.xml
定义 YARN 的高可用机制及资源调度参数
touch /usr/local/hadoop/etc/hadoop/yarn-hosts.exclude # 不创建这个目录可能会导致访问不了8088端口
vim /usr/local/hadoop/etc/hadoop/yarn-site.xml<!-- 开启RM高可用 -->
<configuration><property><name>yarn.resourcemanager.ha.enabled</name><value>true</value></property><property><name>yarn.resourcemanager.cluster-id</name><value>cluster1</value></property>
<!-- 设置集群中的ha代号名 --><property><name>yarn.resourcemanager.ha.rm-ids</name><value>rm1,rm2</value></property>
<!-- 将刚才设置的rm1代号对应上集群服务器的hostname --><property><name>yarn.resourcemanager.hostname.rm1</name><value>master</value></property>
<!-- 将刚才设置的rm2代号对应上集群服务器的hostname --><property><name>yarn.resourcemanager.hostname.rm2</name><value>slave1</value></property><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property> <property><name>yarn.nodemanager.resource.memory-mb</name><value>4096</value></property><property><name>yarn.scheduler.capacity.maximum-am-resource-percent</name><value>0.9</value></property><property> <name>yarn.application.classpath</name><value>/usr/local/hadoop/etc/hadoop,/usr/local/hadoop/share/hadoop/common/*,/usr/local/hadoop/share/hadoop/common/lib/*,/usr/local/hadoop/share/hadoop/hdfs/*,/usr/local/hadoop/share/hadoop/hdfs/lib/*,/usr/local/hadoop/share/hadoop/mapreduce/*,/usr/local/hadoop/share/hadoop/mapreduce/lib/*,/usr/local/hadoop/share/hadoop/yarn/*,/usr/local/hadoop/share/hadoop/yarn/lib/*</value></property>
<!-- 指定Zookeeper集群地址 --><property><name>hadoop.zk.address</name><value>master:2181,slave1:2181,slave2:2181</value></property><property><name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name><value>org.apache.hadoop.mapred.ShuffleHandler</value></property><property><name>yarn.resourcemanager.address.rm1</name><value>master:8032</value></property><property><name>yarn.resourcemanager.scheduler.address.rm1</name><value>master:8030</value></property><property><name>yarn.resourcemanager.resource-tracker.address.rm1</name><value>master:8031</value></property><property><name>yarn.resourcemanager.admin.address.rm1</name><value>master:8033</value></property><property><name>yarn.resourcemanager.webapp.address.rm1</name><value>master:8088</value></property><property><name>yarn.resourcemanager.address.rm2</name><value>slave1:8032</value></property><property><name>yarn.resourcemanager.scheduler.address.rm2</name><value>slave1:8030</value></property><property><name>yarn.resourcemanager.resource-tracker.address.rm2</name><value>slave1:8031</value></property><property><name>yarn.resourcemanager.admin.address.rm2</name><value>slave1:8033</value></property><property><name>yarn.resourcemanager.webapp.address.rm2</name><value>slave1:8088</value></property><!-- 日志聚合-spark-yarn --><property><name>yarn.log-aggregation-enable</name><value>true</value></property><property><name>yarn.log.server.url</name><value>http://master:19888/jobhistory/logs</value></property>
<!-- 日志时长 --><property><name>yarn.log-aggregation.retain-seconds</name><value>640800</value></property>
<!-- 日志聚合目录 --><property><name>yarn.nodemanager.remote-app-log-dir</name><value>/usr/container/logs</value></property> <property><name>hadoop.zk.timeout-ms</name><value>120000</value></property><property><name>yarn.resourcemanager.nodes.exclude-path</name><value>/usr/local/hadoop/etc/hadoop/yarn-hosts.exclude</value></property>
</configuration>
7. 同步Hadoop目录
scp -rp /usr/local/hadoop root@slave1:/usr/local/ &>/dev/null
scp -rp /usr/local/hadoop root@slave2:/usr/local/ &>/dev/null
8. 配置环境变量(三台主机都要进行配置)
cat >> /etc/profile <<-EOF
#hadoop
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native
EOF# 生效环境变量
source /etc/profile
9. 格式化hdfs文件系统
hdfs namenode -format# 验证是否生成fsimage文件,验证hdfs格式化是否成功
ls /usr/local/hadoop/dfs/name/current/
10. 修改启动脚本
# start-dfs.sh / stop-dfs.sh
sed -i '1a \
HDFS_DATANODE_USER=root\
HADOOP_SECURE_DN_USER=hdfs\
HDFS_NAMENODE_USER=root\
HDFS_SECONDARYNAMENODE_USER=root' /usr/local/hadoop/sbin/start-dfs.sh
sed -i '1a \
HDFS_DATANODE_USER=root\
HADOOP_SECURE_DN_USER=hdfs\
HDFS_NAMENODE_USER=root\
HDFS_SECONDARYNAMENODE_USER=root' /usr/local/hadoop/sbin/stop-dfs.sh# start-yarn.sh / stop-yarn.sh
sed -i '1a \
YARN_RESOURCEMANAGER_USER=root\
HADOOP_SECURE_DN_USER=yarn\
YARN_NODEMANAGER_USER=root' /usr/local/hadoop/sbin/start-yarn.sh
sed -i '1a \
YARN_RESOURCEMANAGER_USER=root\
HADOOP_SECURE_DN_USER=yarn\
YARN_NODEMANAGER_USER=root' /usr/local/hadoop/sbin/stop-yarn.sh
11. 启动Hadoop集群
/usr/local/hadoop/sbin/start-all.sh# 验证
netstat -tnlp | grep -E "9870|8088"
12. 界面展示
HDFS Web UI:http://192.168.100.1:9870
YARN Web UI:http://192.168.100.1:8088
总结
🚀 本文围绕 Hadoop 集群构建展开,详述了基础环境准备与三节点配置示例,重点介绍了各项配置文件如何支撑集群高可用与性能运行。通过这些步骤,我们成功部署了一个兼具 HDFS 存储与 YARN 调度功能的 Hadoop 环境,为后续 HBase、Hive 等大数据组件打下良好基础。
📌 下一篇将聚焦 HBase 分布式部署方案,讲解其与 Hadoop 集群的有机整合,以及如何构建一个完整数据生态系统。