Hadoop 分布式集群安装

简介: Hadoop 分布式集群安装

Hadoop 介绍

Hadoop 从 2.x 开始,逐渐演变成:HDFS,YARN,MapReduce 三大应用模块,这三个应用模块分别的能力和作用是:

  • HDFS:分布式文件系统,用来解决海量大文件的存储问题
  • MapReduce:一套通用的用来解决海量大文件计算的编程模型 API
  • YARN:资源调度/管理系统

其中需要注意的是:这三者之间的关系。彼此独立,又相互依赖。使用 MapReduce 的分布式编程 API 编写分布式计算应用程序,读取存储在 HDFS 上的海量大文件进行计算,由 YARN 提供计算资源。HDFS 和 YARN 可以独立运行。主要表现在:

  • 使用 MapReduce 编写的应用程序也可以运行在其他资源调度系统之上。
  • 使用其他编程模型编写的应用程序,比如 Storm,Spark,Flink 等也可运行在 YARN 集群上。

所以称 Hadoop 是一个分布式的成熟解决方案。安装 Hadoop,其实就是安装 HDFS 和 YARN 两个集群。HDFS 和 YARN 都是一个一主多从的集群。

HDFS 集群:

一个NameNode主节点/管理节点 
多个DataNode从节点/工作节点

YARN集群:

一个ResourceManager主节点/管理节点 
多个NodeManager从节点/工作节点

版本选择

现在 Hadoop 经历四个大版本:

  • hadoop-0.x:古老的Hadoop,连 YARN 都没有,现在应该没有任何企业还在使用这么古老的 Hadoop 了。
  • hadoop-1.x:基本淘汰的Hadoop版本,不用考虑。
  • hadoop-2.x:现阶段主流的使用版本。
  • hadoop-3.x:目前较新的Hadoop版本,提供了很多新特性,但是升级的企业还是比较少。

本文安装的是 hadoop-2.7.4 版本。

节点规划

节点名称 HDFS角色 YARN角色
hadoop1 NameNode ResourceManager
hadoop2 SecondaryNameNode + DataNode NodeManager
hadoop3 DataNode NodeManager

SSH 免密登录配置

为了方便后续拷贝文件以及执行脚本,配置 SSH 免密登录。在 hadoop1 上生成 RSA 非对称密钥对:

[root@hadoop1 hadoop]# ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:wkMiPVpbBtjoZwBIpyvvluYtfQM9hQeHtgBFVfrwL1I root@hadoop1
The key's randomart image is:
+---[RSA 2048]----+
|+o.O+..o.        |
|. *.o.+..        |
| o..=o*=         |
|  o+oOo+o        |
|...o..+oE        |
|..  . o+ .       |
|  .o .... .      |
| .=.. o. .       |
| +o... .         |
+----[SHA256]-----+

将公钥拷贝到集群中的其他机器:

[root@hadoop1 hadoop]# ssh-copy-id root@hadoop1
[root@hadoop1 hadoop]# ssh-copy-id root@hadoop2
[root@hadoop1 hadoop]# ssh-copy-id root@hadoop3

解压文件

文件包括 hadoop 和 jdk 的压缩包,运行 hadoop 依赖 JAVA 环境,因此需要安装 jdk。

tar -xzvf hadoop-2.7.4.tar.gz
tar -xzvf jdk-8u181-linux-x64.tar.gz
mkdir /software
mv jdk1.8.0_181/ /software/jdk
mv hadoop-2.7.4 /software/hadoop

配置环境变量

在 hadoop1 编辑 /etc/profile 文件:

vim /etc/profile
export HADOOP_HOME=/software/hadoop
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
export JAVA_HOME=/software/jdk
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile

拷贝到其他两台机器上:

scp  /etc/profile root@hadoop2:/etc/profile 
scp  /etc/profile  root@hadoop3:/etc/profile

配置 host 记录

编辑 /etc/hosts 文件:

192.168.1.117 hadoop1
192.168.1.118 hadoop2
192.168.1.119 hadoop3

拷贝到其他两台机器上:

scp  /etc/hosts root@hadoop2:/etc/hosts
scp  /etc/hosts root@hadoop3:/etc/hosts

修改配置文件

配置文件存放在 etc/hadoop 目录下。

修改 hadoop-env.sh 脚本文件:

export JAVA_HOME=/software/jdk

修改 hdfs-site.xml 配置文件:

<configuration>
    <!--datanode数据存储目录-->
   <property>
       <name>dfs.datanode.data.dir</name>
       <value>file:///software/hadoop/data/datanode</value>
   </property>
   <!--namenode数据存储目录-->
   <property>
       <name>dfs.namenode.name.dir</name>
       <value>file:///software/hadoop/data/namenode</value>
   </property>
  <!--namenode WebUI 使用的监听地址-->
   <property>
       <name>dfs.namenode.http-address</name>
       <value>hadoop1:50070</value>
   </property>
   <!--secondary namenode WebUI 使用的监听地址-->
   <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop2:50090</value>
   </property>
    <!--HDFS的数据块的副本存储个数-->
   <property>
        <name>dfs.replication</name>
        <value>3</value>
   </property>
</configuration>

修改 core-site.xml 配置文件:

<!--HDFS集群的url,默认端口8020-->
<configuration>
     <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop1/</value>
     </property>
</configuration>

配置 yarn-site.xml 配置文件:

<configuration>
    <!--ResourceManager对外WebUI地址,默认端口8088-->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop1</value>
    </property>
</configuration>

修改 slaves 配置文件:

hadoop2
hadoop3

将刚才修改的配置文件拷贝到其他两个机器:

scp -r /software/hadoop/ root@hadoop2:/software/
scp -r /software/hadoop/ root@hadoop3:/software/

HDFS 集群的初始化

在 hadoop1 上执行如下命令:

hdfs namenode -format

image.png出现如上提示,则说明初始化成功。切记:关于初始化操作,是第一次安装 Hadoop 集群的时候初始化一次就可以了,而不是后面每次使用的都需要初始化一次。如果你想要把一个旧 HDFS 集群的数据都给删掉,当做一个新集群来使用。那么你可以重新初始化,但是你还是要记得把对应的每个节点数据存储目录先行删掉,然后再初始化,这样你就又得到了一个新的 HDFS 集群。

启动 HDFS 集群

在 hadoop1 上执行如下命令:

[root@hadoop1 hadoop]# start-dfs.sh 
Starting namenodes on [hadoop1]
hadoop1: starting namenode, logging to /software/hadoop/logs/hadoop-root-namenode-hadoop1.out
hadoop3: starting datanode, logging to /software/hadoop/logs/hadoop-root-datanode-hadoop3.out
hadoop2: starting datanode, logging to /software/hadoop/logs/hadoop-root-datanode-hadoop2.out
Starting secondary namenodes [hadoop2]
hadoop2: starting secondarynamenode, logging to /software/hadoop/logs/hadoop-root-secondarynamenode-hadoop2.out

启动 YARN 集群

在 hadoop1 上执行如下命令:

[root@hadoop1 hadoop]# start-yarn.sh 
starting yarn daemons
starting resourcemanager, logging to /software/hadoop/logs/yarn-root-resourcemanager-hadoop1.out
hadoop3: starting nodemanager, logging to /software/hadoop/logs/yarn-root-nodemanager-hadoop3.out
hadoop2: starting nodemanager, logging to /software/hadoop/logs/yarn-root-nodemanager-hadoop2.out

检查 Hadoop 集群状态

在每台机器上通过 Jps 命令查看运行的 Java 进程:

[root@hadoop1 hadoop]# jps
21444 Jps
20888 NameNode
21182 ResourceManager
[root@hadoop2 ~]# jps
15328 SecondaryNameNode
15410 NodeManager
15210 DataNode
15531 Jps
[root@hadoop3 ~]# jps
13252 DataNode
13495 Jps
13375 NodeManager

查看 HDFS 集群状态:

[root@hadoop1 hadoop]# hdfs dfsadmin -report
Configured Capacity: 107321753600 (99.95 GB)
Present Capacity: 84270903296 (78.48 GB)
DFS Remaining: 84270845952 (78.48 GB)
DFS Used: 57344 (56 KB)
DFS Used%: 0.00%
Under replicated blocks: 2
Blocks with corrupt replicas: 0
Missing blocks: 0
Missing blocks (with replication factor 1): 0
-------------------------------------------------
Live datanodes (2):
Name: 192.168.1.118:50010 (hadoop2)
Hostname: hadoop2
Decommission Status : Normal
Configured Capacity: 53660876800 (49.98 GB)
DFS Used: 28672 (28 KB)
Non DFS Used: 11528269824 (10.74 GB)
DFS Remaining: 42132578304 (39.24 GB)
DFS Used%: 0.00%
DFS Remaining%: 78.52%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Fri May 07 10:37:06 CST 2021
Name: 192.168.1.119:50010 (hadoop3)
Hostname: hadoop3
Decommission Status : Normal
Configured Capacity: 53660876800 (49.98 GB)
DFS Used: 28672 (28 KB)
Non DFS Used: 11522580480 (10.73 GB)
DFS Remaining: 42138267648 (39.24 GB)
DFS Used%: 0.00%
DFS Remaining%: 78.53%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Fri May 07 10:37:09 CST 2021

在 HDFS WebUI 查看集群状态:image.pngimage.png查看 YARN 集群状态:

[root@hadoop1 hadoop]# yarn node -list
21/05/07 11:49:51 INFO client.RMProxy: Connecting to ResourceManager at hadoop1/192.168.1.117:8032
Total Nodes:2
         Node-Id             Node-State Node-Http-Address       Number-of-Running-Containers
   hadoop2:43025                RUNNING      hadoop2:8042                                  0
   hadoop3:34439                RUNNING      hadoop3:8042                                  0

在 YARN WebUI 查看集群状态:image.pngHadoop 集群,包含了 HDFS 和 YARN 两个集群,所以两个集群都分别做一次测试。

HDFS集群:上传一个文件查看是否存在:

#在HDFS中创建一个目录
hadoop fs -mkdir /wcinput
#将本机/root/wordcount.txt文件上传到HDFS的/wcinput目录中
hadoop fs -put /root/wordcount.txt /wcinput

wordcount.txt 文件内容如下:

hello world
hello hadoop
hello hbase

在 HDFS WebUI界面查看上传的文件:image.pngYARN集群:提交一个 mapreduce 计算任务,计算刚刚上传的 wordcount.txt 文件中每个词出现的次数,将结果输出到 HDFS 的 /wcoutput 目录:

[root@hadoop1 mapreduce]# hadoop jar /software/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-ex

image.png查看 wcoutput 目录,可以看到有一个 part-r-00000 文件,里面存放的是计算的结果:

[root@hadoop1 mapreduce]# hadoop fs -ls /wcoutput
Found 2 items
-rw-r--r--   3 root supergroup          0 2021-05-07 00:20 /wcoutput/_SUCCESS
-rw-r--r--   3 root supergroup         33 2021-05-07 00:20 /wcoutput/part-r-00000
[root@hadoop1 mapreduce]# hadoop fs -cat /wcoutput/part-r-00000
hadoop  1
hbase   1
hello   3
world   1


目录
相关文章
|
7天前
|
存储 分布式计算 监控
什么是 Hadoop 集群?
【8月更文挑战第12天】
23 4
|
4天前
|
分布式计算 Ubuntu Hadoop
在Ubuntu 16.04上如何在独立模式下安装Hadoop
在Ubuntu 16.04上如何在独立模式下安装Hadoop
10 1
|
7天前
|
存储 缓存 分布式计算
|
18天前
|
存储 NoSQL 算法
MongoDB保姆级指南(中):从副本集群、分片集群起航,探索分布式存储的趋势!
本文一起来聊聊MongoDB集群,顺带以MongoDB集群为起点,共同探讨一下分布式存储的发展趋势~
62 15
|
27天前
|
存储 分布式计算 Hadoop
Hadoop格式化前检查集群状态
【7月更文挑战第22天】
47 14
|
29天前
|
存储 缓存 NoSQL
高并发架构设计三大利器:缓存、限流和降级问题之Redis用于搭建分布式缓存集群问题如何解决
高并发架构设计三大利器:缓存、限流和降级问题之Redis用于搭建分布式缓存集群问题如何解决
|
18天前
|
存储 算法 NoSQL
(三)漫谈分布式之集群篇:探寻N个9高可用与PB级数据存储的实现原理!
本文来详细聊聊集群的各方面知识,为诸位量身打造出结构化的集群知识体系。
|
1月前
|
SQL 分布式计算 关系型数据库
Hadoop-12-Hive 基本介绍 下载安装配置 MariaDB安装 3台云服务Hadoop集群 架构图 对比SQL HQL
Hadoop-12-Hive 基本介绍 下载安装配置 MariaDB安装 3台云服务Hadoop集群 架构图 对比SQL HQL
36 2
|
1月前
|
消息中间件 缓存 监控
如何设计一个秒杀系统,(高并发高可用分布式集群)
【7月更文挑战第4天】设计一个高并发、高可用的分布式秒杀系统是一个非常具有挑战性的任务,需要从架构、数据库、缓存、并发控制、降级限流等多个维度进行考虑。
60 1
|
1月前
|
关系型数据库 分布式数据库 PolarDB
**PolarDB开源指南:构建分布式数据库集群**踏上PolarDB开源之旅,了解如何从零开始搭建分布式集群
【7月更文挑战第3天】**PolarDB开源指南:构建分布式数据库集群**踏上PolarDB开源之旅,了解如何从零开始搭建分布式集群。采用存储计算分离架构,适用于大规模OLTP和OLAP。先准备硬件和软件环境,包括Linux、Docker和Git。然后,克隆源码,构建Docker镜像,部署控制节点和计算节点。使用PDCli验证集群状态,开始探索PolarDB的高性能与高可用性。在实践中深化学习,贡献于数据库技术创新。记得在安全环境下测试。
148 1

相关实验场景

更多