HDFS集群(分布式存储)
主角色:NameNode
从角色:DataNode
主角色辅助角色:SecondaryNameNode
YARN集群(资源管理、调度)
主角色:ResourceManager
从角色:NodeManager
两个集群互相之间没有依赖、互不影响
某些角色进程往往部署在同一台物理服务器上
MapReduce是计算框架、代码层面的组件,没有集群一说
单机模式
一个机器运行1个Java进程,所有角色在一个进程中运行,主要用于调试
伪分布式
一个机器运行多个进程,每个角色一个进程,主要用于调试
集群模式
集群模式主要用于生产环境部署。会使用N台主机组成一个Hadoop集群。这种部署模式下,主节点和从节点会分开部署不同的机器上。
HA高可用
在集群模式的基础上为单点故障部署备份角色,形成主备架构,实现容错。
编译环境:Centos7
依赖版本:
编译源码版本:Hadoop3.2.4-src
mkdir -p /export/server/ # 软件安装路径
mkdir -p /export/data/ # 数据存储路径
mkdir -p /export/software/ # 安装包存放路径
mkdir -p /export/server
cd /export/server
将之前下载的所有依赖放在当前目录/export/server
中
yum install gcc gcc-c++ make autoconf automake libtool curl lzo-devel zlib-devel openssl openssl-devel ncurses-devel snappy snappy-devel bzip2 bzip2-devel lzo lzo-devel lzop libXtst zlib -y
yum install -y doxygen cyrus-sasl* saslwrapper-devel*
之所以没有使用yum安装cmake、snappy、maven、protobuf,是因为yum中的版本太低,无法正常编译Hadoop,所以某些依赖需要手动安装合适的版本。
tar -zxvf cmake-3.24.3.tar.gz
cd cmake-3.24.3
./configure
make && make install
验证
[root@node1 ~]# cmake -version
cmake version 3.24.3
CMake suite maintained and supported by Kitware (kitware.com/cmake).
卸载之前安装的
rm -rf /usr/local/lib/libsnappy*
rm -rf /lib64/libsnappy*
上传解压
tar -zxvf snappy-1.1.3.tar.gz
编译安装
cd /export/server/snappy-1.1.3
./configure
make && make install
验证安装
[root@node1 ~]# ls -lh /usr/local/lib |grep snappy
-rw-r--r--. 1 root root 511K 11月 16 23:17 libsnappy.a
-rwxr-xr-x. 1 root root 955 11月 16 23:17 libsnappy.la
lrwxrwxrwx. 1 root root 18 11月 16 23:17 libsnappy.so -> libsnappy.so.1.3.0
lrwxrwxrwx. 1 root root 18 11月 16 23:17 libsnappy.so.1 -> libsnappy.so.1.3.0
-rwxr-xr-x. 1 root root 253K 11月 16 23:17 libsnappy.so.1.3.0
解压安装包
tar -zxvf jdk-8u341-linux-x64.tar.gz
配置环境变量
vim ~/.bash_profile
在文件末加上以下内容
export JAVA_HOME=/export/server/jdk1.8.0_341
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/libdt.jar:$JAVA_HOME/lib/tools.jar
加载环境变量
source ~/.bash_profile
验证是否安装成功
[root@node1 server]# java -version
java version "1.8.0_341"
Java(TM) SE Runtime Environment (build 1.8.0_341-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.341-b10, mixed mode)
解压安装包
tar -zxvf apache-maven-3.8.6-bin.tar.gz
配置环境变量
vim ~/.bash_profile
在.bash_profile
文件末添加以下内容
export MAVEN_HOME=/export/server/apache-maven-3.8.6
export MAVEN_OPTS="-Xms256m -Xmx512m"
export PATH=:$MAVEN_HOME/bin:$PATH
加载环境变量
source ~/.bash_profile
验证
[root@node1 server]# mvn -v
Apache Maven 3.8.6 (84538c9988a25aec085021c365c560670ad80f63)
Maven home: /export/server/apache-maven-3.8.6
Java version: 1.8.0_341, vendor: Oracle Corporation, runtime: /export/server/jdk1.8.0_341/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-1160.el7.x86_64", arch: "amd64", family: "unix"
添加maven阿里云镜像仓库,提高编译速度
vim /export/server/apache-maven-3.8.6/conf/settings.xml
在xml的mirrors标签内添加以下内容
<mirror>
<id>alimavenid>
<name>aliyun mavenname>
<url>http://maven.aliyun.com/nexus/content/groups/public/url>
<mirrorOf>centralmirrorOf>
mirror>
解压
tar -zxvf protobuf-all-3.19.6.tar.gz
编译安装
cd /export/server/protobuf-3.19.6
./autogen.sh
./configure
make && make install
验证
[root@node1 protobuf-3.19.6]# protoc --version
libprotoc 3.19.6
解压
tar -zxvf hadoop-3.2.4-src.tar.gz
编译
cd /export/server/hadoop-3.2.4-src
mvn clean package -Pdist,native -DskipTests -Dtar -Dbundle.snappy -Dsnappy.lib=/usr/local/lib
参数说明:
Pdist,native :把重新编译生成的hadoop动态库;
DskipTests :跳过测试
Dtar :最后把文件以tar打包
Dbundle.snappy :添加snappy压缩支持【默认官网下载的是不支持的】
Dsnappy.lib=/usr/local/lib :指snappy在编译机器上安装后的库路径
服务器 | 运行角色 |
---|---|
node1.vbox.cn | namenode datenode resourcemanager nodemanager |
node2.vbox.cn | secondarynamenode datanode nodemanager |
node3.vbox.cn | datenode nodemanager |
创建三台虚拟机
通过Oracle VM VirtualBox创建3台Centos7虚拟机
修改hostname(三台机器都需要修改)
[root@node1 ~]# vim /etc/hostname
[root@node1 ~]# cat /etc/hostname
node1.vbox.cn
修改Hosts映射
vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.2.29 node1 node1.vbox.cn
192.168.2.30 node2 node2.vbox.cn
192.168.2.31 node3 node3.vbox.cn
三台机器都需要修改
关闭防火墙
关闭防火墙
禁止防火墙自启
systemctl stop firewalld
systemctl disable firewalld
三台机器都需要操作
ssh免密登录
node1
ssh-keygen -t rsa -C "[email protected]"
node2
ssh-keygen -t rsa -C "[email protected]"
node3
ssh-keygen -t rsa -C "[email protected]"
复制ssh到其他主机
ssh-copy-id node1
ssh-copy-id node2
ssh-copy-id node3
至少需要完成从node1 -> node1,node2,node3的免密登录
集群时间同步
yum -y install ntpdate
ntpdate ntp4.aliyun.com
每台机器都进行时间同步
JDK1.8安装
cd /export/server
tar -zxvf jdk-8u341-linux-x64.tar.gz
scp -r jdk1.8.0_341 node2:/export/server/
scp -r jdk1.8.0_341 node2:/export/server/
在每台机器的~/.bash_profile
都设置环境变量
export JAVA_HOME=/export/server/jdk1.8.0_341
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/libdt.jar:$JAVA_HOME/lib/tools.jar
上传、解压Hadoop3.2.4安装包
上传之前编译好了的Hadoop3.2.4到node1,并解压。
tar -zxvf hadoop-3.2.4.tar.gz -C /export/server/
hadoop目录结构
目录 | 说明 |
---|---|
bin | Hadoop最基本的管理脚本和使用脚本的目录,这些脚本是sbin目录下管理脚本的基础实现,用户可以直接使用这些脚本管理和使用Hadoop。 |
etc | Hadoop配置文件所在的目录 |
include | 对外提供的编程库文件(具体动态库和静态库在lib目录中),这些头文件均是用C++定义的,通常用于C++程序访问HDFS或者编写MapReduce程序。 |
lib | 该目录包含了Hadoop对外提供的编程动态库和静态库,与include目录中的头文件结合使用。 |
libexec | 各个服务对用的shell配置文件所在的目录,可用于配置日志输出、启动参数(比如JVM参数)等基本信息。 |
sbin | Hadoop管理脚本所在的目录,主要包含HDFS和YARN中各类服务的启动、关闭脚本 |
share | Hadoop各个模块编译后的jar包所在目录,官方自带示例。 |
编辑Hadoop配置文件
hadoop-env.sh
cd /export/server/hadoop-3.2.4/etc/hadoop/
vim hadoop-env.sh
在文件末尾加上以下内容
# 配置JAVA_HOME
export JAVA_HOME=/export/server/jdk1.8.0_341
# 设置用户以执行对应角色shell命令
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
core-site.xml
cd /export/server/hadoop-3.2.4/etc/hadoop/
vim core-site.xml
在configuration标签中添加以下内容
<property>
<name>fs.defaultFSname>
<value>hdfs://node1.vbox.cn:8020value>
property>
<property>
<name>hadoop.tmp.dirname>
<value>/export/data/hadoop-3.2.4value>
property>
<property>
<name>hadoop.http.staticuser.username>
<value>rootvalue>
property>
hdfs-site.xml
cd /export/server/hadoop-3.2.4/etc/hadoop/
vim hdfs-site.xml
在configuration标签中添加以下内容
<property>
<name>dfs.namenode.secondary.http-addressname>
<value>node2.vbox.cn:9868value>
property>
mapred-site.xml
cd /export/server/hadoop-3.2.4/etc/hadoop/
vim mapred-site.xml
在configuration标签中添加以下内容
<property>
<name>mapreduce.framework.namename>
<value>yarnvalue>
property>
<property>
<name>mapreduce.jobhistory.addressname>
<value>node1.vbox.cn:10020value>
property>
<property>
<name>mapreduce.jobhistory.webapp.addressname>
<value>node1.vbox.cn:19888value>
property>
<property>
<name>yarn.app.mapreduce.am.envname>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}value>
property>
<property>
<name>mapreduce.map.envname>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}value>
property>
<property>
<name>mapreduce.reduce.envname>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}value>
property>
yarn-site.xml
cd /export/server/hadoop-3.2.4/etc/hadoop/
vim yarn-site.xml
在configuration标签中添加以下内容
<property>
<name>yarn.resourcemanager.hostnamename>
<value>node1.vbox.cnvalue>
property>
<property>
<name>yarn.nodemanager.aux-servicesname>
<value>mapreduce_shufflevalue>
property>
<property>
<name>yarn.scheduler.minimum-allocation-mbname>
<value>256value>
property>
<property>
<name>yarn.scheduler.maximum-allocation-mbname>
<value>512value>
property>
workers
cd /export/server/hadoop-3.2.4/etc/hadoop/
vim workers
在workers
文件中添加主机名称或IP
node1.vbox.cn
node2.vbox.cn
node3.vbox.cn
分发同步安装包
在node1机器上将Hadoop安装包scp同步到其他机器上
cd /export/server/
scp -r hadoop-3.2.4 node2:/export/server/
scp -r hadoop-3.2.4 node3:/export/server/
配置Hadoop环境变量
在node1上配置Hadoop环境变量
vim ~/.bash_profile
export HADOOP_HOME=/export/server/hadoop-3.2.4
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
再其他三台机器执行同样的操作并加载环境变量
source ~/.bash_profile
验证
[root@node1 hadoop]# hadoop version
Hadoop 3.2.4
Source code repository Unknown -r Unknown
Compiled by root on 2022-11-17T10:35Z
Compiled with protoc 2.5.0
From source with checksum ee031c16fe785bbb35252c749418712
This command was run using /export/server/hadoop-3.2.4/share/hadoop/common/hadoop-common-3.2.4.jar
NameNode format(格式化操作)
首次启动HDFS时,必须对其进行格式化操作
format本质上是初始化工作,进行HDFS清理和准备工作
hdfs namenode -format
当格式化日志中出现以下内容说明格式化成功
Hadoop集群启动关闭-手动逐个进程启停
每台机器上每次手动启动关闭一个角色进程
HDFS集群
hdfs --daemon start namenode|datanode|secondarynamenode
hdfs --daemon stop namenode|datanode|secondarynamenode
YARN集群
yarn --daemon start resourcemanager|nodemanager
yarn --daemon stop resourcemanager|nodemanager
在node1中启动
hdfs --daemon start namenode
hdfs --daemon start datanode
yarn --daemon start resourcemanager
yarn --daemon start nodemanager
jps
[root@node1 hadoop-3.2.4]# hdfs --daemon start namenode
[root@node1 hadoop-3.2.4]# hdfs --daemon start datanode
[root@node1 hadoop-3.2.4]# yarn --daemon start resourcemanager
[root@node1 hadoop-3.2.4]# yarn --daemon start nodemanager
[root@node1 hadoop-3.2.4]# jps
2066 NameNode
2163 DataNode
2260 ResourceManager
2516 NodeManager
2605 Jps
在node2中启动
hdfs --daemon start datanode
hdfs --daemon stop secondarynamenode
yarn --daemon start nodemanager
jps
[root@node2 ~]# hdfs --daemon start datanode
[root@node2 ~]# hdfs --daemon stop secondarynamenode
[root@node2 ~]# yarn --daemon start nodemanager
[root@node2 ~]# jps
2451 Jps
2340 NodeManager
2262 SecondaryNameNode
2157 DataNode
在node3中启动
hdfs --daemon start datanode
yarn --daemon start nodemanager
jps
[root@node3 ~]# hdfs --daemon start datanode
[root@node3 ~]# yarn --daemon start nodemanager
[root@node3 ~]# jps
1605 NodeManager
1690 Jps
1518 DataNode
Hadoop集群启动关闭-shell脚本一键启停
在node1上,使用自带的shell脚本一键启动
前提:配置好机器之间的SSH免密登录和workers文件。
HDFS集群
start-dfs.sh
stop-dfs.sh
YARN集群
start-yarn.sh
stop-yarn.sh
Hadoop集群
start-all.sh
stop-all.sh
地址:http://node1.vbox.cn:9870
其中node1.vbox.cn是namenode运行所在集群的主机名或者IP
如果使用主机名访问,得修改Windows中的hosts文件
地址:http://node1.vbox.cn:8088
其中node1.vbox.cn是resourcemanager运行所在机器的主机名或者IP
如果使用主机名访问,得修改Windows中的hosts文件