大数据系统架构实践(二):Hadoop集群部署

大数据系统架构实践(二):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地址角色
mastermaster192.168.100.1NameNode,DataNode,NodeManager,ResourceManager,JobHistoryServer
slave1slave1192.168.100.2DataNode,NodeManager,ResourceManager
slave2slave2192.168.100.3DataNode,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 集群的有机整合,以及如何构建一个完整数据生态系统。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/86687.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/86687.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

42道Maven高频题整理(附答案背诵版)

1.简述什么是Maven&#xff1f; Maven是一个项目管理和构建自动化工具&#xff0c;主要服务于Java项目。使用Maven&#xff0c;开发者可以方便地管理项目的构建、文档生成、报告、依赖、SCM&#xff08;软件配置管理&#xff09;、发布和分发等过程。 Maven的核心概念是基于项…

【数字后端】- 如何进行时钟树综合?

首先&#xff0c;要明确的是&#xff0c;时钟树综合只有命令去操作这一种方式 CTS的步骤 1、时钟树综合前的准备工作-设置时钟树cell&#xff08;每个项目必做&#xff09; 最简单的项目要设置生长时钟树时可用的clock buffer和clock inverter cell list&#xff0c;如下 此…

OpenCV CUDA模块设备层-----像素值进行逐通道的最大值比较函数max()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 是 OpenCV 的 CUDA 模块&#xff08;cv::cudev&#xff09; 中的一个 设备端内联函数&#xff08;device function&#xff09;&#xff0c;用于…

SCSAI万物对象模型和五维市场交易平台原型

一个完整的工业软件对象模型平台&#xff0c;基于SCSAI对象模型和五维市场理论。该平台包含对象管理、五维市场交易和大模型集成功能。 工业软件对象模型平台功能说明 这个平台实现了基于Aras Innovator对象模型和五维市场理论的工业软件解决方案&#xff0c;主要功能包括&…

昇腾のPrefix Cache

Prefix Cache特性介绍 Prefix Cache 即前缀缓存&#xff0c;是一种用于优化大语言模型&#xff08;LLM&#xff09;推理性能的技术&#xff0c;主要应用于多轮对话、系统提示等具有大量共同前缀的场景。 原理 LLM 推理计算主要包括 Prefill 阶段&#xff08;Prompt 计算&…

12-C#的list数据使用

C#的list数据使用 1.实例化 List<double> lst1 new List<double>();2.数据清除 lst1 .Clear();3.数据清除

SQL数据迁移利器:INSERT INTO SELECT语句详解

引言 在数据库操作中&#xff0c;我们经常需要将一个表中的数据迁移或复制到另一个表中。这时候&#xff0c;INSERT INTO SELECT语句就成为了一个极其有用的工具。今天我们就来深入探讨这个强大的SQL语句。 基本语法 INSERT INTO 目标表(字段1, 字段2, ...) SELECT 字段1, 字…

elementUI轮播图组件el-carousel适配移动端大小(图片加载好后根据大小适配)

获取img实例&#xff0c;动态设置el-carousel高度 <template><div class"content main"><el-carousel arrow"always" :height"bannerHeight px"><el-carousel-item v-for"(item, index) in banners" :key"…

AI歌手Yuri出道:GenAI,透露着新的AI产业机遇?

名人说&#xff1a;博观而约取&#xff0c;厚积而薄发。——苏轼《稼说送张琥》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、AI歌手Yuri横空出世1. 爆红的原生MV《SURREAL》2. 背后的创作团队 二、AI歌手背…

常见的自动化测试工具,好学吗?

自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。它通常涉及预设测试用例&#xff0c;并通过自动化工具或脚本来执行这些用例&#xff0c;最后比较实际结果与期望结果来评估软件的正确性。 常见的自动化测试工具包括Selenium、Appium、JMeter、LoadRunner、Post…

JavaEE初阶第四期:解锁多线程,从 “单车道” 到 “高速公路” 的编程升级(二)

专栏&#xff1a;JavaEE初阶起飞计划 个人主页&#xff1a;手握风云 目录 一、Thread类及常用方法 2.1. Thread的常见构造方法 2.2. Thread的常见属性 2.3. 启动一个线程 2.4. 中断一个线程 2.5. 等待一个线程 2.6. 休眠当前线程 一、Thread类及常用方法 2.1. Thread的…

elk+filebeat收集springboot项目日志

目录 步骤 1: 安装和配置Elasticsearch 步骤 2: 安装和配置Logstash&#xff08;可选&#xff09; 步骤 3: 安装和配置Filebeat 步骤 4: 安装和配置Kibana 要使用ELK&#xff08;Elasticsearch, Logstash, Kibana&#xff09;堆栈和Filebeat来收集Spring Boot项目的日志&am…

基于Python实现(控制台)UDP传输协议的可靠文件传输工具

LFTP Design 简介 LFTP是一个采用python3实现的基于UDP传输协议的可靠文件传输工具 特点 基于UDP 采用python3编程语言&#xff0c;socket的类型均为socket(AF_INET,SOCK_DGRAM)实现 实现100%可靠性传输 使用SR&#xff08;选择重传&#xff09;协议保证所有报文都正确接收…

【Go-7】面向对象编程

7. 面向对象编程 面向对象编程&#xff08;Object-Oriented Programming&#xff0c;简称OOP&#xff09;是一种编程范式&#xff0c;通过将数据和行为封装在对象中&#xff0c;以提高代码的可重用性、可维护性和扩展性。虽然Go语言不像传统的OOP语言&#xff08;如Java、C&am…

PHP语法基础篇(六):数组

PHP 中的数组实际上是一个有序映射。映射是一种把 values 关联到 keys 的类型。此类型针对多种不同用途进行了优化&#xff1b;它可以被视为数组、列表&#xff08;向量&#xff09;、哈希表&#xff08;映射的实现&#xff09;、字典、集合、堆栈、队列等等。本篇文章将记录数…

GitHub Actions 的深度解析与概念介绍

GitHub Actions 核心定义 Git Actions 是 GitHub 原生提供的 自动化工作流引擎&#xff0c;允许开发者在代码仓库中直接创建、测试、部署代码。其本质是通过事件驱动&#xff08;Event-Driven&#xff09;的自动化管道&#xff0c;将软件开发中的重复任务抽象为可编排的流程。…

TestCafe 全解析:免费开源的 E2E 测试解决方案实战指南

在2025年的数字化浪潮中&#xff0c;Web应用的稳定性和用户体验成为企业竞争的关键&#xff0c;而端到端&#xff08;E2E&#xff09;测试则是确保质量的“守护者”&#xff01;想象一下&#xff0c;您的电商平台因表单错误导致用户流失&#xff0c;或者支付流程因浏览器兼容性…

[CVPR 2025] 高效无监督Prompt与偏好对齐驱动的半监督医学分割

CVPR 2025 | 优化SAM&#xff1a;高效无监督Prompt与偏好对齐驱动的半监督医学分割 论文信息 标题&#xff1a;Enhancing SAM with Efficient Prompting and Preference Optimization for Semi-supervised Medical Image Segmentation作者&#xff1a;Aishik Konwer, Zhijian…

【C++】责任链模式

目录 一、模式核心概念与结构二、C++ 实现示例:员工请假审批系统三、责任链模式的关键特性四、应用场景五、责任链模式与其他设计模式的关系六、C++ 标准库中的责任链模式应用七、优缺点分析八、实战案例:Web 请求过滤器链九、实现注意事项如果这篇文章对你有所帮助,渴望获得…

dp进阶,树形背包(dfs+01)

顾名思义&#xff0c;就是在对树进行搜索的时候&#xff0c;由于限制了子节点选根节点必选和节点数限制&#xff0c;所以需要额外利用背包来维护最大值 假设根节点就是0&#xff0c;我们很容易 发现&#xff0c;这就是一个正常的树求和&#xff0c;但是限制了节点数量&#xf…