0 准备工作
首先需要准备三台虚拟机,这里准备的是hadoop1,hadoop1,hadoop3,虚拟机机要求如下:
- 配置了静态IP。
- 关闭了防火墙的。
虚拟机下载安装:https://www.cnblogs.com/lgjb/p/17292698.html
1 配置ssh免密登录
配置ssh免密登录是为了将配置好的应用或文件直接分发到其他节点,不然 一台一台的配置太慢了。
2.1 在每台主机上生成公钥和私钥
在所有节点上运行如下命令,运行完成后会在用户家目录下的.ssh目录下生成id_rsa(私钥文件)和id_rsa.pub(公钥文件)
ssh-keygen
ssh-copy-id 节点1ip
ssh-copy-id 节点2ip
ssh-copy-id 节点3ip
-
分发完成后,被分发的节点会在用户家目录下的.ssh目录下生成authorized_keys文件,此文件负责保存得到的公钥,再有其他节点分发给它公钥,公钥会被追加到此文件中。
-
此外hadoop1下还会生产known_hosts文件,该文件在在用户家目录下的.ssh目录下,A通过ssh首次连接到B,B会将公钥1(host key)传递给A,A将公钥1存入known_hosts文件中,以后A再连接B时,B依然会传递给A一个公钥2,OpenSSH会核对公钥,通过对比公钥1与公钥2 是否相同来进行简单的验证,如果公钥不同,OpenSSH会发出警告, 避免你受到DNS Hijack之类的攻击。
2.2 scp(secure copy,安全拷贝)
介绍:scp命令是依赖于ssh协议的远程拷贝技术,便于将文件从一个节点拷贝到另一个节点
scp [选项] [用户@主机:]文件/目录 [用户@主机:]文件/目录
选项:
-r #递归拷贝,用于拷贝目录
2.3 rsync(remote sync,远程同步)
rsync和scp区别:rsync只对差异文件做同步,scp是把所有文件都复制过去。
rsync [选项] [用户@主机:]文件/目录 [用户@主机:]文件/目录
选项:
-a #可以递归同步(可以同步元信息,比如修改时间、权限等)
-v #显示复制过程
2.4. xsync集群分发脚本
为了方便将修改的文件分发给其他节点,建一个脚本文件。
vim /bin/xsync.sh
#!/bin/bash
# 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
# 遍历要分发的节点
for host in hadoop2 hadoop3
do
echo ==================== $host ====================
# 遍历所有输入的文件/目录
for file in $@
do
# 判断文件是否存在
if [ -e $file ]
then
# 获取父目录
pdir=$(cd -P $(dirname $file); pwd)
# 获取当前文件的名称
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done
# 要给脚本执行权限
chmod +x xsync.sh
2 配置IP-主机名映射
vim /etc/hosts #编辑hosts文件
3 下载安装JAVA
3.1 检查当前系统中是否已安装JDK
# 查看Java版本
java -version
# 检测系统JDK默认安装包
rpm -aq | grep java
3.2、卸载OpenJDK,若未检测出jdk则跳过
yum remove *openjdk*
3.3 安装JDK
- 选择到jdk官网上下载你想要的jdk版本。
- 用xftp将jdk安装包上传到opt目录下
- 解压JDK文件。
tar -zxvf jdk-8u341-linux-x64.tar.gz
# 重命名解压后的目录
mv jdk1.8.0_341 jdk
3.4 配置环境变量
vim /etc/profile
# JAVA环境变量
export JAVA_HOME=/opt/jdk
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
# 重新载入配置文件
source /etc/profile
3.5 检查新安装的JDK
java -version
3.6 将Java和配置文件分发给其他节点
scp -r /opt/jdk root@hadoop2:/opt/
scp -r /opt/jdk root@hadoop3:/opt/
xsync.sh /etc/profile
# 在被分发的机器上也要重新加载配置文件
source /etc/profile
4 下载安装Hadoop
4.1 选择需要的版本下载
建议:最好下载hadoop-3.2.1.tar.gz这种命名格式的包
Hadoop下载链接:https://archive.apache.org/dist/hadoop/common/
4.2 将下载的tar.gz包并自行用xftp上传至linux系统
4.3 在linux系统下解压tar.gz包
tar -zxvf hadoop-3.2.3.tar.gz -C /opt/
# 如果感到包名太长,可以修改
mv /opt/hadoop-3.2.3 /opt/hadoop
4.4 配置Hadoop环境变量并分发给其他节
vim /etc/profile
# Hadoop环境变量
export HADOOP_HOME=/opt/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
# 使配置文件生效
source /etc/profile
将配置文件分发给其他节点
xsync.sh /etc/profile
# 在被分发的机器上也要重新加载配置文件
source /etc/profile
4.5 配置Hadoop环境脚本文件中的JAVA_HOME参数
# 进入Hadoop安装目录下的etc/hadoop目录
cd /opt/hadoop/etc/hadoop
# 分别在hadoop-env.sh文件中修改如下参数:
export JAVA_HOME=/opt/jdk #路径为jdk安装路径
# 验证Hadoop配置是否生效
hadoop version
5 修改Hadoop配置文件
配置文件在/opt/hadoop/etc/hadoop目录下。
5.1 core-site.xml (配置Common组件属性)
<configuration>
<!-- 配置Hadoop的默认文件系统为hdfs 9820为hdfs内部通信端口-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop1:9820</value>
</property>
<!-- 配置保存临时文件目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/tmp/hadoop</value>
</property>
</configuration>
更多配置信息,请参考core-site.xml。
5.2 hdfs-site.xml (配置HDFS组件属性)
<configuration>
<!-- 配置NameNode所在主机和其web端口 -->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop1:9870</value>
</property>
<!-- 配置Secondary NameNode所在主机和其web端口 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop2:9868</value>
</property>
</configuration>
更多参数配置,请参考hdfs-site.xml。
5.3 mapred-site.xml (配置Map-Reduce组件属性)
<configuration>
<!-- 设置MapReduce的运行平台为yarn -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
更多配置信息,请参考mapred-site.xml。
5.4 yarn-site.xml(配置资源调度属性)
<!-- 配置yarn-site.xml -->
<configuration>
<!-- 配置yarn的ResourceManager所在节点 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop3</value>
</property>
<!-- 配置NodeManager启动时加载Shuffle服务 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 这里的value值要配置你自己机器使用hadoop classpath命令得到的值 -->
<property>
<name>yarn.application.classpath</name>
<value>/opt/hadoop/etc/hadoop:/opt/hadoop/share/hadoop/common/lib/*:/opt/hadoop/share/hadoop/common/*:/opt/hadoop/share/hadoop/hdfs:/opt/hadoop/share/hadoop/hdfs/lib/*:/opt/hadoop/share/hadoop/hdfs/*:/opt/hadoop/share/hadoop/mapreduce/lib/*:/opt/hadoop/share/hadoop/mapreduce/*:/opt/hadoop/share/hadoop/yarn:/opt/hadoop/share/hadoop/yarn/lib/*:/opt/hadoop/share/hadoop/yarn/*</value>
</property>
</configuration>
更多配置信息,请参考yarn-site.xml。
5.5 修改workers文件
vim /opt/hadoop/etc/hadoop/workers
# 删除原有的localhost增加从节点地址(若配置了hosts,可直接使用主机名,亦可用IP地址)
hadoop1
hadoop2
hadoop3
6 将Hadoop分发到其他集群
6.1 将配置文件/etc/profile分发到其他节点,并重新加载加载
scp -r /etc/profile root@hadoop2:/etc/profile
[root@hadoop2 service]# source /etc/profile
scp -r /etc/profile root@hadoop3:/etc/profile
[root@hadoop3 service]# source /etc/profile
6.2 将Hadoop文件夹分发的其他节点
scp -r /opt/hadoop root@hadoop2:/opt/
scp -r /opt/hadoop root@hadoop3:/opt/
7 启动集群
7.1 初次启动集群前需对NameNode进行格式化处理
hdfs namenode -format
7.2 还需要配置启动脚本,添加HDFS和Yarn权限,脚本在Hadoop安装目录的sbin目录下
vim start-dfs.sh
vim stop-dfs.sh
#添加HDFS权限,在第二行空白位置添加HDFS权限
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
vim start-yarn.sh
vim stop-yarn.sh
#添加Yarn权限,在第二行空白位置添加Yarn权限
YARN_RESOURCEMANAGER_USER=root
HDFS_DATANODE_SECURE_USER=yarn
YARN_NODEMANAGER_USER=root
7.3 将启停脚本分发到其他节点
xsync.sh start-dfs.sh
xsync.sh stop-dfs.sh
xsync.sh start-yarn.sh
xsync.sh stop-yarn.sh
7.4 启动/关闭HDFS和YARN
注意:可以用命令启动,但是NomeNode只有在其所在节点启动才会开启;ResourceManage也只有在其所在节点启动才会开启。
# 在hadoop1上运行
start-dfs.sh
# 在hadoop3上运行
start-yarn.sh
stop-dfs.sh
stop-yarn.sh
为了方便启动,编写启停脚本:
# 将脚本放置于bin目录下用户可以全局使用
vim /bin/start-hadoop.sh
#!/bin/bash
echo ==================== 启动hadoop集群 ====================
echo -------------------- 启动hdfs --------------------
ssh hadoop1 /opt/hadoop/sbin/start-dfs.sh
echo -------------------- 启动yarn --------------------
ssh hadoop3 /opt/hadoop/sbin/start-yarn.sh
# 将脚本放置于bin目录下用户可以全局使用
vim /bin/stop-hadoop.sh
#!/bin/bash
echo ==================== 关闭hadoop集群 ====================
echo -------------------- 关闭hdfs --------------------
ssh hadoop1 /opt/hadoop/sbin/stop-dfs.sh
echo -------------------- 关闭yarn --------------------
ssh hadoop3 /opt/hadoop/sbin/stop-yarn.sh
# 还要给脚本执行权限
chmod +x /bin/start-hadoop.sh
chmod +x /bin/stop-hadoop.sh
7.5 查看集群启动情况
可以在每个节点上使用jps命令查看
[root@hadoop1 ~]# jps
[root@hadoop2 ~]# jps
[root@hadoop3~]# jps
也可以编写脚本一次性查看
vim /bin/jps-hadoop.sh
#!/bin/bash
for host in hadoop1 hadoop2 hadoop3
do
echo ==================== $host ====================
ssh $host $JAVA_HOME/bin/jps
done
chmod +x /bin/jps-hadoop.sh
8 Web访问
注意:需要访问的机器上配置了IP-主机名的映射
访问NameNode:
http://hadoop1:9870/
访问Secondary NameNode:
http://hadoop2:9868/
访问YARN:
http://hadoop3:8088/