🐇明明跟你说过:个人主页
🏅个人专栏:《大数据前沿:技术与应用并进》🏅
🔖行路有良友,便是天堂🔖
目录
一、引言
1、Hadoop简介
Hadoop 是一个由 Apache 软件基金会开发的开源框架,专门用于处理和存储海量数据。它以分布式计算为核心,可以在一个计算机集群上高效地处理和分析大规模数据集。Hadoop 的设计目标是提供可靠性、扩展性和分布式存储与计算的能力。以下是 Hadoop 的几个主要组件:
1. Hadoop 分布式文件系统 (HDFS):
- HDFS 是 Hadoop 的存储系统,专为处理大数据量设计。它将数据分割成块,并将这些块分布在集群中的多个节点上。HDFS 提供高吞吐量的数据访问,并通过数据的多副本来确保容错性和高可用性。
2. MapReduce:
- MapReduce 是 Hadoop 的计算模型,用于处理和生成大规模数据集。它将任务分为两个阶段:Map 阶段和 Reduce 阶段。Map 阶段将输入数据分割成键值对进行处理,而 Reduce 阶段则汇总这些结果。这个模型非常适合处理大规模的分布式数据。
3. YARN (Yet Another Resource Negotiator):
- YARN 是 Hadoop 的资源管理器,它负责管理集群资源的调度和分配。YARN 允许多个数据处理引擎(如 MapReduce、Spark)在同一个集群上运行,并优化资源使用。
4. Hadoop Common:
- Hadoop Common 包含了 Hadoop 框架中使用的通用工具和库。这些工具提供了文件系统和操作系统级别的抽象,以及各种实用程序库来支持 Hadoop 的其他模块。
Hadoop 的主要优势在于它的扩展性和成本效益。通过将数据和计算分布在大量廉价的计算机节点上,Hadoop 能够处理几乎无限量的数据,适合用于大数据分析、日志处理、数据仓库等场景。
2、Hadoop集群概念
1. 节点类型:
NameNode:
- 是 HDFS 的主节点,负责管理文件系统的命名空间(元数据),包括文件和目录的结构以及文件块的位置信息。
DataNode:
- 是 HDFS 的工作节点,负责存储实际的数据块,并根据 NameNode 的指令执行读写操作。
Secondary NameNode:
- 并不是集群中的必要组件,但它的作用是对 NameNode 进行备份,并合并 fsimage 和 edit logs 文件来减小 NameNode 的内存压力。它并不提供集群的高可用性支持。
JobTracker (MapReduce 1.x):
- 负责接收客户端提交的作业请求,并分配作业给 TaskTracker。
TaskTracker (MapReduce 1.x):
- 执行由 JobTracker 分配的任务(map 或 reduce)。
ResourceManager (YARN, MapReduce 2.x):
- 替代了 JobTracker 的角色,负责集群资源的管理和调度。
NodeManager (YARN, MapReduce 2.x):
- 替代了 TaskTracker 的角色,负责监控容器(Container)的生命周期。
2. HDFS 架构:
- HDFS 采用主从架构,其中 NameNode 是主节点,DataNode 是从节点。
- 文件被分割成块(默认大小为 128MB 或 64MB),每个块可以被复制到集群的不同节点上以提高容错性。
- NameNode 保存文件系统元数据,而 DataNode 存储实际的数据块。
3. MapReduce 框架:
- MapReduce 是一种编程模型,用于大规模数据集的并行处理。
- 数据处理分为两个阶段:Map 阶段和 Reduce 阶段。
- Map 函数对输入数据进行处理,生成中间键值对。
- Reduce 函数对相同键的值进行汇总或聚合,产生最终输出。
4. YARN (Yet Another Resource Negotiator):
- YARN 是 Hadoop 2.x 引入的一个资源管理系统,它使得 Hadoop 集群可以支持多种计算框架,而不仅仅是 MapReduce。
- ResourceManager 负责整个集群的资源管理和调度,NodeManager 负责单个节点上的资源管理。
- ApplicationMaster 负责与 ResourceManager 协商资源,并与 NodeManager 交互来执行和监控任务。
3、 Hadoop 集群的工作流程
1. 文件存储:
- 用户通过客户端将文件写入 HDFS,NameNode 根据文件大小和配置决定如何分割文件,并将块分布到不同的 DataNode 上。
- DataNode 接收块并存储在本地文件系统中,并向 NameNode 报告状态。
2. 数据处理:
- 用户提交 MapReduce 作业到 JobTracker 或 ResourceManager。
- 作业被分解成多个任务(map 或 reduce),这些任务被分配给集群中的各个节点执行。
- 数据在本地处理,减少网络传输开销(数据本地性原则)。
3. 容错机制:
- Hadoop 设计时就考虑到了节点故障的可能性。例如,文件块会被复制到多个节点上,以保证即使某些节点失效,数据仍然是可访问的。
- 当某个节点失败时,NameNode 或 ResourceManager 会重新调度任务到其他可用节点上。
二、安装环境准备
1、服务器
准备3台服务器,1个作为nameNode,2个作为dataNode,这里我们用的系统版本是 Centos 7.9,大家也可以使用其他系统,方法基本一致
2、准备环境
分别在3台机器上执行
关闭Selinux
vi /etc/selinux/config
将 SELINUX=enforcing 修改为 SELINUX=disabled
之后重启服务器
禁用防火墙
systemctl stop firewalld && systemctl disable firewalld
添加阿里镜像源
sudo curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
sudo yum clean all
sudo yum makecache fast
安装JAVA
sudo yum install -y java-1.8.0-openjdk-devel
验证结果
java -version
添加环境变量
vim /etc/profile
在文件最后添加如下内容
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64
export PATH=$JAVA_HOME/bin:$PATH
使环境变量生效
source /etc/profile
配置hosts,三台机器都要添加
vim /etc/hosts
添加如下内容
192.168.40.140 namenode
192.168.40.141 datanode1
192.168.40.142 datanode2
下载安装包,只在nameNode执行即可
[root@namenode ~]# wget https://dlcdn.apache.org/hadoop/common/hadoop-3.4.0/hadoop-3.4.0.tar.gz
解压安装包
[root@namenode local]# tar zxvf hadoop-3.4.0.tar.gz
[root@namenode ~]# mv hadoop-3.4.0 /usr/local/hadoop
配置nameNode到各节点免密连接
[root@namenode ~]# ssh-keygen
一路回车即可
接下来将密钥拷贝到各节点
[root@namenode ~]# ssh-copy-id root@namenode
[root@namenode ~]# ssh-copy-id root@datanode1
[root@namenode ~]# ssh-copy-id root@datanode2
三、集群部署
1、nameNode安装
修改配置文件
[root@nameNode hadoop]# vim /usr/local/hadoop/etc/hadoop/hadoop-env.sh
在文件末尾添加
export JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64"
编辑配置文件
[root@namenode ~]# vim /usr/local/hadoop/etc/hadoop/core-site.xml
# 修改如下
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://nameNode:9000</value>
</property>
</configuration>
[root@namenode ~]# vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml
# 修改如下内容
<configuration>
<property>
<name>dfs.http.address</name>
<value>0.0.0.0:50070</value>
</property>
<property>
<name>dfs.namenode.http-address</name>
<value>namenode:50070</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///usr/local/hadoop/data/namenode</value>
</property>
<property>
<name>dfs.datanode1.data.dir</name>
<value>file:///usr/local/hadoop/data/datanode</value>
</property>
</configuration>
[root@namenode ~]# vim /usr/local/hadoop/etc/hadoop/yarn-site.xml
# 添加如下内容
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>namenode</value>
</property>
</configuration>
修改环境变量,三台都要改
[root@namenode bin]# vim /etc/profile
#配置文件中添加以下内容
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
使环境变量生效
source /etc/profile
在namenode执行初始化
[root@namenode bin]# cd /usr/local/hadoop/bin
[root@namenode bin]# ./hdfs namenode -format
启动
[root@namenode bin]# cd /usr/local/hadoop/sbin/
[root@namenode sbin]# ./start-all.sh
访问测试
浏览器地址栏输入 http://192.168.40.140:50070/
2、dataNode安装
拷贝安装包到两台dataNode节点
[root@namenode ~]# scp -r /usr/local/hadoop/ root@datanode1:/usr/local/hadoop/
[root@namenode ~]# scp -r /usr/local/hadoop/ root@datanode2:/usr/local/hadoop/
修改配置文件
[root@datanode1 ~]# vim /usr/local/hadoop/etc/hadoop/workers
# 添加如下内容
namenode
datanode1
datanode2
创建目录
mkdir /usr/local/hadoop/data/namenode -p
启动
[root@datanode1 sbin]# cd /usr/local/hadoop/sbin
[root@datanode1 sbin]# ./hadoop-daemon.sh start datanode
[root@datanode2 ~]# cd /usr/local/hadoop/sbin/
[root@datanode2 sbin]# ./hadoop-daemon.sh start datanode
3、访问测试
在浏览器输入 namenode 的IP加 50070 端口
显示如下则证明成功
💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于大数据的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺
🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!!