Hadoop集群搭建

server/2025/1/23 0:39:20/

1. 安装并配置虚拟机

这里基于VmWare来去构建三台虚拟机

我已经有了一台模板虚拟机,所以基于该模板虚拟机进行完整克隆得到三台机器,分别是hadoop1、hadoop2、hadoop3

在这里插入图片描述

  1. 修改主机名称

    # hadoop1的主机名称修改为hadoop1,以此类推
    vim /etc/hostname
    
  2. 修改静态IP

    vim /etc/sysconfig/network-scripts/ifcfg-ens33
    
    TYPE=Ethernet
    PROXY_METHOD=none
    BROWSER_ONLY=no
    # 从DHCP动态分配IP修改为static静态IP
    BOOTPROTO=static
    DEFROUTE=yes
    IPV4_FAILURE_FATAL=no
    IPV6INIT=yes
    IPV6_AUTOCONF=yes
    IPV6_DEFROUTE=yes
    IPV6_FAILURE_FATAL=no
    IPV6_ADDR_GEN_MODE=stable-privacy
    NAME=ens33
    UUID=92e7a2e8-e78a-4f67-a5ed-7763b6e3d56a
    DEVICE=ens33
    # 开启
    ONBOOT=yes
    # 设置要修改的IP地址,三台机器的IP地址要互不相同
    # 我这里配置的是hadoop1:192.168.75.111、hadoop2:192.168.75.112、hadoop3:192.168.75.113
    IPADDR=192.168.75.112
    # 参考VmWare的vm-net8的虚拟网络配置
    NETMASK=255.255.255.0
    # 参考VmWare的vm-net8的虚拟网络配置
    GATEWAY=192.168.75.2
    # 公网的域名解析地址,默认写成这样就行
    DNS1=8.8.8.8
    
    # 修改之后重启网络
    systemctl restart network
    

    验证是否修改成功:

    # 查看IP地址
    ip addr
    

    在这里插入图片描述

  3. 修改hosts文件

    vim /etc/hosts
    

    将三台主机的IP地址添加到文件末尾

    192.168.75.111 hadoop1
    192.168.75.112 hadoop2
    192.168.75.113 hadoop3
    
  4. 创建用户,并授予root权限

    # 新增用户
    useradd hadoop
    # 设置密码
    passwd hadoop
    # 授予root权限
    vim /etc/sudoers
    # 在文件末尾添加如下内容
    hadoop  ALL=(ALL)  NOPASSWD:ALL
    

    在这里插入图片描述

注意:后续的步骤都使用hadoop用户进行操作

2. 安装JDK

安装JDK8,具体的步骤这里就不赘述了,我这里已经提前安装好了JDK8

可以参考我的这篇文章,里面有讲述如何安装JDK:https://blog.csdn.net/weixin_66400215/article/details/145066470

在这里插入图片描述

3. Hadoop集群搭建

3.1 设置三台机器SSH免密登录

下面以hadoop1机器为例子,其余两台机器也要执行类似的操作

  1. 生成公钥和私钥

    ssh-keygen -t rsa
    

    在这里插入图片描述

  2. 将公钥拷贝到要免密登录的目标机器上

    ssh-copy-id hadoop1
    ssh-copy-id hadoop2
    ssh-copy-id hadoop3
    

    在这里插入图片描述

3.2 配置文件同步脚本

由于后续的搭建过程中往往涉及到很多文件的拷贝,并且要求三台集群的文件保持一致,这里使用文件同步脚本可以极大提高我们的开发效率。

首先,需要明白一点的是我们的PATH环境变量,默认是包含我们的用户家目录下的bin目录的,如下图所示

在这里插入图片描述

所以,我们可以将文件同步脚本放置到/home/hadoop/bin目录下

# 默认bin目录是不存在的,需要创建一下
mkdir -p /home/hadoop/bin
# 创建xsync脚本
vim /home/hadoop/bin/xsync
# 创建可执行权限
chmod +x /home/hadoop/bin/xsync

脚本的使用方式就是:xync 文件或者目录

脚本的内容如下:

#!/bin/bash#1. 判断参数个数
if [ $# -lt 1 ]
thenecho Not Enough Arguement!exit;
fi#2. 遍历集群所有机器,如果你的机器host不是这样命名的,可以进行修改
for host in hadoop1 hadoop2 hadoop3
doecho ====================  $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:$pdirelseecho $file does not exists!fidone
done

接着,我们可以将xsync脚本从hadoop1节点分发到hadoop2和hadoop3,如图所示:
在这里插入图片描述

如果在执行过程中报错:rsync: command not found,可以执行如下命令,进行安装:

sudo yum install -y rsync 

3.3 安装Hadoop

本次集群的搭建目标:

hadoop1hadoop2hadoop3
HDFSNameNode
DataNode
DataNodeSecondaryNameNode
DataNode
YARNNodeManagerResourceManager
NodeManager
NodeManager

这里安装的Hadoop的3.1.3版本,下载链接:https://archive.apache.org/dist/hadoop/common/hadoop-3.1.3/hadoop-3.1.3.tar.gz

我这里是下载到了/home/hadoop/hadoop-3.1.3.tar.gz目录下

  1. 解压缩

    tar -zxvf hadoop-3.1.3.tar.gz
    
  2. 修改etc/hadoop/hadoop-env.sh,配置环境变量

    # 在文件开头部分新增如下配置
    # JDK安装路径
    export JAVA_HOME=/usr/local/jdk1.8.0_431
    # Hadoop安装路径
    export HADOOP_HOME=/home/hadoop/hadoop-3.1.3
    export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
    export HADOOP_LOG_DIR=$HADOOP_HOME/logs
    
  3. 修改/etc/hadoop/core-site.xml配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?><configuration><!-- 指定NameNode的地址 --><property><name>fs.defaultFS</name><value>hdfs://hadoop1:8020</value></property><!-- 指定hadoop数据的存储目录 --><property><name>hadoop.tmp.dir</name><value>/home/hadoop/hadoop-3.1.3/data</value></property><!-- 配置HDFS网页登录使用的静态用户为hadoop --><property><name>hadoop.http.staticuser.user</name><value>hadoop</value></property>
    </configuration>
    
  4. 修改/etc/hadoop/hdfs-site.xml配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?><configuration><!-- nn web端访问地址--><property><name>dfs.namenode.http-address</name><value>hadoop1:9870</value></property><!-- 2nn web端访问地址--><property><name>dfs.namenode.secondary.http-address</name><value>hadoop3:9868</value></property>
    </configuration>
    
  5. 修改/etc/hadoop/yarn-site.xml配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?><configuration><!-- 指定MR走shuffle --><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><!-- 指定ResourceManager的地址--><property><name>yarn.resourcemanager.hostname</name><value>hadoop2</value></property><!-- 环境变量的继承 --><property><name>yarn.nodemanager.env-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>
    </configuration>
    
  6. 修改/etc/hadoop/mapred-site.xml配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?><configuration><!-- 指定MapReduce程序运行在Yarn上 --><property><name>mapreduce.framework.name</name><value>yarn</value></property>
    </configuration>
    
  7. 配置workers

    vim /home/hadoop/hadoop-3.1.3/etc/hadoop/workers
    # 添加如下内容
    hadoop1
    hadoop2
    hadoop3
    
  8. 将Hadoop从hadoop1分发到hadoop2、hadoop3

    xsync hadoop-3.1.3/
    

3.4 启动集群

  1. 初始化集群:如果集群是第一次启动,需要在hadoop1节点格式化NameNode(注意:格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。如果集群在运行过程中报错,需要重新格式化NameNode的话,一定要先停止namenode和datanode进程,并且要删除所有机器的data和logs目录,然后再进行格式化。)

    # 在hadoop1上执行
    hdfs namenode -format
    
  2. 启动HDFS

    # 在hadoop1上执行
    sbin/start-dfs.sh
    
     						![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/2a71d8ea606c48de9a1163a30c6a5ac1.png)
    
  3. 启动YARN

    # 在hadoop2上执行
    sbin/start-yarn.sh
    

    在这里插入图片描述

  4. Web端查看HDFS的NameNode(注意:防火墙记得关闭)

    浏览器中输入:http://192.168.75.111:9870,查看HDFS上存储的数据信息在这里插入图片描述

  5. Web端查看YARN的ResourceManager(注意:防火墙记得关闭)

    浏览器中输入:http://192.168.75.112:8088,查看YARN上运行的Job信息
    在这里插入图片描述

至此,就完成了集群的搭建

3.5 启动和停止集群脚本

为了方便停止和启动集群,这里编写了/home/hadoop/my_hadoop.sh脚本,便于一键启动/停止hadoop集群:

#!/bin/bashif [ $# -lt 1 ]
thenecho "No Args Input..."exit ;
ficase $1 in
"start")echo " =================== 启动 hadoop集群 ==================="echo " --------------- 启动 hdfs ---------------"ssh hadoop1 "/home/hadoop/hadoop-3.1.3/sbin/start-dfs.sh"echo " --------------- 启动 yarn ---------------"ssh hadoop2 "/home/hadoop/hadoop-3.1.3/sbin/start-yarn.sh"
;;
"stop")echo " =================== 关闭 hadoop集群 ==================="echo " --------------- 关闭 yarn ---------------"ssh hadoop2 "/home/hadoop/hadoop-3.1.3/sbin/stop-yarn.sh"echo " --------------- 关闭 hdfs ---------------"ssh hadoop1 "/home/hadoop/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)echo "Input Args Error..."
;;
esac

使用方式:

# 启动集群
bash my_hadoop.sh start
# 停止集群
bash my_hadoop.sh stop

http://www.ppmy.cn/server/160603.html

相关文章

4.C++中的循环语句

C中的循环语句 for 循环 for 循环是一种最常用的循环结构&#xff0c;通常用于已知循环次数的情况。 基本语法&#xff1a; for (初始化表达式; 条件表达式; 更新表达式) {// 循环体&#xff0c;当条件表达式为真时执行 }例如&#xff1a; #include <iostream> usin…

数据库存储上下标符号,sqlserver 2008r2,dm8

sqlserver 2008r2&#xff1a; 数据类型需要用nvarchar插入数据时字符串前需要用N create table test( col1 varchar(50), col2 nvarchar(50) ) insert into test(col1,col2) values(U⁴⁵⁶⁷⁸⁹⁰D₁₂₃₄₅₆₇₈₉₀,U⁴⁵⁶⁷⁸⁹⁰D₁₂₃₄₅₆₇₈₉₀) insert into…

如何用AI智能生成PPT,提升工作效率和创意

如何用AI智能生成PPT&#xff0c;提升工作效率和创意&#xff01;在这个信息爆炸的时代&#xff0c;我们每个人的时间都变得尤为珍贵&#xff0c;尤其是在繁忙的工作中&#xff0c;如何更高效地完成任务变得至关重要。制作PPT往往让人既头痛又心烦。面对大量的内容整理和设计&a…

【Vim Masterclass 笔记24】S10L43 + L44:同步练习10 —— 基于 Vim 缓冲区的各类基础操作练习(含点评课)

文章目录 S10L43 Exercise 12 - Vim Buffers1 训练目标2 操作指令2.1. 打开 buf* 文件2.2. 查看缓冲区 View the buffers2.3. 切换缓冲区 Switch buffers2.4. 同时编辑多个缓冲区 Edit multiple buffers at once2.5. 缓冲区的增删操作 Add and delete buffers2.6. 练习 Vim 内置…

K8S中Pod控制器之CronJob(CJ)控制器

CronJob 控制器是 Kubernetes 中用于周期性执行任务的一种控制器&#xff0c;它基于 Job 控制器来创建和管理作业。以下是 CronJob 的一些关键特点&#xff1a; 周期性调度&#xff1a;CronJob 允许您定义一个基于时间的调度&#xff0c;类似于 Linux 的 cron 工具&#xff0c;…

MindAgent:基于大型语言模型的多智能体协作基础设施

2023-09-18 &#xff0c;加州大学洛杉矶分校&#xff08;UCLA&#xff09;、微软研究院、斯坦福大学等机构共同创建的新型基础设施&#xff0c;目的在评估大型语言模型在游戏互动中的规划和协调能力。MindAgent通过CuisineWorld这一新的游戏场景和相关基准&#xff0c;调度多智…

在 vscode + cmake + GNU 工具链的基础上配置 JLINK

安装 JLINK JLINK 官网链接 下载安装后找到安装路径下的可执行文件 将此路径添加到环境变量的 Path 中。 创建 JFlash 项目 打开 JFlash&#xff0c;选择新建项目 选择单片机型号 在弹出的窗口中搜索单片机 其他参数根据实际情况填写 新建完成&#xff1a; 接下来设置…

STM32 FreeRTOS中断管理

目录 FreeRTOS的中断管理 1、STM32中断优先级管理 2、FreeRTOS任务优先级管理 3、寄存器和内存映射寄存器 4、BASEPRI寄存器 5、FreeRTOS与STM32中断管理结合使用 vPortRaiseBASEPRI vPortSetBASEPRI 6、FromISR后缀 7、在中断服务函数中调用FreeRTOS的API函数需注意 F…