喵星之旅-调皮的大象-Hadoop安装

准备虚拟机及基本环境

网络配置

先确认自己的网络情况,我这里是网关和dns:192.168.93.2

设置为静态ip:192.168.93.102

重启network服务
systemctl restart network

可通过ip addr 查看网络情况。打开浏览器确认网络可用。

安装插件

1
2
sudo yum install -y epel-release net-tools vim
sudo yum install -y psmisc nc rsync lrzsz ntp libzstd openssl-static tree iotop git

关闭防火墙

这里是统一采用外部防火墙,本身不开。可参看阿里云的规则组,阿里云也是默认关闭防火墙的。

1
2
systemctl stop firewalld
systemctl disable firewalld

如果之前使用的root,新建账号bunny

1
2
useradd bunny
passwd bunny

配置免密提权

1
2
3
4
sudo visudo
# 在root ALL=(ALL) ALL下面添加如下内容
bunny ALL=(ALL) NOPASSWD:ALL

创建软件安装目录

1
sudo mkdir /opt/bunny

修改目录的所属主和所属组为bunny

1
2
cd /opt
chown bunny:bunny bunny

修改主机名:h102

1
sudo vi /etc/hostname

修改hosts文件

1
2
3
4
5
6
7
8
9
10
11
12
sudo vi /etc/hosts

# 添加如下内容
192.168.93.100 h100
192.168.93.101 h101
192.168.93.102 h102
192.168.93.103 h103
192.168.93.104 h104
192.168.93.105 h105
192.168.93.106 h106
192.168.93.107 h107
192.168.93.108 h108

重启生效。

卸载自带的jdk

1
2
3
4
5
6
# 查询已安装的jdk
rpm -qa | grep java
# 卸载查询到的jdk
sudo rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.332.b09-1.el7_9.x86_64
sudo rpm -e --nodeps java-1.8.0-openjdk-1.8.0.332.b09-1.el7_9.x86_64

安装hadoop

将安装包传到系统,包含jdk和Hadoop

jdk安装

1
2
3
4
5
6
7
8
9
10
11
12
# 解压
tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/bunny/
# 配置环境变量
sudo vi /etc/profile.d/bunny.sh

# 添加内容
#JAVA_HOME
export JAVA_HOME=/opt/bunny/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin

# 让新的环境变量PATH生效
source /etc/profile

Hadoop安装

下载地址:https://archive.apache.org/dist/hadoop/common/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 解压
tar -zxvf hadoop-3.1.3.tar.gz -C /opt/bunny/

# 配置环境变量
sudo vi /etc/profile.d/bunny.sh

# 添加内容
#HADOOP_HOME
export HADOOP_HOME=/opt/bunny/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

# 让新的环境变量PATH生效
source /etc/profile

复制虚拟机及地址规划

可以复制粘贴整个虚拟机文件夹,手工复制的需要改网卡mac(虚拟机导入-编辑设置-选择网卡-高级-mac生成),修改虚拟机名字。
(收费用户可以使用复制克隆功能)

进入系统修改ip地址和计算机名(参看前面操作)。

分发脚本

在/home/bunny/bin目录下创建xsync文件

1
2
3
4
cd /home/bunny
mkdir bin
cd bin
vi xsync

添加内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/bin/bash

#1. 判断参数个数
if [ $# -lt 1 ]
then
echo "Not Enough Arguement!"
exit
fi

#2. 遍历集群所有机器
for host in h102 h103 h104
do
echo ==================== $host ====================
#3. 遍历所有目录,挨个发送

for file in $@
do
#4. 判断文件是否存在
if [ -e $file ]
then
#5. 获取父目录
pdir=$(cd -P $(dirname $file); pwd)

#6. 获取当前文件的名称
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done

修改脚本 xsync 具有执行权限
chmod +x xsync

同步脚本

1
xsync /home/bunny/bin

由于没有配置免密登录,需要逐一确认、输入密码。

免密登录

在每一台机器都要执行,这里只以h102为例

1
2
3
4
5
6
7
8
# 生成公钥和私钥
ssh-keygen -t rsa

# 3个回车后生成成功,然后将公钥拷贝到要免密登录的目标机器上(包括自己)
ssh-copy-id h102
ssh-copy-id h103
ssh-copy-id h104

集群配置

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

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

我们这里集群配置需要自定义配置文件:

1
vi /opt/bunny/hadoop-3.1.3/etc/hadoop/core-site.xml

core-site.xml内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
<!-- 指定NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://h102:8020</value>
</property>

<!-- 指定hadoop数据的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/bunny/hadoop-3.1.3/data</value>
</property>

<!-- 配置HDFS网页登录使用的静态用户为bunny -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>bunny</value>
</property>
</configuration>
1
vi /opt/bunny/hadoop-3.1.3/etc/hadoop/hdfs-site.xml

hdfs-site.xml内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?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>h102:9870</value>
</property>
<!-- 2nn web端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>h104:9868</value>
</property>
</configuration>
1
vi /opt/bunny/hadoop-3.1.3/etc/hadoop/yarn-site.xml

yarn-site.xml内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?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>h103</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>
1
vi /opt/bunny/hadoop-3.1.3/etc/hadoop/mapred-site.xml

mapred-site.xml内容:

1
2
3
4
5
6
7
8
9
10
11
<?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>

分发配置文件

1
xsync /opt/bunny/hadoop-3.1.3/etc/hadoop/

配置workers

1
2
3
4
5
6
7
vi /opt/bunny/hadoop-3.1.3/etc/hadoop/workers

# 添加如下3行内容,结尾无空格
h102
h103
h104

同步文件

1
xsync /opt/bunny/hadoop-3.1.3/etc

启动集群

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

启动HDFS(相同目录有关闭脚本)

1
/opt/bunny/hadoop-3.1.3/sbin/start-dfs.sh

在配置了ResourceManager的节点(h103)启动YARN(相同目录有关闭脚本)
/opt/bunny/hadoop-3.1.3/sbin/start-yarn.sh

分别启动/停止HDFS组件
hdfs --daemon start/stop namenode/datanode/secondarynamenode

启动/停止YARN
yarn --daemon start/stop resourcemanager/nodemanager

Hadoop集群常用脚本

Hadoop集群启停脚本

启停脚本(包含HDFS,Yarn,Historyserver):bunnyhadoop.sh

1
2
cd /home/bunny/bin
vi bunnyhadoop.sh

编辑内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/bin/bash

if [ $# -lt 1 ]
then
echo "No Args Input..."
exit ;
fi

case $1 in
"start")
echo " ===========启动 hadoop集群 ========"
echo " --------------- 启动 hdfs ---------------"
ssh h102 "/opt/bunny/hadoop-3.1.3/sbin/start-dfs.sh"
echo " --------------- 启动 yarn ---------------"
ssh h103 "/opt/bunny/hadoop-3.1.3/sbin/start-yarn.sh"
;;
"stop")
echo " ==========关闭 hadoop集群 ========="
echo " --------------- 关闭 yarn ---------------"
ssh h103 "/opt/bunny/hadoop-3.1.3/sbin/stop-yarn.sh"
echo " --------------- 关闭 hdfs ---------------"
ssh h102 "/opt/bunny/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)
echo "Input Args Error..."
;;
esac

赋予脚本执行权限
chmod +x bunnyhadoop.sh

查看三台服务器Java进程脚本:jpsall

1
2
cd /home/bunny/bin
vi jpsall

输入如下内容

1
2
3
4
5
6
7
#!/bin/bash

for host in h102 h103 h104
do
echo =============== $host ===============
ssh $host jps
done

保存后退出,然后赋予脚本执行权限
chmod +x jpsall

同步脚本和查看地址

1
xsync /home/bunny/bin/

Web端查看HDFS的NameNode
http://192.168.93.102:9870

Web端查看YARN的ResourceManager
http://192.168.93.103:8088

配置历史服务器

配置mapred-site.xml

1
vi /opt/bunny/hadoop-3.1.3/etc/hadoop/mapred-site.xml

添加内容

1
2
3
4
5
6
7
8
9
10
11
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>h102:10020</value>
</property>

<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>h102:19888</value>
</property>

分发配置

1
xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml

在h102启动历史服务器
mapred --daemon start historyserver

查看历史服务器是否启动
jps

查看JobHistory
http://192.168.93.102:19888/jobhistory

日志的聚集

集群时间同步

常见问题

文章目录
  1. 准备虚拟机及基本环境
    1. 网络配置
    2. 安装插件
    3. 关闭防火墙
    4. 如果之前使用的root,新建账号bunny
    5. 配置免密提权
    6. 创建软件安装目录
    7. 修改目录的所属主和所属组为bunny
    8. 修改主机名:h102
    9. 修改hosts文件
    10. 卸载自带的jdk
  2. 安装hadoop
    1. jdk安装
    2. Hadoop安装
  3. 复制虚拟机及地址规划
  4. 分发脚本
  5. 免密登录
  6. 集群配置
  7. 启动集群
  8. Hadoop集群常用脚本
    1. Hadoop集群启停脚本
    2. 查看三台服务器Java进程脚本:jpsall
    3. 同步脚本和查看地址
  9. 配置历史服务器
  10. 日志的聚集
  11. 集群时间同步
  12. 常见问题
|