更新于:

hadoop安装文档

Hadoop安装教程

仅供厦门南洋学院的同学参考使用,基于厦门南洋学院实训楼413的环境进行配置,无法保证能够应用到其他场景。

  • 编纂时间:2023.10.11
  • 编纂作者:夏五郎

Linux入门教程

在linux下安装hadoop必须要会的几个基本操作:

  • cd 目录 # 切换目录的命令 使用 cd 命令可以切换目录,比如 cd $MP 就是打开$MP 目录。 其中在目录前添加 ./module或不加任何标记 module 表示当前目录,添加 ../module 表示上级目录 ,/module 表示从根目录 / 开始的绝对路径目录。

  • vi 文件目录 # 在命令行中使用编辑器的命令 使用 vi 命令可以在shell中编辑文件,比如 vi /etc/hosts 就是编辑/etc/hosts文件。 文件目录的标注方法和cd同样,不存在的文件会直接新建,请注意! 使用方向键移动光标,点击 i 键,最下方显示 INSERT 后进入编辑模式 点击 Esc 键,然后输入 :wq可以保存文件并退出,其中q表示退出,w表示保存

  • tar # 解压文件的命令 使用tar命令可以压缩/解压文件,hadoop配置中只用到了解压文件,这里给出解压文件的示例命令,其他参数请自行tar --help 或者bing查看。

    1
    2
    3
    tar -xvzf 压缩目录文件 -C 解压到的目录
    # 例子:
    tar -xvzf /opt/jdk-8u162-linux-x64.tar.gz -C $MP

    其中 /opt/jdk-8u162-linux-x64.tar.gz 是压缩文件所在文件路径,$MP 是要解压到的文件目录

  • ip #命令 使用 ip a 命令可以查看服务器的IP地址,输出一般为这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
  [root@master ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:56:e9:74 brd ff:ff:ff:ff:ff:ff
inet 192.168.152.81/24 brd 192.168.152.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::6a9a:2e8:734b:def2/64 scope link noprefixroute
valid_lft forever preferred_lft forever

其中 192.168.152.81就是该服务器的ip地址,要学会去看其他节点服务器的ip地址,以便连接操作。

  • ssh #连接服务器命令 使用 ssh 命令可以连接其他节点服务器,连接命令为:
1
2
3
ssh root@192.168.152.81 #root是连接用户名,192.168.152.81是要连接的服务器ip地址。
root@192.168.152.81's password: #显示这个后输入密码
[root@master ~]# 显示这个代表成功连接

小贴士

  • 在敲命令的过程中可以使用 TAB 键补全命令哦~
  • 可以使用方向键的 ↑ ↓ 键切换到上次执行的命令
  • 使用 ssh root@192.168.152.81 "command" 指令即可远程执行 command 指令,前提是配置了密钥连接哦。

Hadoop安装流程

一,配置服务器基本环境

需要在本板块将服务器所需模块以及其他配置文件弄好,以便后续的配置

  1. 在ubuntu中连接hadoop01,将hadoop01作为master节点进行配置:
1
2
3
4
ssh root@192.168.152.81 
#打开终端,输入上述命令进行连接,root是连接用户名,192.168.152.81是要连接的服务器ip地址。
root@192.168.152.81's password: #显示这个后输入密码
[root@server-1 ~]# 显示这个代表成功连接

如果无法连接说明IP地址更改了,请自行查看!

  1. 设置master主机名称和host文件,便于连接
1
2
3
4
5
6
7
8
9
# 设置主机名
hostnamectl set-hostname master

# 在/etc/hosts文件里插入master和其他节点的ip和域名id
cat>>"/etc/hosts"<<EOF
192.168.152.81 master
192.168.152.101 slave1
192.168.152.121 slave2
EOF

或者使用 vi /etc/hosts 命令在文件末尾插入如下代码

1
2
3
192.168.152.81 master
192.168.152.101 slave1
192.168.152.121 slave2
  1. 生成密钥配置一键免密登录
1
2
3
4
5
6
7
# 生成密钥,回车三次即可
ssh-keygen -t rsa

# 将密钥复制给其他的节点便于一键连接,先输入 yes ,再输入节点密码 123456
ssh-copy-id master
ssh-copy-id slave1
ssh-copy-id slave2
  1. 解压配置jdk以及hadoop
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 新建目录 /opt/module 用于放置所有需要的模组文件
mkdir /opt/module

# 解压jdk文件,文件路径为/opt/jdk-8u162-linux-x64.tar.gz,如有变更自行更改
tar -xvzf /opt/jdk-8u162-linux-x64.tar.gz -C /opt/module

# 将jdk目录重命名,方便后续配置
mv /opt/module/jdk1.8.0_162 /opt/module/jdk

# 解压hadoop文件,文件路径为tar -xvzf /opt/hadoop-3.3.0.tar.gz,学校自带镜像没有该版本,该版本为2023参赛所用版本,需要手动上传。
tar -xvzf /opt/hadoop-3.3.0.tar.gz -C /opt/module

# 将hadoop目录重命名,方便后续配置
mv /opt/module/hadoop-3.3.0 /opt/module/hadoop
  1. 设置jdk以及hadoop的环境变量

使用 vi /root/.bash_profile 在文件末尾添加如下内容:

1
2
3
4
export JAVA_HOME=/opt/module/jdk
export PATH=$JAVA_HOME/bin:$PATH
export HADOOP_HOME=/opt/module/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
  1. 配置其他文件节点,执行以下命令:
1
2
3
4
5
# 传输hosts以及.root_profile 配置文件到其他的节点上
scp -r /etc/hosts slave1:/etc
scp -r /etc/hosts slave2:/etc
scp -r /root/.root_profile slave1:/etc
scp -r /root/.bash_profile slave2:/root
  • 打开新的终端页面执行以下指令,配置slave1。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 连接服务器ssh
ssh root@slave1

# 设置主机名
hostnamectl set-hostname slave1

# 创建文件夹
mkdir /opt/module

# 生成密钥,回车三次即可
ssh-keygen -t rsa

# 将密钥复制给其他的节点便于一键连接,先输入 yes ,再输入节点密码 123456
ssh-copy-id master
ssh-copy-id slave1
ssh-copy-id slave2
  • 配置slave2,打开新的终端页面执行以下指令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 连接服务器ssh
ssh root@slave2

# 设置主机名
hostnamectl set-hostname slave2

# 创建文件夹
mkdir /opt/module

# 生成密钥,回车三次即可
ssh-keygen -t rsa

# 将密钥复制给其他的节点便于一键连接,先输入 yes ,再输入节点密码 123456
ssh-copy-id master
ssh-copy-id slave1
ssh-copy-id slave2
  1. 查看安装情况

1
2
3
4
5
6
7
8
# 刷新文件使变量生效
source /root/.bash_profile

# 查看Java安装情况和版本
java -version

# 查看hadoop安装情况和版本
hadoop version

如果都正常输出证明安装成功,如果提示未找到命令则需要排查问题。

二,更改hadoop配置文件

一共有6个配置文件需要更改,hadoop-3.3.0版本需要在4个启动/关闭脚本中添加环境参数,更改文件命令为 vi ./文件名

  1. 更改 hadoop-env.sh文件

切换目录到hadoop配置文件目录下

1
cd /opt/module/hadoop/etc/hadoop

使用如下命令更改:

1
vi ./hadoop-env.sh

查找文件中 JAVA_HOME 关键词并替换为下方路径

  • 提示:可以使用 ?JAVA_HOME 搜索关键词, N 键是查找下一个,在文件内标注export JAVA_HOME= 的地方进行修改,如果有注释需要删除注释进行修改,修改成下方内容
1
export JAVA_HOME=/opt/module/jdk
  1. 更改 core-site.xml 文件

配置文件如下:

1
2
3
4
5
6
7
8
9
10
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop/tmp</value>
</property>
</configuration>
  1. 更改 hdfs-site.xml 文件

配置文件如下:

1
2
3
4
5
6
7
8
9
10
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>slave1:50090</value>
</property>
</configuration>
  1. 更改 mapred-site.xml 文件

配置文件如下:

1
2
3
4
5
6
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>

注:hadoop-2.7.7中需要先复制配置文件模板再进行配置

1
cp ./mapred-site.xml.template ./mapred-site.xml
  1. 更改 yarn-site.xml 文件

配置文件如下:

1
2
3
4
5
6
7
8
9
10
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
  1. 更改 workers 文件

在hadoop-2.7.7中该文件名称为 slaves ,hadoop-3.3.0中该文件为workers 记得根据实际情况更改文件名!

配置文件如下:

1
2
3
master
slave1
slave2
  1. 更改 start-dfs.sh 以及 stop-dfs.sh 中的启动变量

使用 vi /opt/module/hadoop/sbin/start-dfs.sh 以及 vi /opt/module/hadoop/sbin/stop-dfs.sh 指令分别更改,在 文件开头第二行插入如下代码!(#!/usr/bin/env的下面)

1
2
3
4
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
  1. 更改 start-yarn.sh 以及 stop-yarn.sh 中的启动变量

使用 vi /opt/module/hadoop/sbin/start-yarn.sh 以及 vi /opt/module/hadoop/sbin/stop-yarn.sh 指令分别更改,在 文件开头第二行插入如下代码!(#!/usr/bin/env的下面)

1
2
3
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
  1. 将master节点下的模组文件传输给其他的节点
1
2
scp -r /opt/module slave1:/opt
scp -r /opt/module slave2:/opt

三,启动hadoop

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# hdfs初始化
hdfs namenode -format

# 启动dfs
start-dfs.sh

# 启动yarn
start-yarn.sh

# 检查启动情况
jps

# 检查其他节点启动情况
ssh root@slave1 "source /root/.bash_profile && hostnamectl && jps"
ssh root@slave2 "source /root/.bash_profile && hostnamectl && jps"

如果启动失败记得先关闭yarn以及dfs,然后再排查问题

1
2
stop-dfs.sh
stop-yarn.sh

问题更改之后记得使用下方命令同步文件!

1
2
scp -r /opt/module slave1:/opt
scp -r /opt/module slave2:/opt

四,配置文件记忆

注意:比赛时所有的配置文件都需要背过!!! 为了方便背诵,我将所有需要背的配置文件内容拆解开来,助于理解记忆。

理解记忆:

  • xml文件中配置框架英文含义:

    • configuartion:配置
    • property:属性
    • name:名称
    • value:值
  • hadoop-env.sh 文件中需要重点记忆的内容:

    • export JAVA_HOME Java配置路径
  • core-site.xml 文件中需要重点记忆的内容:

    • property hadoop默认主节点的名称
      • name fs.defaultFS
      • value hdfs://master:9000
    • property hadoop缓存目录路径值
      • name hadoop.tmp.dir
      • value /opt/module/hadoop/tmp
  • hdfs-site.xml 文件中需要重点记忆的内容:

    • property hadoop分布式节点数量名称
      • name dfs.replication
      • value 3
    • property hadoop namenode第二节点http地址
      • name dfs.namenode.secondary.http-address
      • value slave1:50090
  • mapred-site.xml 文件中需要重点记忆的内容:

    • property mapreduce framework 名称
      • name mapreduce.framework.name
      • value yarn
  • yarn-site.xml 文件中需要重点记忆的内容:

    • property yarn资源管理主机名称
      • name yarn.resourcemanager.hostname
      • value master
    • property yarn节点管理 aux-services
      • name yarn.nodemanager.aux-services
      • value mapreduce_shuffle
  • workers 文件中需要重点记忆的内容:

    • 所有节点的主机名称
  • *-dfs.sh 文件中需要重点记忆的内容:

    • HDFS_DATANODE_USER=root # HDFS_数据节点_用户=root
    • HADOOP_SECURE_DN_USER=hdfs # HADOOP_安全_DN_用户=hdfs
    • HDFS_NAMENODE_USER=root # HDFS_名称节点_用户=root
    • HDFS_SECONDARYNAMENODE_USER=root # HDFS_第二名称节点_用户=root
  • *-yarn.sh 文件中需要重点记忆的内容:

    • YARN_RESOURCEMANAGER_USER=root # YARN_资源管理_用户=root
    • HADOOP_SECURE_DN_USER=yarn # HADOOP_安全_DN_用户=yarn
    • YARN_NODEMANAGER_USER=root # YARN_节点管理_用户=root

基于docker安装hadoop

必须要掌握的一些docker基础命令:

  1. 获取centos镜像
1
docker pull centos
  1. 查看镜像
1
docker images
  1. 创建容器
1
docker run -itd --privileged --name master master:latest /bin/bash
  1. 查看正在运行的容器:
1
docker ps
  1. 查看所有的容器:
1
docker ps -a
  1. 进入容器
1
docker exec -it --privileged master /bin/bash
  1. 复制文件至容器
1
2
# docker cp 主机文件 master:/容器目录
docker cp /opt/jdk-8u162-linux-x64.tar.gz master:/opt/software

其他操作

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# 覆盖文件
cat>"/etc/hosts"<<EOF
EOF

# 在文件末尾添加

cat>>"/etc/hosts"<<EOF
EOF

# 自动ssh配置
sed -i '/StrictHostKeyChecking/cStrictHostKeyChecking no' /etc/ssh/ssh_config
rm -rf ~/.ssh/{known_hosts,id_rsa*}

# tar末尾添加参数--strip-components 1 可以去掉最外层的目录

# 目录更改重命名
mv $MP/hadoop-2.7.7 $MP/hadoop
mv $MP/jdk1.8.0_162 $MP/jdk

ssh root@slave1 "source /root/.bash_profile"
ssh root@slave2 > /dev/null 2>&1 <<EOF

# JAVA_HOME路径直接添加
echo "export JAVA_HOME=$MP/jdk" >> $MP/hadoop/etc/hadoop/hadoop-env.sh

# 传输hadoop的配置文件所在目录
scp -r $MP/hadoop/etc/hadoop slave1:$MP/hadoop/etc
scp -r $MP/hadoop/etc/hadoop slave2:$MP/hadoop/etc

# dfs启动脚本添加参数,不能直接使用,需要添加到文件头
cat >> $MP/hadoop/sbin/start-dfs.sh<<EOF

HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

EOF

cat >> $MP/hadoop/sbin/stop-dfs.sh<<EOF

HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

EOF

cat >> $MP/hadoop/sbin/start-yarn.sh<<EOF

YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

EOF

cat >> $MP/hadoop/sbin/stop-yarn.sh<<EOF

YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

EOF

# 传输hadoop启动脚本文件
scp -r $MP/hadoop/sbin slave1:$MP/hadoop
scp -r $MP/hadoop/sbin slave2:$MP/hadoop