hadoop3.1.3安装

时间:2025-02-18 13:29:29

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