hadoop安装竞赛文档
- Notes
- October 11, 2023
目录
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查看。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地址,输出一般为这样:
[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
命令可以连接其他节点服务器,连接命令为:
ssh [email protected] #root是连接用户名,192.168.152.81是要连接的服务器ip地址。
[email protected]'s password: #显示这个后输入密码
[root@master ~]# 显示这个代表成功连接
小贴士
- 在敲命令的过程中可以使用
TAB
键补全命令哦~ - 可以使用方向键的 ↑ ↓ 键切换到上次执行的命令
- 使用
ssh [email protected] "command"
指令即可远程执行command
指令,前提是配置了密钥连接哦。
Hadoop安装流程
一,配置服务器基本环境
需要在本板块将服务器所需模块以及其他配置文件弄好,以便后续的配置
- 在ubuntu中连接hadoop01,将hadoop01作为master节点进行配置:
ssh [email protected]
#打开终端,输入上述命令进行连接,root是连接用户名,192.168.152.81是要连接的服务器ip地址。
[email protected]'s password: #显示这个后输入密码
[root@server-1 ~]# 显示这个代表成功连接
如果无法连接说明IP地址更改了,请自行查看!
- 设置master主机名称和host文件,便于连接
# 设置主机名
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
命令在文件末尾插入如下代码
192.168.152.81 master
192.168.152.101 slave1
192.168.152.121 slave2
- 生成密钥配置一键免密登录
# 生成密钥,回车三次即可
ssh-keygen -t rsa
# 将密钥复制给其他的节点便于一键连接,先输入 yes ,再输入节点密码 123456
ssh-copy-id master
ssh-copy-id slave1
ssh-copy-id slave2
- 解压配置jdk以及hadoop
# 新建目录 /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
- 设置jdk以及hadoop的环境变量
使用 vi /root/.bash_profile
在文件末尾添加如下内容:
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
- 配置其他文件节点,执行以下命令:
# 传输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。
# 连接服务器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,打开新的终端页面执行以下指令。
# 连接服务器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
- 查看安装情况
在
# 刷新文件使变量生效
source /root/.bash_profile
# 查看Java安装情况和版本
java -version
# 查看hadoop安装情况和版本
hadoop version
如果都正常输出证明安装成功,如果提示未找到命令则需要排查问题。
二,更改hadoop配置文件
一共有6个配置文件需要更改,hadoop-3.3.0版本需要在4个启动/关闭脚本中添加环境参数,更改文件命令为
vi ./文件名
- 更改
hadoop-env.sh
文件
切换目录到hadoop配置文件目录下
cd /opt/module/hadoop/etc/hadoop
使用如下命令更改:
vi ./hadoop-env.sh
查找文件中 JAVA_HOME
关键词并替换为下方路径
- 提示:可以使用
?JAVA_HOME
搜索关键词,N
键是查找下一个,在文件内标注export JAVA_HOME=
的地方进行修改,如果有注释需要删除注释进行修改,修改成下方内容
export JAVA_HOME=/opt/module/jdk
- 更改
core-site.xml
文件
配置文件如下:
<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>
- 更改
hdfs-site.xml
文件
配置文件如下:
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>slave1:50090</value>
</property>
</configuration>
- 更改
mapred-site.xml
文件
配置文件如下:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
注:hadoop-2.7.7中需要先复制配置文件模板再进行配置
cp ./mapred-site.xml.template ./mapred-site.xml
- 更改
yarn-site.xml
文件
配置文件如下:
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
- 更改
workers
文件
在hadoop-2.7.7中该文件名称为 slaves
,hadoop-3.3.0中该文件为workers
记得根据实际情况更改文件名!
配置文件如下:
master
slave1
slave2
- 更改
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的下面)
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
- 更改
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的下面)
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
- 将master节点下的模组文件传输给其他的节点
scp -r /opt/module slave1:/opt
scp -r /opt/module slave2:/opt
三,启动hadoop
# 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,然后再排查问题
stop-dfs.sh
stop-yarn.sh
问题更改之后记得使用下方命令同步文件!
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
- name
property
hadoop缓存目录路径值- name
hadoop.tmp.dir
- value
/opt/module/hadoop/tmp
- name
hdfs-site.xml
文件中需要重点记忆的内容:property
hadoop分布式节点数量名称- name
dfs.replication
- value
3
- name
property
hadoop namenode第二节点http地址- name
dfs.namenode.secondary.http-address
- value
slave1:50090
- name
mapred-site.xml
文件中需要重点记忆的内容:property
mapreduce framework 名称- name
mapreduce.framework.name
- value
yarn
- name
yarn-site.xml
文件中需要重点记忆的内容:property
yarn资源管理主机名称- name
yarn.resourcemanager.hostname
- value
master
- name
property
yarn节点管理 aux-services- name
yarn.nodemanager.aux-services
- value
mapreduce_shuffle
- name
workers
文件中需要重点记忆的内容:- 所有节点的主机名称
*-dfs.sh
文件中需要重点记忆的内容:HDFS_DATANODE_USER=root
# HDFS_数据节点_用户=rootHADOOP_SECURE_DN_USER=hdfs
# HADOOP_安全_DN_用户=hdfsHDFS_NAMENODE_USER=root
# HDFS_名称节点_用户=rootHDFS_SECONDARYNAMENODE_USER=root
# HDFS_第二名称节点_用户=root
*-yarn.sh
文件中需要重点记忆的内容:YARN_RESOURCEMANAGER_USER=root
# YARN_资源管理_用户=rootHADOOP_SECURE_DN_USER=yarn
# HADOOP_安全_DN_用户=yarnYARN_NODEMANAGER_USER=root
# YARN_节点管理_用户=root
一键安装脚本
针对南洋学院内网2022参赛环境编写的一键安装脚本,在master节点执行本脚本可以一键安装hadoop。仅供参考
请不要在学习hadoop搭建的时候使用脚本偷懒!脚本参考是为了辅助理解计算机配置hadoop的流程!学习hadoop搭建的过程无需查看,或仅供参考。
#! /bin/bash
### FIRST 第一板块
# echo "set PATH" 设置脚本执行环境变量,文件位置,模组路径等
JF=/opt/jdk-8u162-linux-x64.tar.gz
HF=/opt/hadoop-3.3.0.tar.gz
MP=/opt/module
# echo "set host 设置主机名以及配置host文件"
hostnamectl set-hostname master
cat>>"/etc/hosts"<<EOF
192.168.152.81 master
192.168.152.101 slave1
192.168.152.121 slave2
EOF
# echo "set ssh key 配置ssh key进行自动连接"
ssh-keygen -t rsa # -n '' -f ~/.ssh/id_rsa
ssh-copy-id master
ssh-copy-id slave1
ssh-copy-id slave2
# echo "set java && hadoop" 解压配置jdk以及hadoop
mkdir $MP
mkdir $MP/jdk
tar -xvzf /opt/jdk-8u162-linux-x64.tar.gz -C $MP/jdk --strip-components 1
mkdir $MP/hadoop
tar -xvzf /opt/hadoop-3.3.0.tar.gz -C $MP/hadoop --strip-components 1
# echo "set PATH 设置jdk以及hadoop的环境变量"
cat>>"/root/.bash_profile"<<EOF
export JAVA_HOME=$MP/jdk
export PATH=\$JAVA_HOME/bin:\$PATH
export HADOOP_HOME=$MP/hadoop
export PATH=\$PATH:\$HADOOP_HOME/bin:\$HADOOP_HOME/sbin
EOF
# echo "check install 查看安装情况"
source /root/.bash_profile
java -version
hadoop version
# echo "set slave 设置其他slave节点的主机配置文件"
scp -r /root/.bash_profile slave1:/root/
scp -r /root/.bash_profile slave2:/root/
scp -r /etc/hosts slave1:/etc/
scp -r /etc/hosts slave2:/etc/
# echo "set ssh slave ssh连接设置其他节点"
ssh root@slave1 <<EOF
hostnamectl set-hostname slave1
mkdir $MP
ssh-keygen -t rsa -n '' -f ~/.ssh/id_rsa
ssh-copy-id master
ssh-copy-id slave1
ssh-copy-id slave2
EOF
ssh root@slave2 <<EOF
hostnamectl set-hostname slave2
mkdir $MP
ssh-keygen -t rsa -n '' -f ~/.ssh/id_rsa
ssh-copy-id master
ssh-copy-id slave1
ssh-copy-id slave2
EOF
### SECOND 第二板块
# hadoop settings file 设置hadoop配置文件
# 替换 hadoop-env.sh 中的JAVA_HOME PATH文件
sed -i '/export JAVA_HOME=/cexport JAVA_HOME='$MP'/jdk' $MP/hadoop/etc/hadoop/hadoop-env.sh
# 配置 core-site.xml 文件
cat > $MP/hadoop/etc/hadoop/core-site.xml <<EOF
<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>
EOF
# 配置 hdfs-site.xml 文件
cat > $MP/hadoop/etc/hadoop/hdfs-site.xml <<EOF
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>slave1:50090</value>
</property>
</configuration>
EOF
# 配置 mapred-site.xml 文件
cp $MP/hadoop/etc/hadoop/mapred-site.xml.template $MP/hadoop/etc/hadoop/mapred-site.xml
cat > $MP/hadoop/etc/hadoop/mapred-site.xml<<EOF
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
EOF
# 配置 yarn-site.xml 文件
cat > $MP/hadoop/etc/hadoop/yarn-site.xml<<EOF
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
EOF
# 配置 slaves 文件 hadoop-2.7.7
cat > $MP/hadoop/etc/hadoop/slaves<<EOF
master
slave1
slave2
EOF
# 配置workers wenjian hadoop-3.3.0
cat > $MP/hadoop/etc/hadoop/workers<<EOF
master
slave1
slave2
EOF
# hadoop-3.3.0 need to add PATH for start&stop shell hadoop-3.3.0需要添加PATH变量到启动/关闭脚本中
sed -i "2i HDFS_DATANODE_USER=root" $MP/hadoop/sbin/start-dfs.sh
sed -i "2i HADOOP_SECURE_DN_USER=hdfs" $MP/hadoop/sbin/start-dfs.sh
sed -i "2i HDFS_NAMENODE_USER=root" $MP/hadoop/sbin/start-dfs.sh
sed -i "2i HDFS_SECONDARYNAMENODE_USER=root" $MP/hadoop/sbin/start-dfs.sh
sed -i "2i HDFS_DATANODE_USER=root" $MP/hadoop/sbin/stop-dfs.sh
sed -i "2i HADOOP_SECURE_DN_USER=hdfs" $MP/hadoop/sbin/stop-dfs.sh
sed -i "2i HDFS_NAMENODE_USER=root" $MP/hadoop/sbin/stop-dfs.sh
sed -i "2i HDFS_SECONDARYNAMENODE_USER=root" $MP/hadoop/sbin/stop-dfs.sh
sed -i "2i YARN_RESOURCEMANAGER_USER=root" $MP/hadoop/sbin/start-yarn.sh
sed -i "2i HADOOP_SECURE_DN_USER=yarn" $MP/hadoop/sbin/start-yarn.sh
sed -i "2i YARN_NODEMANAGER_USER=root" $MP/hadoop/sbin/start-yarn.sh
sed -i "2i YARN_RESOURCEMANAGER_USER=root" $MP/hadoop/sbin/stop-yarn.sh
sed -i "2i HADOOP_SECURE_DN_USER=yarn" $MP/hadoop/sbin/stop-yarn.sh
sed -i "2i YARN_NODEMANAGER_USER=root" $MP/hadoop/sbin/stop-yarn.sh
### THIRD 第三板块
# trasnfer module 将配置好的模组路径下的所有文件传输到其他节点
scp -r $MP slave1:/opt
scp -r $MP slave2:/opt
# check hadoop start 启动hadoop
hdfs namenode -format
$MP/hadoop/sbin/stop-dfs.sh
$MP/hadoop/sbin/stop-yarn.sh
$MP/hadoop/sbin/start-dfs.sh
$MP/hadoop/sbin/start-yarn.sh
# 检查启动情况
hostnamectl
jps
ssh root@slave1 "source /root/.bash_profile && hostnamectl && jps"
ssh root@slave2 "source /root/.bash_profile && hostnamectl && jps"
其他操作
# 覆盖文件
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