> 请确保你已经完成虚拟机的安装,并安装好java环境
集群简介
HADOOP集群具体来说包含两个集群:HDFS集群和YARN集群,两者逻辑上分离,但物理上常在一起。
HDFS集群负责海量数据的存储,集群中的角色主要有:
NameNode、DataNode、SecondaryNameNode
YARN集群负责海量数据运算时的资源调度,集群中的角色主要有:
ResourceManager、NodeManager
那mapreduce是什么呢?它其实是一个分布式运算编程框架,是应用程序开发包,由用户按照编程规范进行程序开发,后打包运行在HDFS集群上,并且受到YARN集群的资源调度管理。
集群部署方式
Hadoop部署方式分三种:
1、Standalone mode(独立模式)
独立模式又称为单机模式,仅1个机器运行1个java进程,主要用于调试。
2、Pseudo-Distributed mode(伪分布式模式)
伪分布模式也是在1个机器上运行HDFS的NameNode和DataNode、YARN的 ResourceManger和NodeManager,但分别启动单独的java进程,主要用于调试。
3、Cluster mode(群集模式)-单节点模式-高可用HA模式
集群模式主要用于生产环境部署。会使用N台主机组成一个Hadoop集群。这种部署模式下,主节点和从节点会分开部署在不同的机器上。
本教程采用三个节点组成集群
1、 Hadoop运行环境搭建
1.1、修改主机名和hosts文件
1)修改主机名称
sudo hostnamectl set-hostname <newhostname>
sudo hostnamectl set-hostname hadoop101
sudo hostnamectl set-hostname hadoop102
sudo hostnamectl set-hostname hadoop103
2)配置Linux克隆机主机名称映射hosts文件,打开/etc/hosts (此步操作三台机子都要执行)
[root@hadoop102 ~]# vim /etc/hosts
添加如下内容
192.168.24.xxx hadoop102
192.168.24.xxx hadoop103
192.168.24.xxx hadoop104
3)关闭防火墙,关闭防火墙开机自启
[root@hadoop102 ~]# systemctl stop firewalld
[root@hadoop102 ~]# systemctl disable firewalld.service
1.2、SSH无密登录配置
1)hadoop102上生成公钥和私钥:
[root@hadoop102 .ssh]$ pwd
/home/shuidi/.ssh
[root@hadoop102 .ssh]$ ssh-keygen -t rsa
然后敲(三个回车),就会生成两个文件 id_rsa(私钥)、id_rsa.pub(公钥)
将公钥拷贝到要免密登录的目标机器上
[root@hadoop102 .ssh]$ ssh-copy-id hadoop102
[root@hadoop102 .ssh]$ ssh-copy-id hadoop103
[root@hadoop102 .ssh]$ ssh-copy-id hadoop104
2)hadoop103上生成公钥和私钥:
[root@hadoop103 .ssh]$ pwd
/home/shuidi/.ssh
[root@hadoop103 .ssh]$ ssh-keygen -t rsa
然后敲(三个回车),就会生成两个文件 id_rsa(私钥)、id_rsa.pub(公钥)
将公钥拷贝到要免密登录的目标机器上
[root@hadoop103 .ssh]$ ssh-copy-id hadoop102
[root@hadoop103 .ssh]$ ssh-copy-id hadoop103
[root@hadoop103 .ssh]$ ssh-copy-id hadoop104
3)hadoop104上生成公钥和私钥:
[root@hadoop104 .ssh]$ pwd
/home/shuidi/.ssh
[root@hadoop104 .ssh]$ ssh-keygen -t rsa
然后敲(三个回车),就会生成两个文件 id_rsa(私钥)、id_rsa.pub(公钥)
将公钥拷贝到要免密登录的目标机器上
[root@hadoop104 .ssh]$ ssh-copy-id hadoop102
[root@hadoop104 .ssh]$ ssh-copy-id hadoop103
[root@hadoop104 .ssh]$ ssh-copy-id hadoop104
2、Hadoop部署
2.1
集群部署规划
注意:NameNode和SecondaryNameNode不要安装在同一台服务器
注意:ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台机器上。
首先,我们需要从官方网站下载Hadoop的最新版本。可以在官网link
打开Hadoop官方网站,点击“Downloads”选项卡。
在“Stable Releases”部分,找到最新的可用版本,并点击下载链接。
选择合适的版本(根据操作系统和需求),下载压缩包。
此时我们默认在/opt/tage/ 下面存放压缩包
/opt/service/下面存放解压后的文件
2.2 、
1)、进入到Hadoop安装包路径下
[root@hadoop102 ~]$ cd /opt/tage/
2)、解压安装文件到/opt/module下面
[root@hadoop102 software]$ tar -zxvf hadoop-3.1.3.tar.gz -C /opt/service/
3)、查看是否解压成功
[root@hadoop102 software]$ ls /opt/service/hadoop-3.1.3
bin etc include lib libexec LICENSE.txt NOTICE.txt README.txt sbin share
4)、将Hadoop添加到环境变量
(1)获取Hadoop安装路径
[root@hadoop102 hadoop]$ pwd
/opt/service/hadoop-3.1.3
(2)进入/etc/profile
[root@hadoop102 hadoop]$ vim /etc/profile
在profile文件末尾添加hadoop路径:(shitf+g)
#HADOOP_HOME
export HADOOP_HOME=/opt/service/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
(3)保存后退出
:wq
(4)分发环境变量文件`
[root@hadoop102 hadoop]$ /home/root/bin/ xsync /etc/profile
(5)source 是之生效(3台节点)
[root@hadoop102 hadoop]$ source /etc/profile
[root@hadoop103 hadoop]$ source /etc/profile
[root@hadoop104 hadoop]$ source /etc/profile
3、配置集群
1)核心配置文件
配置core-site.xml
[root@hadoop102 hadoop]$ cd $HADOOP_HOME/etc/hadoop
[root@hadoop102 hadoop]$ vim core-site.xml
文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:8020</value>
</property>
<!-- 指定hadoop数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/service/hadoop-3.1.3/data</value>
</property>
<!-- 配置HDFS网页登录使用的静态用户为root -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
<!-- 配置该root(superUser)允许通过代理访问的主机节点 -->
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<!-- 配置该root(superUser)允许通过代理用户所属组 -->
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
<!-- 配置该root(superUser)允许通过代理的用户-->
<property>
<name>hadoop.proxyuser.root.users</name>
<value>*</value>
</property>
<!-- 默认配置下存在未授权漏洞,攻击者可以在未授权的情况下远程执行代码。需立即修复加固。禁止匿名访问,在配置文件<bin_path>/etc/hadoop/core-site.xml中增加或修改配置项:-->
<property>
<name>hadoop.http.authentication.simple.anonymous.allowed</name>
<value>false</value>
</property>
</configuration>
2)HDFS配置文件
配置hdfs-site.xml
[root@hadoop102 hadoop]$ vim hdfs-site.xml
文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- nn web端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop102:9870</value>
</property>
<!-- 2nn web端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:9868</value>
</property>
<!-- 测试环境指定HDFS副本的数量1 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
</configuration>
3)YARN配置文件
配置yarn-site.xml
[root@hadoop102 hadoop]$ vim yarn-site.xml
文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定MR走shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</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>
<!--yarn单个容器允许分配的最大最小内存 -->
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>512</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>4096</value>
</property>
<!-- yarn容器允许管理的物理内存大小 -->
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>4096</value>
</property>
<!-- 关闭yarn对物理内存和虚拟内存的限制检查 -->
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
</configuration>
4)MapReduce配置文件
配置mapred-site.xml
[root@hadoop102 hadoop]$ vim mapred-site.xml
文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定MapReduce程序运行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop102:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop102:19888</value>
</property>
5)配置workers
[root@hadoop102 hadoop]$ vim /opt/service/hadoop-3.1.3/etc/hadoop/workers
在该文件中增加如下内容:
hadoop102
hadoop103
hadoop104
注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。
4、 分发Hadoop
[root@hadoop102 hadoop]$ xsync /opt/service/hadoop-3.1.3/
5、启动集群
(1)如果集群是第一次启动,需要在hadoop102节点格式化NameNode(注意格式化之前,一定要先停止上次启动的所有namenode和datanode进程,然后再删除data和log数据)
[root@hadoop102 hadoop]$ bin/hdfs namenode -format
(2)启动HDFS
[root@hadoop102 hadoop]$ sbin/start-dfs.sh
Web端查看HDFS的Web页面:
http://hadoop102:9870/