Hadoop 集群的搭建与配置

简介: 你好看官,里面请!今天笔者讲的是Hadoop 集群的搭建与配置。不懂或者觉得我写的有问题可以在评论区留言,我看到会及时回复。 注意:本文仅用于学习参考,不可用于商业用途,如需转载请跟我联系。

Hadoop 集群的搭建与配置

1、Hadoop 集群详解

Hadoop 集群中可以有成百上千个节点,但各个节点的角色,也就是说各节点的分工是怎样的呢?可以从三个角度对 Hadoop 集群节点进行分类,分别为:

1.基本角色划分:Hadoop 集群,可以分为两大类角色:Master 和 slave,即主人和奴隶。

2.从 HDFS 的角度划分:将节点划分为一个 NameNode 和若干个 DataNode。其中 NameNode 作为主服务器,管理文件系统的命名空间和客户端对文件系统的访问操作;DataNode 管理存储的数据。

3.从YARN (MapReduce2) 的角度划分:将节点划分为一个 Resource Manager 和若干个 Node Manager。Resource Manager 负责所有资源的监控、分配和管理。Node Manager 负责每一个节点的维护。

注意:如果从 MapReduce 角度划分的话,可以将节点分为一个 JobTracker 和若干个 TaskTracker。主节点上的 JobTracker 负责调度构成一个作业的所有任务,这些任务分布在不同的从节点上。主节点监控它们的执行情况,并且重新执行之前的失败任务;从节点上的 TaskTracker 仅负责由主节点指派的任务。当一个 Job 被提交时,JobTracker 接收到提交作业和配置信息之后,就会将配置信息等分发给从节点,同时调度任务并监控 TaskTracker 的执行。

Hadoop 集群示意图如下图所示:

image.png

我们也可以看一下下面这张图,图里面表示是三个节点,左边这一个是主节点,右边的两个是从节点,Hadoop 集群是支持主从架构的,不同节点上面启动的进程默认是不一样的。

image.png

除了上面介绍的主节点 (也称为管理节点) NameNode,和工作节点 DataNode 以外,Hadoop 集群中还有工具节点和边缘节点。其中,工具节点主要用于运行非管理进程的其他进程,例如 HMaster、Cloudera Manager、Hive Metastore 等。边缘节点用于集群中启动作业的客户端集群,边缘节点的数量取决于工作负载的类型和数量。综上所述,Hadoop 集群的角色种类如下图所示:

image.png



2、搭建集群前的准备工作

image.png

本小节根据图中的规划实现一个一主两从的 Hadoop 集群,环境准备:三个节点 bigdata01 192.168.61.100、bigdata02 192.168.61.101、bigdata03 192.168.61.102,这里的话笔者是在原有 bigdata01 的基础上克隆 (通过克隆的方式创建多个节点,具体克隆的步骤在这就不再赘述了) 了两台机器,分别命名为 bigdata02 和 bigdata03。接下来就要对这两台新的机器进行基础环境的配置,如:ip、hostname、firewalld、ssh 免密码登录、JDK。

笔者现在已经具备三台 linux 机器了,里面都是全新的环境。这三台机器的 ip、hostname、firewalld、ssh 免密码登录、JDK 这些基础环境已经配置 ok。这些基础环境配置好以后还没完,还有一些配置需要完善。

1 配置 /etc/hosts。因为需要在主节点远程连接两个从节点,所以需要让主节点能够识别从节点的主机名,使用主机名远程访问,默认情况下只能使用 ip 远程访问,想要使用主机名远程访问的话需要在节点的 /etc/hosts 文件中配置对应机器的 ip 和主机名信息。所以在这里我们就需要在 bigdata01 的 /etc/hosts 文件中配置下面信息,最好把当前节点信息也配置到里面,这样这个文件中的内容就通用了,可以直接拷贝到另外两个从节点。命令:vi /etc/hosts,添加下面的内容:

image.png

修改 bigdata02 的 /etc/hosts 文件:

image.png

修改 bigdata03 的 /etc/hosts 文件:

image.png


2 集群节点之间时间同步。集群只要涉及到多个节点的就需要对这些节点做时间同步,如果节点之间时间不同步相差太多,会应该集群的稳定性,甚至导致集群出问题。首先在 bigdata01 节点上操作,yum install -y ntpdate、ntpdate -u ntp.sjtu.edu.cn。把这个同步时间的操作添加到 linux 的 crontab 定时器中,每分钟执行一次:vi /etc/crontab

* * ** * root /usr/sbin/ntpdate -u ntp.sjtu.edu.cn

查看命令的路径可以使用 which xxxx,如下:

image.png

然后在 bigdata02 和 bigdata03 节点上配置时间同步。
3 SSH 免密码登录完善。注意:针对免密码登录,目前只实现了自己免密码登录自己,最终需要实现主机点可以免密码登录到所有节点,所以还需要完善免密码登录操作。首先在 bigdata01 机器上执行下面命令,将公钥信息拷贝到两个从节点:

scp~/.ssh/authorized_keysbigdata02:~/scp~/.ssh/authorized_keysbigdata03:~/

然后在 bigdata02 和 bigdata03 上执行

cat~/authorized_keys>>~/.ssh/authorized_keys

验证一下效果,在 bigdata01 节点上使用 ssh 远程连接两个从节点,如果不需要输入密码就表示是成功的,此时主机点可以免密码登录到所有节点。

image.png
3、配置 Hadoop 集群

OK,那到这为止,集群中三个节点的基础环境就都配置完毕了,接下来就需要在这三个节点中安装 Hadoop 了。首先在 bigdata01 节点上安装。

(1) 把 hadoop-3.2.0.tar.gz 安装包上传到 linux 机器的 /data/soft 目录下。命令:

image.png

(2) 解压 hadoop 安装包。命令:tar -zxvf hadoop-3.2.0.tar.gz。配置一下环境变量 vi /etc/profile,

exportJAVA_HOME=/data/soft/jdk1.8exportHADOOP_HOME=/data/soft/hadoop-3.2.0exportPATH=.:$JAVA_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$PATH


设置立即生效:source /etc/profile。
(3) 修改 hadoop 相关配置文件。进入配置文件所在目录:cd hadoop-3.2.0/etc/hadoop/、修改 hadoop-env.sh 文件,在文件末尾增加环境变量信息,命令:vi hadoop-env.sh。添加内容如下:

exportJAVA_HOME=/data/soft/jdk1.8exportHADOOP_LOG_DIR=/data/hadoop_repo/logs/hadoop


修改 core-site.xml 文件,注意 fs.defaultFS 属性中的主机名需要和主节点的主机名保持一致:


<configuration><property><name>fs.defaultFS</name><value>hdfs://bigdata01:9000</value></property><property><name>hadoop.tmp.dir</name><value>/data/hadoop_repo</value></property></configuration>

修改 hdfs-site.xml 文件,把 hdfs 中文件副本的数量设置为 2,最多为 2,因为现在集群中有两个从节点,还有 secondaryNamenode 进程所在的节点信息:

<configuration><property><name>dfs.replication</name><value>2</value></property><property><name>dfs.namenode.secondary.http-address</name><value>bigdata01:50090</value></property></configuration>


修改 mapred-site.xml,设置 mapreduce 使用的资源调度框架:

<configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property></configuration>


修改 yarn-site.xml,设置 yarn 上支持运行的服务和环境变量白名单。注意,针对分布式集群在这个配置文件中还需要设置 resourcemanager 的 hostname,否则 nodemanager 找不到 resourcemanager 节点。

<configuration><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><property><name>yarn.nodemanager.env-whitelist</name><value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value></property><property><name>yarn.resourcemanager.hostname</name><value>bigdata01</value></property></configuration>


修改 workers 文件,增加所有从节点的主机名,一个一行,vi workers

image.png

修改启动脚本,修改 start-dfs.sh,stop-dfs.sh 这两个脚本文件,命令:cd /data/soft/hadoop-3.2.0/sbin,vi start-dfs.sh,vi stop-dfs.sh 在文件前面增加如下内容:

HDFS_DATANODE_USER=rootHDFS_DATANODE_SECURE_USER=hdfsHDFS_NAMENODE_USER=rootHDFS_SECONDARYNAMENODE_USER=root


修改 start-yarn.sh,stop-yarn.sh 这两个脚本文件,在文件前面增加如下内容:

YARN_RESOURCEMANAGER_USER=rootHADOOP_SECURE_DN_USER=yarnYARN_NODEMANAGER_USER=root


(4) 把 bigdata01 节点上将修改好配置的安装包拷贝到其他两个从节点:

cd/data/soft/scp-rqhadoop-3.2.0bigdata02:/data/soft/scp-rqhadoop-3.2.0bigdata03:/data/soft/


(5) 在 bigdata01 节点上格式化 HDFS:

cd/data/soft/hadoop-3.2.0bin/hdfsnamenode-format

如果在后面的日志信息中能看到这一行,则说明 namenode 格式化成功。

image.png


4、启动并关闭 Hadoop 集群

1、启动 Hadoop 集群

启动 Hadoop 集群的命令可以分为 start-dfs.sh 和 start-yarn.sh 分别用以启动 HDFS 文件系统和 YARN,或者直接使用 start-all.sh 命令。下面通过 start-all.sh 命令启动 Hadoop 集群,结果如下图所示:

image.png

2、关闭 Hadoop 集群
关闭 Hadoop 集群的命令为 stop-all.sh,执行结果如下图所示:

image.png

3、验证 Hadoop 集群是否启动成功
可以通过 jps 命令查看 Hadoop 是否启动成功。首先查看 bigdata01 机器,在 bigdata01 服务器执行 jps 命令后,如果显示的结果是下图所示的四个进程的名称:ResourceManager、NameNode、Jps 和 SecondaryNameNode,则表示 bigdata01 服务器启动成功:

image.png

下面查看 bigdata02 服务器的 Hadoop 是否启动成功。通过 SSH 连接 bigdata02,然后查看 bigdata02 已启动的服务,结果如下图所示:

image.png

从上图中可知,bigdata02 节点开启了三个进程:NodeManager、Jps 和 DataNode,表明 bigdata02 节点启动了 Hadoop。接下来再检查一下 bigdata03。首先使用 exit 命令退出 bigdata01 与 bigdata02 的连接,然后连接 bigdata03,再使用 jps 命令查看启动进程,结果如下图所示:

image.png

从上图中可知,bigdata03 节点同样开启了三个进程:NodeManager、Jps 和 bigdata03,表明 bigdata03 节点启动了 Hadoop。


5、查看 Hadoop 集群的基本信息

1、查询集群的 HDFS 信息用户可以通过 HDFS 监控界面检查当前的 HDFS 与 DataNode 的运行情况。打开浏览器,在地址栏中输入:http://bigdata01:9870,按回车键即可看到 HDFS 的监控界面,如下图所示:

image.png

该界面提供了如下信息:
1.Overview 记录了 NameNode 的启动时间、版本号、编译版本等一些基本信息。
2.Summary 是集群信息,提供了当前集群环境的一些有用信息,从图中可知所有 DataNode 节点的基本存储信息,例如硬盘大小以及有多少被 HDFS 使用等一些数据信息,同时还标注了当前集群环境中 DataNode 的信息,对活动状态的 DataNode 也专门做了标记。
3.NameNode Storage 提供了 NameNode 的信息,最后的 State 表示此节点为活动节点,可正常提供服务。
单击 Datanodes,可以查看当前启动的 DataNode 个数,如下图所示:

image.png

从上图中可以看到 DataNode 节点有 bigdata02 和 bigdata03 两个。
2、查询集群的 YARN 信息
通过网址 http://bigdata01:8088,可以查看到 YARN 的监控界面。打开 Master 节点的浏览器,在地址栏中输入:http://bigdata01:8088,按回车键即可看到 YARN 的监控界面,如下图所示:

image.png

从上图中可知,当前共有 2 个节点 Nodes,分别为:bigdata02 和 bigdata03。

6、在 Hadoop 集群中运行程序
通过上面的步骤,Hadoop 集群已经安装完毕,下面通过在 Hadoop 集群上运行一个 MapReduce 程序,以帮助读者初步理解分布式计算。在 Hadoop 中自带了一些 MapReduce 示例程序,其中有一个用于计算圆周率的 Java 程序包,下面运行此程序。该 jar 包文件的位置和文件名是:

/data/soft/hadoop-3.2.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.0.jar

在 bigdata01 的终端输入如下命令:

hadoopjar/data/soft/hadoop-3.2.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.0.jarpi1010

其中,pi 是类名,后面的两个 10 都是运行参数,第一个 10 表示 Map 次数,第二个 10 表示随机生成点的次数。执行过程中出现下图所示的信息时,则表明程序正常运行:

image.png

程序执行结果如下图所示,可以看到,计算出来的 pi 值近似等于 3.2。

image.png

需要注意,执行 Hadoop MapReduce 程序,是验证 Hadoop 系统是否正常启动的最后一个环节。即使通过 jps 和 Web 方式验证了 Hadoop 集群系统已经启动,并且能够查看到状态信息,也不一定意味着系统可以正常工作。例如,当防火墙没有关闭时,MapReduce 程序执行不会成功。
若有收获,就点个赞吧


相关文章
|
8天前
|
数据采集 分布式计算 监控
Hadoop集群长时间运行数据倾斜原因
【6月更文挑战第20天】
18 6
|
8天前
|
分布式计算 监控 网络协议
Hadoop集群长时间运行网络延迟原因
【6月更文挑战第20天】
13 2
|
3天前
|
数据采集 分布式计算 监控
Hadoop数据倾斜配置调整
【7月更文挑战第2天】
8 1
|
8天前
|
存储 缓存 分布式计算
|
9天前
|
存储 分布式计算 负载均衡
Hadoop集群长时间运行
【6月更文挑战第19天】
14 3
|
9天前
|
存储 分布式计算 监控
Hadoop集群添加新的DataNode
【6月更文挑战第19天】
10 1
|
16天前
|
分布式计算 资源调度 负载均衡
Hadoop集群配置
【6月更文挑战第13天】
45 5
|
17天前
|
存储 分布式计算 资源调度
如何优化Hadoop集群的内存使用?
【6月更文挑战第18天】如何优化Hadoop集群的内存使用?
31 6
|
17天前
|
存储 分布式计算 监控
如何提高Hadoop集群的网络传输速度?
【6月更文挑战第18天】如何提高Hadoop集群的网络传输速度?
24 3
|
1月前
|
分布式计算 Hadoop 网络安全