Hadoop集群搭建-完全分布式

一、Hadoop介绍

Hadoop 是一个开源框架,主要用于存储和处理大规模数据集,特别是在集群环境下。它最初由 Apache Software Foundation 开发,并且已经成为大数据处理领域的重要组成部分。Hadoop 提供了一种高效、可靠的方式来存储、处理和分析大量数据,支持分布式计算模型。

Hadoop的核心组件

Hadoop主要包含以下几个核心组件:

1.HDFS (Hadoop Distributed File System)

HDFS 是一种分布式文件系统,设计用来存储大量的数据,并且能够提供高吞吐量的数据访问能力。HDFS 将数据分成多个块(默认大小为 128MB 或 64MB),并将这些块分布在集群中的不同节点上。为了保证数据的可靠性,每个数据块都会被复制多次,并存储在不同的节点上。

2.YARN (Yet Another Resource Negotiator)

YARN 是 Hadoop 的资源管理和调度框架。它负责管理和分配集群中的计算资源(如 CPU、内存等)。YARN 使得 Hadoop 集群能够支持多种计算框架,而不仅仅局限于 MapReduce。YARN 包含两个主要的守护进程:ResourceManager 和 NodeManager。

3.MapReduce

MapReduce 是 Hadoop 的编程模型,用于处理和生成大规模数据集。它通过将任务分解成小任务来实现并行处理。MapReduce 有两个阶段:Map 阶段和 Reduce 阶段。在 Map 阶段,数据被分割成小块,并在多个节点上并行处理。在 Reduce 阶段,Map 阶段产生的中间结果被汇总并产生最终的结果。

Hadoop的优势

1.扩展性

Hadoop 可以轻松地扩展到数百甚至数千台服务器,支持 PB 级别的数据存储和处理。

2.可靠性

Hadoop 通过数据块的冗余存储来提高数据的可靠性。如果某一台机器宕机,数据可以从其他节点恢复。

3.成本效益

Hadoop 可以在廉价的商品硬件上运行,减少了构建大规模数据处理系统的成本。

4.灵活性

Hadoop 支持多种数据类型和数据源,并且可以通过插件和第三方工具集成多种计算框架。

Hadoop的应用场景

1.数据分析

Hadoop 可以用来处理大量的数据,进行离线数据分析,例如用户行为分析、日志分析等。

2.搜索引擎

Hadoop 可以用来处理网页索引,支持搜索引擎的快速响应。

3.机器学习

Hadoop 可以支持大规模的机器学习任务,处理海量数据集的训练任务。

4.实时数据处理

尽管 Hadoop 主要设计用于批处理任务,但它也可以通过与其他实时处理框架(如 Apache Storm 或 Apache Flink)结合来支持实时数据流处理。

Hadoop的部署模式

1.单机模式

单机模式主要用于开发测试,所有组件运行在同一台机器上。

2.伪分布模式

伪分布式模式也是在单台机器上运行,但是模拟集群环境,每个组件运行在不同的进程中。

3.完全分布式模式

完全分布式模式是在多台机器上运行,每台机器承担不同的角色,提供高可用性和性能。

Hadoop完全分布式搭建

集群简介

HDFS 是一种分布式文件系统,设计用来存储大量的数据,并且能够提供高吞吐量的数据访问能力。集群里主要角色有:

Namenode

Secondary NameNode

DataNode

YARN 是 Hadoop 的资源管理和调度框架。它负责管理和分配集群中的计算资源(如 CPU、内存等)。集群里的主要角色有:

ResourceManager

NodeManager

尽管 MapReduce 仍然是 Hadoop 的重要组成部分,但在引入 YARN 后,MapReduce 成为了 YARN 上的一个应用程序。MapReduce 负责数据处理任务的分解和执行。

MapReduce的部署模式有三种:

单机模式

伪分布式模式

完全分布式模式

搭建角色分配

我以三节点进行搭建,角色分配如下:

master     NameNode     SecondaryNameNode     DataNode     ResourceManager

slave1     DataNode     NodeManager

slave2     DataNode     NodeManager

历史日志服务器     JobHistoryServer(只在master节点上操作

基础环境准备

(1)修改虚拟机主机名

vim /etc/hostname
master

修改后单击Esc键退出编辑模式,输入wq保存退出vim编辑器。

重启后主机名将生效

#reboot

另外两台同上

(2)关闭防火墙

master、slave1、slave2都要关闭防火墙

#systemctl status firewalld
查看防火墙状态
#systemctl stop firewalld
关闭防火墙
#systemctl disable firewalld
设置防火墙为开机自启动

能看到防火墙的状态是running,正在运行中,接下来将其关闭并设置开机自启动。

设置完成。

(3)修改主机名和IP的映射

修改master、slave1、slave2的hosts文件,添加映射关系

每台机都需要修改

vim /etc/hosts
172.16.250.198 master
172.16.250.199 slave1
172.16.250.200 slave2

master

slave1

slave2

修改完成。

(4)配置ssh免密登陆

生成密钥(三台都需生成)

#ssh-keygen -t rsa
执行此命令后,会生成公钥和私钥

一路回车即可

生成后,将公钥拷贝到要登陆的目标机器上。

拷贝过程中会提示你输入yes确认,和目标主机的ssh密码

#ssh-copy-id master
#ssh-copy-id slave1
#ssh-copy-id slave2

自身节点也需要推送

推送完成后,来测试一下是否能成功登录目标主机

#ssh slave1

退出登录输入exit即可

经过测试我们可以看到能成功登录目标主机

删除虚拟机自带的jdk

#rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps

JDK环境安装

首先删除虚拟机自带的JDK

#rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps

rpm -qa:列出系统上所有已安装的 RPM 包。
grep -i java:过滤出包含 "java" 的包名,-i 参数使搜索不区分大小写。
xargs -n1 rpm -e --nodeps:将过滤出的每个包名传递给 rpm -e --nodeps 命令,其中 -e 表示卸载包,--nodeps 表示卸载时不检查依赖关系。

注:三台虚拟机都需手动删除

验证是否删除虚拟机自带的JDK可输入一下命令:

#java -version

输出以下显示即删除成功

上传JDK

这里的上传路径为/root/software下

上传方式可通过本地拖拽文件上传,也可通过连接xftp来拖拽至xshell命令行里实现

上传成功后,让我们进行下一步

创建目录
#mkdir -p software/
解压JDK

将上传的JDK解压到我们创建的software/目录

#tar -zxvf jdk-8u241-linux-x64.tar.gz -C software/
tar:是一个用于打包和解包文件的工具。
-z:使用 gzip 解压(等同于 -Z 或 --gzip)。
-x:提取文件(即解压)。
-v:详细模式,显示正在处理的文件名。
-f:指定归档文件名(通常 -f 之后跟的是文件名,这里 -f 和文件名之间省略了)。
jdk-8u241-linux-x64.tar.gz:要解压的文件名。
-C software/:指定解压的目标目录(software/ 是目标目录)。

另外两台同上

将java添加至环境变量中
#vim /etc/profile

export JAVA_HOME=/root/software/jdk1.8.0_241
export PATH=$PATH:$JAVA_HOME/bin
export
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

wq保存并退出

刷新配置!

#source /etc/profile

接着,查看测试Java版本

#java -version

版本正确,安装成功

另外两台节点也不要忘了,继续手动添加环境变量

slave1

slave2

也是一样手动刷新配置

解压Hadoop

#tar -zxvf  tar -zxvf hadoop-3.3.0-Centos7-64-with-snappy.tar.gz -C software/

给予hadoop-3.3.0目录权限

#chmod -R 777 hadoop-3.3.0/

修改Hadoop配置文件

在 Hadoop 集群中,配置文件的正确设置对于集群的正常运行至关重要。Hadoop 配置主要包括几个关键的文件,这些文件控制着 Hadoop 的各个方面,如文件系统、资源管理和 MapReduce 框架等。

我们只需在主节点master上修改配置文件,另外两台可以用scp命令将修改好的配置文件从主节点master上推送过去。

依次配置hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xmlworkers配置文件

(1)hadooop-env.sh

文件所在目录:root/software/hadoop-3.3.0/etc/hadoop

hadoop-env.sh 是 Hadoop 配置文件之一,它主要用于定义 Hadoop 启动脚本所需的环境变量。这个文件通常位于 $HADOOP_HOME/etc/hadoop 目录下,并且在 Hadoop 启动时会被读取。在这个文件中,你可以设置一些关键的环境变量,比如 Java 的路径以及其他与 Hadoop 运行相关的环境变量。

须配置以下内容:

export JAVA_HOME=/root/software/jdk1.8.0_241
:!把前边的#给注释掉

再在文件的最后添加以下参数
export HDFS_NAMENODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export HDFS_DATANODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root

我们来实操一次

vim hadoop-env.sh

输入参数

修改完成,保存退出

(2)core-site.xml

这个文件包含了 Hadoop 核心配置项,包括 HDFS 的默认名称节点地址和其他核心系统配置。

文件所在目录:/root/software/Hadoop-3.3.0/etc/hadoop

须配置以下内容:

<property>
<name>fs.defaultFS</name>
<value>hdfs://master:8020</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/export/data/hadoop-3.3.0</value>
</property>
<!-- 设置 HDFS web UI 用户身份 -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
<!-- 整合 hive -->
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>

将以上代码放入<configuration>和</configuration>中

我们来实操一次

vim core-site.xml

编辑core-site.xml文件

将代码放入

保存并退出

(3)hdfs-site.xml

在 Hadoop 中,hdfs-site.xml 文件用于配置 HDFS(Hadoop Distributed File System)的相关参数。这些参数决定了 HDFS 的行为,如数据块的大小、副本的数量、数据存储的位置等。

文件所在目录:/root/software/Hadoop-3.3.0/etc/hadoop

须配置以下内容

<!-- 指定 secondarynamenode 运行位置 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>slave1:50090</value>
</property>

将以上代码放入<configuration>和</configuration>中

我们来实操一次

vim hdfs-site.xml

将代码放入

保存并退出

(4)mapred-site.xml

文件所在目录:/root/software/Hadoop-3.3.0/etc/hadoop

须配置以下内容

<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>

将以上代码放入<configuration>和</configuration>中

我们来实操一次

vim mapred-site.xml 

将代码放入

保存并退出

(5)yarn-site.xml

在 Hadoop 集群中,yarn-site.xml文件是用于配置 YARN(Yet Another Resource Negotiator)的相关属性的。

文件所在目录:/root/software/Hadoop-3.3.0/etc/hadoop

须配置以下内容

<!-- 指定 YARN 的主角色(ResourceManager)的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<!-- NodeManager 上运行的附属服务。需配置成 mapreduce_shuffle,才可运行 MapReduce
程序默认值:"" -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 是否将对容器实施物理内存限制 -->
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<!-- 是否将对容器实施虚拟内存限制。 -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<!-- 开启日志聚集 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 设置 yarn 历史服务器地址 -->
<property>
<name>yarn.log.server.url</name>
<value>http://master:19888/jobhistory/logs</value>
</property>
<!-- 保存的时间 7 天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>

将以上代码放入<configuration>和</configuration>中

我们来实操一次

vim yarn-site.xml

编辑完成,保存并退出。

(6)workers

文件所在目录:/root/software/Hadoop-3.3.0/etc/hadoop

须添加以下内容

master
slave1
slave2

vim worker

添加完成,保存并退出(:wq)

scp命令同步安装包

scp(secure copy)命令用于在不同主机之间安全地复制文件或目录。scp 基于 SSH 协议,因此可以加密传输的数据,确保文件传输的安全性。以下是使用 scp 命令同步安装包的基本步骤和示例。

scp的基本语法如下:

scp [选项] 源文件或目录 用户名@目标主机地址:/目标路径

常用的选项包括:

-r:递归复制整个目录。
-P:指定 SSH 的端口号(默认为 22)。
-p:保留原文件的时间戳。
-v:详细模式,显示详细的传输过程。

我们来使用scp命令把Hadoop安装包以及以下修改的配置文件从主节点master上同步到另外两台机子slave1、slave2上,这样会方便很多,节省时间,就不需要手动修改和安装Hadoop。

#cd /root/software
#scp -r hadoop-3.3.0 slave1:$PWD
#scp -r hadoop-3.3.0 slave2:$PWD

输入以上命令

等待传输后,可去slave1节点上查看

同步成功

Hadoop创建目录

在master节点的Hadoop安装目录下依次创建

hadoopDatas/tempDatas 、 hadoopDatas/namenodeDatas 、

hadoopDatas/datanodeDatas、hadoopDatas/dfs/nn/edits、

hadoopDatas/dfs/snn/name和hadoopDatas/dfs/nn/snn/edits目录

进入Hadoop安装目录下

cd hadoop-3.3.0/

创建目录

接下来,在 Hadoop 安装目录下创建所需的目录结构。使用mkdir命令创建目录。以下是创建目录的具体命令:

创建hadoopDatas目录及其子目录

mkdir -p hadoopDatas/tempDatas
mkdir -p hadoopDatas/namenodeDatas
mkdir -p hadoopDatas/datanodeDatas

创建dfs目录及其相关的子目录

mkdir -p hadoopDatas/dfs/nn/edits
mkdir -p hadoopDatas/dfs/snn/name
mkdir -p hadoopDatas/dfs/nn/snn/edits

确保每个目录都已成功创建,你可以通过以下命令来检查:

ls -R hadoopDatas

将Hadoop添加至环境变量中

3台节点都需要配置环境变量文件

vim /etc/profile

需添加以下参数

export HADOOP_HOME=/root/software/hadoop-3.3.0
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

添加完毕,wq保存并退出编辑器

刷新配置
source /etc/profile

继续手动修改其他节点的环境变量

slave1

slave2

修改完后也需要手动刷新配置

没问题,继续下一步

集群启动

格式化

启动 Hadoop 集群的 HDFS 和 YARN 服务涉及到一系列步骤,确保集群中的各个组件能够正常启动并协同工作。

注!master、slave1、slave2都需要格式化

hadoop namenode -format

master:

格式化成功(一般能看到IP就是格式化成功)

slave1

没有问题

slave2

全部格式化成功。

逐个启动服务
$HADOOP_HOME/bin/hdfs --daemon start namenode  #在主节点上使用以下命令启动 HDFS NameNode:(master)
 
$HADOOP_HOME/bin/hdfs --daemon start secondarynamenode  #在 slave1上使用以下命令启动 HDFS SecondaryNameNode
 
$HADOOP_HOME/bin/hdfs --daemon start datanode  #在每个从节点上使用以下命令启动 HDFS DataNode:(master、slave1、slave2)
 
$HADOOP_HOME/bin/yarn --daemon start resourcemanager  #在主节点上使用以下命令启动 YARN ResourceManager:(master)
 
$HADOOP_HOME/bin/yarn --daemon start nodemanager  #在每个从节点上使用以下命令启动 YARN nodemanager:(master、slave1、slave2)
mapred --daemon start historyserver #在主节点上使用以下命令启动 jobhistoryserver:(master)

我们可以试着去访问

NameNode

http://172.16.250.198:默认端口为9870

可以看到Hadoop的版本和在线节点

ResourceManager

http://172.16.250.198:默认端口8088

也能看到三个在线活动节点

JobhistoryServer

http://172.16.250.198:默认端口为19888

也是可以访问的

到此,Hadoop完全分布式安装配置搭建完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值