1.下载
Hadoop下载地址:点击此处
下载完成后把hadoop-3.1.导入到opt目录下面的software文件夹(自定义目录)下面
1.1解压文件
# 进入到安装目录中
cd /opt/software/
# 解压该文件
tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
# 查看是否解压成功
ls /opt/module/
# 获取安装路径
pwd
/opt/module/hadoop-3.1.3
1.2 添加hadoop环境变量
# 创建环境变量文件
sudo vim /etc/profile.d/my_env.sh
# 在my_env.sh文件末尾添加如下内容:(shift+g)
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
# 保存后推出
:wq
# 让修改后的文件生效
source /etc/profile
# 测试是否安装成功
hadoop version
Hadoop 3.1.3
# 如果hadoop命令不能用可以重启试试
sudo reboot
1.3 hadoop各个目录介绍
(1)bin目录:存放对Hadoop相关服务(HDFS,YARN)进行操作的脚本
(2)etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件
(3)lib目录:存放Hadoop的本地库(对数据进行压缩解压缩功能)
(4)sbin目录:存放启动或停止Hadoop相关服务的脚本
(5)share目录:存放Hadoop的依赖jar包、文档、和官方案例
2 Hadoop集群安装
Hadoop运行模式包括:本地模式、伪分布式模式以及完全分布式模式。
Hadoop官方网站:添加链接描述
本章主要介绍完全分布式模式安装,也就是集群安装。
2.1 环境准备
准备3台客户机(关闭防火墙、静态ip、主机名称)
安装JDK并配置环境便变量
安装Hadoop并配置环境变量
2.2 编写分发脚本
#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
for host in host1 host2 host3
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
# 添加可执行权限
chmod +x xsync
# 将脚本复制到/bin中,以便全局调用
sudo cp xsync /bin/
2.3 SSH无密登录配置
# 生成公钥和私钥
ssh-keygen -t rsa
然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
# 使用ssh-copy-id命令可以把本地的ssh公钥文件安装到远程主机对应的账户中
ssh-copy-id host1
ssh-copy-id host2
ssh-copy-id host3
# 需要给自己分一次 然后在其他机器上执行一遍同样的步骤
2.4 集群配置
2.4.1集群部署规划
**注意**:NameNode和SecondaryNameNode不要安装在同一台服务器
**注意**:ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台机器上。
host1 | host2 | host3 | |
---|---|---|---|
HDFS | NameNode DataNode | DataNode | SecondaryNameNode DataNode |
YARN | NodeManager | ResourceManager NodeManager | NodeManager |
2.4.2 集群配置
配置
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href=""?>
<configuration>
<!-- 指定NameNode的地址 -->
<property>
<name></name>
<value>hdfs://host1:9820</value>
</property>
<!-- 指定hadoop数据的存储目录 -->
<property>
<name></name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 配置HDFS网页登录使用的静态用户为hadoop-->
<property>
<name></name>
<value>hadoop</value>
</property>
<!-- 配置该hadoop(superUser)允许通过代理访问的主机节点 -->
<property>
<name></name>
<value>*</value>
</property>
<!-- 配置该hadoop(superUser)允许通过代理用户所属组 -->
<property>
<name></name>
<value>*</value>
</property>
<!-- 配置该hadoop(superUser)允许通过代理的用户-->
<property>
<name></name>
<value>*</value>
</property>
</configuration>
配置
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href=""?>
<configuration>
<!-- nn web端访问地址-->
<property>
<name>-address</name>
<value>host1:9870</value>
</property>
<!-- 2nn web端访问地址-->
<property>
<name>-address</name>
<value>host3:9868</value>
</property>
</configuration>
配置
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href=""?>
<configuration>
<!-- 指定MR走shuffle -->
<property>
<name>-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定ResourceManager的地址-->
<property>
<name></name>
<value>host2</value>
</property>
<!-- 环境变量的继承 -->
<property>
<name>-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>
<!-- yarn容器允许分配的最大最小内存 -->
<property>
<name>-allocation-mb</name>
<value>512</value>
</property>
<property>
<name>-allocation-mb</name>
<value>4096</value>
</property>
<!-- yarn容器允许管理的物理内存大小 -->
<property>
<name>-mb</name>
<value>4096</value>
</property>
<!-- 关闭yarn对物理内存和虚拟内存的限制检查 -->
<property>
<name>-check-enabled</name>
<value>false</value>
</property>
<property>
<name>-check-enabled</name>
<value>false</value>
</property>
</configuration>
配置
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href=""?>
<configuration>
<!-- 指定MapReduce程序运行在Yarn上 -->
<property>
<name></name>
<value>yarn</value>
</property>
</configuration>
配置
# 在底部增加以下内容:
export HDFS_NAMENODE_USER=hadoop
export HDFS_DATANODE_USER=hadoop
export HDFS_SECONDARYNAMENODE_USER=hadoop
export YARN_RESOURCEMANAGER_USER=hadoop
export YARN_NODEMANAGER_USER=hadoop
# 修改以下配置
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export JAVA_HOME=/opt/module/jdk-1.8.0
2.4.3分发配置文件
xsync /opt/module/hadoop-3.1.3/etc/hadoop/
2.4.4 配置workers
vim /opt/module/hadoop-3.1.3/etc/hadoop/workers
# 插入一下内容
host1
host2
host3
# 分发配置文件
xsync /opt/module/hadoop-3.1.3/etc
2.5 启动集群
如果集群是第一次启动,需要在host1节点格式化NameNode(注意格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止namenode和datanode进程,并且要删除所有机器的data和logs目录,然后再进行格式化。)
hdfs namenode -format
# 启动HDFS
sbin/start-dfs.sh
# 在配置了ResourceManager的节点(host2)启动YARN
sbin/start-yarn.sh
2.5.1 查看web端
HDFS:http://host2:9870
YARN:http://host3:8088
需要在本机中配置hosts,或者输入ip地址。
2.6 关闭集群
2.6.1 各个服务组件逐一启动/停止
# 分别启动/停止HDFS组件
hdfs --daemon start/stop namenode/datanode/secondarynamenode
# 启动/停止YARN
yarn --daemon start/stop resourcemanager/nodemanager
2.6.2 各个模块分开启动/停止(配置ssh是前提)常用
# 整体启动/停止HDFS
start-dfs.sh/stop-dfs.sh
# 整体启动/停止YARN
start-yarn.sh/stop-yarn.sh
2.6.3 集群启停脚本
# hadoop集群启停脚本(包含hdfs,yarn,historyserver):
#!/bin/bash
if [ $# -lt 1 ]
then
echo "No Args Input..."
exit ;
fi
case $1 in
"start")
echo " =================== 启动 hadoop集群 ==================="
echo " --------------- 启动 hdfs ---------------"
ssh host1 "/opt/module/hadoop-3.1.3/sbin/"
echo " --------------- 启动 yarn ---------------"
ssh host2 "/opt/module/hadoop-3.1.3/sbin/"
echo " --------------- 启动 historyserver ---------------"
ssh host3 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver"
;;
"stop")
echo " =================== 关闭 hadoop集群 ==================="
echo " --------------- 关闭 historyserver ---------------"
ssh host1 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver"
echo " --------------- 关闭 yarn ---------------"
ssh host2 "/opt/module/hadoop-3.1.3/sbin/"
echo " --------------- 关闭 hdfs ---------------"
ssh host3 "/opt/module/hadoop-3.1.3/sbin/"
;;
*)
echo "Input Args Error..."
;;
esac