Hadoop集群入门

174 阅读4分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第5天,点击查看活动详情

本文是 Hadoop 集群入门笔记,涉及虚拟机集群的搭建、配置等基础操作

搭建虚拟机集群

1.模板机创建(硬件配置、操作系统安装)

硬件:利用 VMware 创建虚拟机,给定 CPU 核数、内存和硬盘大小,给硬盘分区(/boot,/swap 和 /)

软件:设置操作系统 iso 文件

2. VMware IP、模板机 IP / 主机名、host 映射

在虚拟网络编辑器中,设置 VMnet8 的子网 IP,并在 NAT 设置中修改网关 IP 至同一网段。

虚拟机 IP 、主机名和 host 映射见 Linux 网络配置的笔记。

3. 其他准备工作

  • 如果虚拟机采用的是最小安装,需要自己安装 net-tool 和 vim

  • 如果是桌面安装,并且要重装 JDK,可以采用下面的命令卸载 JDK

    rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps

  • 安装 epel-release ​ yum install -y epel-release

  • 关闭防火墙

    systemctl stop firewalld

    systemctl disable firewalld.service

  • 创建一个普通用户并赋予 sudo 权限(默认有),配置免密 sudo

    # /etc/sudoers
    # 在 %wheel ALL=(ALL) ALL 行下面添加:(xiaohao 是用户名)
    xiaohao ALL=(ALL) NOPASSWD:ALL
    

4. 利用模板机克隆 3 台虚拟机

1. 分别修改各虚拟机的 IP 地址和主机名

2. 安装 JDK

  • 下载所需版本的 JDK,并传输到虚拟机

  • 解压:tar -zxvf jdk-8u333-linux-x64.tar.gz -C /opt/module/

  • 配置环境变量:

    /etc/profile.d 中,新建 my_env.sh 文件,文件内容如下

    #JAVA_HOME
    export JAVA_HOME=/opt/module/jdk1.8.0_333
    export PATH=$PATH:$JAVA_HOME/bin
    

    执行 source /etc/profile 使改动立即生效,此时命令行可使用 java 命令

3. 安装 Hadoop

  • 下载所需版本的 Hadoop,并传输到虚拟机

  • 解压:tar -zxvf hadoop-3.3.3.tar.gz -C /opt/module/

  • 配置环境变量:

    修改上面创建的 my_env.sh 文件,添加内容如下:

    #HADOOP_HOME
    export HADOOP_HOME=/opt/module/hadoop-3.3.3
    export PATH=$PATH:$HADOOP_HOME/bin
    export PATH=$PATH:$HADOOP_HOME/sbin
    

    执行 source /etc/profile 使改动立即生效,此时命令行可使用 hadoop 命令

4. 向其他虚拟机分发文件的脚本(下面的代码是由 102 向 103 104 分发所需文件)

#!/bin/bashif [ $# -lt 1 ]
then
        echo 请输入要传输文件的所在路径!
        exit
fifor host in hadoop103 hadoop104
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 路径不存在
                fi
        done
done

集群入门

1. SSH 免密登录配置

  1. 在 hadoop102 上执行ssh-keygen -t rsa 生成公钥和私钥。
  2. 使用 ssh-copy-id hadoopxxx 命令配置免密登录其他机器。

2. 集群配置

配置目标:

hadoop102hadoop103hadoop104
HDFSNameNode / DataNodeDataNodeSecondaryNameNode / DataNode
YARNNodeManagerResourceManager / NodeManagerNodeManager
  • vim /opt/module/hadoop-3.3.3/etc/hadoop/core-site.xml
<configuration>
        <!-- 指定NameNode的地址  -->
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://hadoop102:8020</value>
        </property>
        <!-- 指定hadoop数据的存储目录 -->
        <property>
                <name>hadoop.tmp.dir</name>
                <value>/opt/module/hadoop-3.3.3/data</value>
        </property>
        <!-- 配置HDFS网页登录使用的静态用户为xiaohao(可以在网页上删除文件等) -->
        <property>
                <name>hadoop.http.staticuser.user</name>
                <value>xiaohao</value>
        </property></configuration>
  • vim /opt/module/hadoop-3.3.3/etc/hadoop/hdfs-site.xml
 <configuration>
        <!-- NameNode Web端访问地址 -->
        <property>
                <name>dfs.namenode.http-address</name>
                <value>hadoop102:9870</value>
        </property>
        <!-- SecondaryNameNode Web端访问地址 -->
        <property>
                <name>dfs.namenode.secondary.http-address</name>
                <value>hadoop104:9868</value>
        </property>
</configuration>
  • vim /opt/module/hadoop-3.3.3/etc/hadoop/yarn-site.xml
 <configuration>
<!-- Site specific YARN configuration properties -->
        <!-- 指定MR走shuffle -->
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
        
        <!-- 指定ResourceManager的地址 -->
        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>hadoop103</value>
        </property>
</configuration>
  • vim /opt/module/hadoop-3.3.3/etc/hadoop/mapred-site.xml
 <configuration>
        <!-- 指定MapReduce程序运行在Yarn上 -->
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
</configuration>
  • vim /opt/module/hadoop-3.3.3/etc/hadoop/workers
hadoop102
hadoop103
hadoop104
  • 同步配置文件 xsync.sh /opt/module/hadoop-3.3.3/etc/hadoop

3. 启动集群

  • 第一次启动集群需要初始化 hdfs namenode -format
  • 启动 HDFS 命令:start-dfs.sh ps:注意 hadoop102 需要对自己也设置免密登录。 启动完成后,可以使用 jps 命令查看所有 Java 进程。 通过 http://192.168.100.102:9870/ 访问 NameNode Web 端。
  • 启动 Yarn (在 ResourceManager 地址所在机器上启动,这里是 hadoop103) 命令:start-yarn.sh 启动完成后,可以通过 http://192.168.100.103:8088/ 查看 Yarn 的资源管理情况。
  • 集群文件相关命令 hadoop fs -mkdir xxx 创建文件夹 hadoop fs -put 源路径 目标路径 上传文件

4.历史服务器配置

vim /opt/module/hadoop-3.3.3/etc/hadoop/mapred-site.xml

<!-- 历史服务器内部地址 -->
<property>
        <name>mapreduce.jobhistory.address</name>
        <value>hadoop102:10020</value>
</property>

<!-- 历史服务器外部地址 -->
<property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>hadoop102:19888</value>
</property>

开启历史服务器:mapred --daemon start historyserver 配置好并开启历史服务器后可以看到 Yarn 调度的任务的执行历史详情。点击下图所示的 History 按钮,进入历史详情页面。 在这里插入图片描述 在这里插入图片描述

5.日志聚集

  1. vim /opt/module/hadoop-3.3.3/etc/hadoop/yarn-site.xml
<!-- 开启日志聚集功能 -->
<property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
</property>

<!-- 设置日志聚集服务器地址 -->
<property>
        <name>yarn.log.server.url</name>
        <value>http://hadoop102:19888/jobhistory/logs</value>
</property>

<!-- 设置日志保留时间为7天 -->
<property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>604800</value>
</property>
  1. 同步: xsync.sh /opt/module/hadoop-3.3.3/etc/hadoop/yarn-site.xml
  2. 重启 Yarn 和 HistoryServer
mapred --daemon stop historyserver
stop-yarn.sh
start-yarn.sh
mapred --daemon start historyserver

至此,可以在历史详情页面点击 Logs 查看日志详情。 在这里插入图片描述 在这里插入图片描述

6. 集群的启动 / 停止方式

  • 整体命令(前提是配置好免密登录) start-dfs.sh / stop-dfs.sh start-yarn.sh / stop-yarn.sh
  • 单组件命令 hdfs --daemon start / stop namenode/datanode/secondarynamenode yarn --daemon start / stop resourcemanager / nodemanager

7. 集群启动 / 状态查看 两个常用脚本

  • myhadoop.sh,用于快速启动和关闭集群
#!/bin/bash

if [ $# -lt 1 ]
then
	echo "请输入参数!"
	exit
fi

case $1 in
"start")
	echo "==================启动 hadoop 集群================="
	echo "------------------启动 hdfs -----------------------"
	ssh hadoop102 "/opt/module/hadoop-3.3.3/sbin/start-dfs.sh"
	echo "------------------启动 yarn -----------------------"
	ssh hadoop103 "/opt/module/hadoop-3.3.3/sbin/start-yarn.sh"
	echo "------------------启动 historyserver --------------"
	ssh hadoop102 "/opt/module/hadoop-3.3.3/bin/mapred --daemon start historyserver"
;;
"stop")
	echo "==================关闭 hadoop 集群================="
	echo "------------------关闭 hdfs -----------------------"
	ssh hadoop102 "/opt/module/hadoop-3.3.3/sbin/stop-dfs.sh"
	echo "------------------关闭 yarn -----------------------"
	ssh hadoop103 "/opt/module/hadoop-3.3.3/sbin/stop-yarn.sh"
	echo "------------------关闭 historyserver --------------"
	ssh hadoop102 "/opt/module/hadoop-3.3.3/bin/mapred --daemon stop historyserver"
;;
*)
	echo "输入参数有误!"
;;
esac
  • jpsall.sh,用于快速查看集群 jps 状态
 #!/bin/bash

for host in hadoop102 hadoop103 hadoop104
do
	echo ============$host============
	ssh $host jps
done

8. 集群时间同步

可以指定集群内的某台机器为标准时间,其他机器定时进行时间同步。 若集群可连接外网,则会自动与外网同步时间。