> 文章列表 > Hadoop 集群搭建

Hadoop 集群搭建

Hadoop 集群搭建

使用三台虚拟机,搭建一个 Hadoop 集群

目录

一、centos7 Minimal 版本安装配置

二、Hadoop 单节点安装

① 修改主机名和映射 hosts 文件

② 安装 JDK

③ 安装 Hadoop

 ④ 本地模式测试(官方WordCount)

 三、Hadoop 集群配置

(1)克隆 hadoop102、hadoop103

(2)群分发脚本xsync

(3)root 用户免密登录配置

(4)集群配置

1、集群部署规划

2、配置文件说明

3、配置集群

4、在集群上分发配置好的Hadoop配置文件

5、去 102 和 103 上查看文件分发情况

(5)群起集群

1、配置workers

2、启动集群

3、集群基本测试

(6)集群启动/停止方式总结 

1、各个模块分开启动/停止

2、各个服务组件逐一启动/停止

(7)常用端口号说明


一、centos7 Minimal 版本安装配置

Centos7 Minimal 版本基本配置记录_centos7minimal_YuBooy的博客-CSDN博客

二、Hadoop 单节点安装

资料来源:(尚硅谷)尚硅谷大数据Hadoop教程(Hadoop 3.x安装搭建到集群调优)_哔哩哔哩_bilibili

机器配置:(基础配置详看:Centos7 Minimal 版本基本安装配置)

主机名

hadoop101

hadoop102

hadoop103

IP

192.168.139.101

192.168.139.102

192.168.139.103

用户名

root

root

root

密码

123

123

123

HDFS

NameNode

DataNode

DataNode

SecondaryNameNode

DataNode

YARN

NodeManager

ResourceManager

NodeManager

NodeManager

先在 hadoop101 上配置:

① 修改主机名和映射 hosts 文件;

② 安装 JDK;安装 Hadoop 再克隆 hadoop102、hadoop103;

③ 克隆后再修改 hadoop102 、hadoop103 的主机名和 IP。


① 修改主机名和映射 hosts 文件

// 改主机名
hostnamectl set-hostname hadoop101// 修改映射 hosts 文件
vim /etc/hosts
// 添加:
192.168.139.101 hadoop101
192.168.139.102 hadoop102
192.168.139.103 hadoop103   reboot

修改windows的主机映射文件(hosts文件)

// C:\\Windows\\System32\\drivers\\etc 路径
// 添加:
192.168.139.101 hadoop101
192.168.139.102 hadoop102
192.168.139.103 hadoop103

② 安装 JDK

非 minimal 版本需要先卸载自带的 JDK;minimal 版本不需要。

1.把 jdk、hadoop 包放到 /etc/sofware 目录下

 2.安装

// 解压JDK到/opt/module目录下
[root@hadoop101 sofware]# tar -zxvf jdk-8u144-linux-x64.tar.gz -C /opt/module
/// 配置JDK环境变量
// (1)新建/etc/profile.d/my_env.sh文件
vim /etc/profile.d/my_env.sh
// (2)添加如下内容
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144
export PATH=$PATH:$JAVA_HOME/bin
// (3)source一下/etc/profile文件,让新的环境变量PATH生效
source /etc/profile
// (4)测试JDK是否安装成功
java -version

③ 安装 Hadoop

Hadoop下载地址:Index of /dist/hadoop/common/hadoop-3.1.3

/ 解压
cd /opt/sofware
tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/// 将Hadoop添加到环境变量
//(1)打开/etc/profile.d/my_env.sh文件
vim /etc/profile.d/my_env.sh
// (2)添加如下内容
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin    
// (3)source一下/etc/profile文件,让新的环境变量PATH生效
source /etc/profile
// (4)测试hadoop是否安装成功
hadoop version

Hadoop目录结构:

(1)bin目录:存放对Hadoop相关服务(hdfs,yarn,mapred)进行操作的脚本

(2)etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件

(3)lib目录:存放Hadoop的本地库(对数据进行压缩解压缩功能)

(4)sbin目录:存放启动或停止Hadoop相关服务的脚本

(5)share目录:存放Hadoop的依赖jar包、文档、和官方案例

 ④ 本地模式测试(官方WordCount)

// 1.创建一个wcinput文件夹
mkdir /opt/module/hadoop-3.1.3/wcinput
// 2.创建一个word.txt文件cd /opt/module/hadoop-3.1.3/wcinput
vim word.txt
// 3.添加如下内容:
hadoop yarn
hadoop mapreduce
yuyu
yuyu
// 4.执行程序
cd /opt/module/hadoop-3.1.3
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount wcinput wcoutput
// 5. 查看结果
cat wcoutput/part-r-00000

 三、Hadoop 集群配置

主机名

hadoop101

hadoop102

hadoop103

IP

192.168.139.101

192.168.139.102

192.168.139.103

用户名

root

root

root

密码

123

123

123

(1)克隆 hadoop102、hadoop103

 克隆之后修改 IP 主机名

// 修改 ip 102/103
vim  /etc/sysconfig/network-scripts/ifcfg-ens33
// 修改主机名 hadoop102/hadoop103
hostnamectl set-hostname hadoop102// 重启
reboot

(2)群分发脚本xsync

① 安装 rsync(三台机器上都要装)

yum -y install rsync# 启动服务与开机自启动
systemctl start rsyncd.service
systemctl enable rsyncd.service

② 在 /root/bin 目录下创建 xsync 文件

cd /root/bin
vim xsync

粘贴以下内容:

#!/bin/bash
#1. 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if [ $pcount -lt 1 ]
thenecho Not Enough Arguement!exit;
fi
​
#2. 遍历集群所有机器
for host in hadoop101 hadoop102 hadoop103       ##更改自己的服务器域名
doecho ==================== $host ====================
​#3. 遍历所有目录,挨个发送for file in $@do
​#4 判断文件是否存在if [ -e $file ]then
​#5. 获取父目录pdir=$(cd -P $(dirname $file); pwd)echo pdir=$pdir
​#6. 获取当前文件的名称fname=$(basename $file)echo fname=$fname
​#7. 通过ssh执行命令:在$host主机上递归创建文件夹(如果存在该文件夹)ssh $host "mkdir -p $pdir"
​#8. 远程同步文件至$host主机的$USER用户的$pdir文件夹下rsync -av $pdir/$fname $USER@$host:$pdirelseecho $file does not exists!fidone
done

③ 给 xsync 添加权限:

 chmod 777 xsync

④ 添加全局变量

vim /etc/profile
​
在末尾添加:
PATH=$PATH:/root/bin
export PATH
​
退出,执行以下命令使其生效
source /etc/profile

(3)root 用户免密登录配置

① 在 ~./ssh 目录下生成一对密钥(3个节点都要生成)

cd ~/.ssh
ssh-keygen -t rsa
# 输入该命令后会有提示,一直回车即可# 如果提示 【-bash: cd: .ssh: 没有那个文件或目录】 直接 ssh-keygen -t rsa 生成密钥就行

② hadoop101 节点中将公匙保存到 authorized_keys 文件中

[root@hadoop101 .ssh]# cat id_rsa.pub >> authorized_keys

③ 登录 hadoop102 和 hadoop103 节点,将其公钥文件内容拷贝到 hadoop101 节点的 authorized_keys 文件中

# hadoop102 节点的公钥拷贝
[root@hadoop102 .ssh]# ssh-copy-id -i hadoop101
​
# hadoop103 节点的公钥拷贝
[root@hadoop103 .ssh]# ssh-copy-id -i hadoop101

④ 在 hadoop101 节点中修改权限(~/.ssh 目录 和 authorized_keys 文件)

[root@hadoop101 .ssh]# chmod 700 ~/.ssh
[root@hadoop101 .ssh]# chmod 644 ~/.ssh/authorized_keys

⑤ 将授权文件分发到其他节点上

# 拷贝到 hadoop102 节点上
[root@hadoop101 .ssh]# scp /root/.ssh/authorized_keys hadoop102:/root/.ssh/
​
# 拷贝到 hadoop103 节点上
[root@hadoop101 .ssh]# scp /root/.ssh/authorized_keys hadoop103:/root/.ssh/

至此,免密码登录已经设定完成,注意第一次ssh登录时需要输入密码,再次访问时即可免密码登录

[root@hadoop101 .ssh]# ssh hadoop102
[root@hadoop101 .ssh]# ssh hadoop103

(4)集群配置

1、集群部署规划

> NameNode 和 SecondaryNameNode 不要安装在同一台服务器

> ResourceManager 也很消耗内存,不要和 NameNode、SecondaryNameNode 配置在同一台机器上。

主机名

hadoop101

hadoop102

hadoop103

IP

192.168.139.101

192.168.139.102

192.168.139.103

用户名

root

root

root

密码

123

123

123

HDFS

NameNode

DataNode

DataNode

SecondaryNameNode

DataNode

YARN

NodeManager

ResourceManager

NodeManager

NodeManager

2、配置文件说明

        Hadoop配置文件分两类:默认配置文件 自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。

        ① 默认配置文件:

默认文件

文件存放在Hadoop的jar包中的位置

[core-default.xml]

hadoop-common-3.1.3.jar/core-default.xml

[hdfs-default.xml]

hadoop-hdfs-3.1.3.jar/hdfs-default.xml

[yarn-default.xml]

hadoop-yarn-common-3.1.3.jar/yarn-default.xml

[mapred-default.xml]

hadoop-mapreduce-client-core-3.1.3.jar/mapred-default.xml

        ② 自定义配置文件:

        core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml 四个配置文件存放在 $HADOOP_HOME/etc/hadoop 这个路径上,用户可以根据项目需求重新进行修改配置。

3、配置集群

① 配置 core-site.xml

[root@hadoop101 hadoop]# cd $HADOOP_HOME/etc/hadoop
[root@hadoop101 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://hadoop101:8020</value></property><!-- 指定hadoop数据的存储目录 --><property><name>hadoop.tmp.dir</name><value>/opt/module/hadoop-3.1.3/data</value></property><!-- 配置HDFS网页登录使用的静态用户为root --><property><name>hadoop.http.staticuser.user</name><value>root</value></property>
</configuration>

② 配置 hdfs-site.xml

[root@hadoop101 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>hadoop101:9870</value></property><!-- 2nn web端访问地址--><property><name>dfs.namenode.secondary.http-address</name><value>hadoop103:9868</value></property>
</configuration>

③ 配置 yarn-site.xml

[root@hadoop101 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>hadoop102</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>
</configuration>

④ 配置 mapred-site.xml

[root@hadoop101 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>

4、在集群上分发配置好的Hadoop配置文件

[root@hadoop101 hadoop]# xsync /opt/module/hadoop-3.1.3/etc/hadoop/

5、去 102 和 103 上查看文件分发情况

[root@hadoop102 ~]# cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
[root@hadoop103 ~]# cat /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml

(5)群起集群

1、配置workers

[root@hadoop101 hadoop]# vim /opt/module/hadoop-3.1.3/etc/hadoop/workers

【注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行】

添加如下内容:

hadoop101
hadoop102
hadoop103

同步所有节点配置文件

[root@hadoop101 hadoop]# xsync /opt/module/hadoop-3.1.3/etc

2、启动集群

① 第一次启动需要:在 hadoop101 节点格式化 NameNode

[root@hadoop101 hadoop-3.1.3]# cd /opt/module/hadoop-3.1.3/
[root@hadoop101 hadoop-3.1.3]# hdfs namenode -format

【注意:格式化 NameNode,会产生新的集群 id,导致 NameNode 和 DataNode 的集群 id 不一致,集群找不到已往数据。如果集群是第一次启动,直接在 hadoop101 节点格式化 NameNode;如果集群在运行过程中报错,需要重新格式化 NameNode 的话,一定要先停止 namenode 和 datanode 进程,并且要删除所有机器的 data 和 logs 目录,然后再进行格式化】

② 启动 HDFS(在 NameNode 节点:hadoop101)

[root@hadoop101 hadoop-3.1.3]# cd /opt/module/hadoop-3.1.3/
[root@hadoop101 hadoop-3.1.3]# sbin/start-dfs.sh

如果启动遇到下面问题:

【ERROR: Attempting to operate on hdfs namenode as root】

解决方案:两种解决ERROR: Attempting to operate on hdfs namenode as root的方法_世幻水的博客-CSDN博客

vim /etc/profile

#添加:

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

#使生效:

source /etc/profile

③ 在配置了 ResourceManager 的节点(hadoop102)启动YARN

[root@hadoop102 hadoop-3.1.3]# cd /opt/module/hadoop-3.1.3/
[root@hadoop102 hadoop-3.1.3]# sbin/start-yarn.sh

④ Web 端查看 HDFS 的 NameNode

        1.浏览器中输入:http://hadoop101:9870

        2.查看HDFS上存储的数据信息

 ⑤ Web 端查看 YARN 的 ResourceManager

        1.浏览器中输入:http://hadoop102:8088

        2.查看YARN上运行的Job信息

3、集群基本测试

① 上传文件到集群

上传小文件

[root@hadoop101 ~]# hadoop fs -mkdir /input
[root@hadoop101 ~]# hadoop fs -put $HADOOP_HOME/wcinput/word.txt /input

上传大文件

[root@hadoop101 ~]# hadoop fs -put /opt/sofware/jdk-8u144-linux-x64.tar.gz /

从 Web 页面查看上传的文件:

 ② 下载文件

[root@hadoop103 ~]# hadoop fs -get /jdk-8u144-linux-x64.tar.gz ./

 ③ 执行 wordcount 程序

[root@hadoop101 hadoop-3.1.3]# cd /opt/module/hadoop-3.1.3
[root@hadoop101 hadoop-3.1.3]# hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar wordcount /input /output


(6)集群启动/停止方式总结 

1、各个模块分开启动/停止

① 整体启动 / 停止HDFS(需要在 NameNode 节点上执行)

start-dfs.sh / stop-dfs.sh

[root@hadoop101 hadoop-3.1.3]# /opt/module/hadoop-3.1.3/sbin/start-dfs.sh

② 整体启动 / 停止YARN(需要在 ResourceManager 节点上执行)

start-yarn.sh / stop-yarn.sh

[root@hadoop102 hadoop-3.1.3]# /opt/module/hadoop-3.1.3/sbin/start-yarn.sh

2、各个服务组件逐一启动/停止

① 分别启动 / 停止HDFS组件

hdfs --daemon start / stop namenode / datanode / secondarynamenode

② 启动 / 停止YARN

yarn --daemon start / stop resourcemanager / nodemanager


(7)常用端口号说明

端口名称

Hadoop2.x

Hadoop3.x

NameNode内部通信端口

8020 / 9000

8020 / 9000/9820

NameNode HTTP UI

50070

9870

MapReduce查看执行任务端口

8088

8088

历史服务器通信端口

19888

19888

参考: 资料来源:(尚硅谷)尚硅谷大数据Hadoop教程(Hadoop 3.x安装搭建到集群调优)_哔哩哔哩_bilibili

全国邮编查询网