Ubuntu从零创建Hadoop集群

目录

前言

前提准备

1.设置网关和网段

2.查看虚拟机IP及检查网络

3.Ubuntu相关配置

镜像源配置

[下载 vim编辑器](#下载 vim编辑器)

4.设置静态IP和SSH免密(可选)

设置静态IP

SSH免密

5.JDK环境部署

6.Hadoop环境部署

[7.配置 Hadoop 配置文件](#7.配置 Hadoop 配置文件)

HDFS集群规划

HDFS集群配置

1.配置works文件

2.配置hadoop-env.sh文件

3.配置core-site.xml文件

4.配置hdfs-site.xml文件

5.格式化NameNode与启动HDFS集群

YARN&MapReduce集群规划

1.配置mapred-env.sh文件

2.配置mapred-site.xml文件

3.配置yarn-env.sh文件

4.配置yarn-site.xml文件

5.启动YARN集群&MapReduce作业历史服务器


前言

本次创建Hadoop集群是基于Ubuntu的一系列操作

前提准备

  1. 必要的Linux知识,熟悉Linux命令,vim等编辑器的操作
  2. VMware Workstation 软件及Ubuntu的 .iso 镜像文件
  3. 三台Ubuntu虚拟机node1,node2,node3

1.设置网关和网段

在VMware软件中,点击编辑,点击虚拟网络编辑器,点击VMnet8

  • 网段(子网IP):192.168.88.0
  • 网关:192.168.88.2

2.查看虚拟机IP及检查网络

进入第一台Ubuntu虚拟机node1的UI桌面,打开命令提示符,输入如下命令:

  • ip a : 查看IP地址

  • ping www.baidu.com:检查网络是否正常(CTRL+Z停止ping命令)

    #查看虚拟机IP
    ip a
    #检查网络正常
    ping www.baidu.com

注:IP异常无法查看,在我的电脑-管理-服务和应用程序-服务下拉列表中下拉,有五项关于VMware的程序,全部启动即可。

3.Ubuntu相关配置

在IP和网络正常的情况下,首先要更新软件包列表或者切换镜像源

镜像源配置
  1. Ubuntu 镜像源:输入命令sudo apt update 更新软件包列表,输入命令sudo apt upgrade更新软件版本

    #更新软件包列表
    sudo apt update
    #更新软件版本
    sudo apt upgrade

  2. 如果不想使用Ubuntu镜像源,则可以切换镜像源,切换国内镜像源下载软件包时下载速度更快以下是切换镜像源步骤及一些国内可选镜像源:

2.1.备份原配置文件:

#备份source.list文件到/etc/apt/目录,生成.bak文件
sudo cp -a /etc/apt/sources.list /etc/apt/sources.list.bak
#如果操作失误,想恢复原配置,则使用如下命令将备份配置文件覆盖现有的镜像源配置文件:
sudo cp -a  /etc/apt/sources.list.bak  /etc/apt/sources.list

2.2.切换镜像源:

2.21.阿里镜像源:

修改sources.list文件,将http://archive.ubuntu.comhttp://security.ubuntu.com替换成https://mirrors.aliyun.com/

sudo sed -i "s@http://.*archive.ubuntu.com@https://mirrors.aliyun.com/@g" /etc/apt/sources.list
sudo sed -i "s@http://.*security.ubuntu.com@https://mirrors.aliyun.com/@g" /etc/apt/sources.list

2.22.清华镜像源:

sudo sed -i "s@http://.*archive.ubuntu.com@https://mirrors.tuna.tsinghua.edu.cn/ubuntu/@g" /etc/apt/sources.list
sudo sed -i "s@http://.*security.ubuntu.com@https://mirrors.tuna.tsinghua.edu.cn/ubuntu/@g" /etc/apt/sources.list

切换了镜像源后,通过sudo apt updatesudo apt upgrade更新软件包列表及软件包版本

下载 vim编辑器

1.下载vim编辑器 : 方便以后编辑改写文件

#下载vim编辑器
sudo apt install vim
#除了vim,熟悉nano编辑器的话,也可以安装nano
sudo apt install nano 

4.设置静态IP和SSH免密(可选)

设置静态IP
#进入文件配置目录
cd  /etc/netplan
#查看当前目录文件,配置文件是一个01-network-manager-all.yaml大致文件,也可能文件名不同
ls
#切换成root用户,防止权限不足无法修改文件
su -
#备份文件
sudo cp 01-network-manager-all.yaml 01-network-manager-all.yaml.bak
#使用vim编辑器编辑该文件
sudo vim 01-network-manager-all.yaml

进入01-network-manager-all.yaml配置文件后,配置如下:

#前提:不懂vim编辑器的去搜索一下常规操作
# i 进行编辑, 编辑完后,ESC  退出编辑,到命令模式,:wq  保存并退出

network:
    version: 2
    renderer: networkd  #ui桌面更适合使用NetworkManager
    ethernets:
         ens33:  #替换为你的网络接口名称,ip a 命令可查看
            dhcp4: false  #禁用动态IP
            addresses: [192.168.101] #设置成你想设置的静态IP
            gateway4: 192.168.88.2   #网关
            nameservers:
                 addresses: [8.8.8.8]  #DNS

保存关闭配置文件后,执行以下命令应用新的网络配置:

#应用网络配置
sudo netplan apply
#检查配置IP是否成功
ip a

#成功配置会和你设置的IP相同

注:如果在进入01-network-manager-all.yaml配置文件后报错,则可能是权限不足,解决方案如下:

#先切换root用户,再尝试进入
su -
sudo vim /etc/netplan/01-network-manager-all.yaml
#如果还是报错,则修改文件权限
sudo chown root:root /etc/netplan/01-network-manager-all.yaml
SSH免密

方法1: 直接在/etc/hosts中添加三台虚拟机IP,操作如下:

#进入hosts文件
vim /etc/hosts
#加入IP
192.168.88.101  node1  #格式: 虚拟机ip  主机名
192.168.88.102  node2
192.168.88.103  node3 

#三台虚拟机都要操作,加入IP保存退出即可

方法2:添加密钥实现,操作如下:

#生成SSH密钥对
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
#将生成的公钥添加到 ~/.ssh/authorized_keys 文件中,并确保其权限正确
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
#在 node1 上执行以下命令,使用 ssh-copy-id 命令将公钥复制到其他节点
ssh-copy-id node@node2
ssh-copy-id node@node3
#在 node2 上执行以下命令,使用 ssh-copy-id 命令将公钥复制到其他节点
ssh-copy-id node@node1
ssh-copy-id node@node3
#在 node3 上执行以下命令,使用 ssh-copy-id 命令将公钥复制到其他节点
ssh-copy-id node@node1
ssh-copy-id node@node2
#从 node1 尝试无密码登录到其他节点,验证SSH免密是否成功
ssh node@node2
ssh node@node3

5.JDK环境部署

注:JDK版本以1.8为例

官网下载jdk-8u441-linux-x64.tar.gzJava Downloads | Oracle 中国

将JDK压缩文件包拖入虚拟机中,记住自己拖放再哪,这里以拖放到根目录为例:

#解压缩jdk文件到/usr/local
tar -zxvf jdk-8u441-linux-x64.tar.gz -C /usr/local


#注:如果你不想解压到这路径,可以自定义创建一个文件夹存放
#先  mkdir -p /export/myserver 创建空文件夹,再解压

在解压完后,配置好Java的环境变量:

#对于单个用户的环境变量设置,你可以编辑 ~/.bashrc 文件。
#如果你希望所有用户都能使用 Hadoop
#则需要编辑全局的环境变量文件(如 /etc/profile或/etc/environment)

#配置JAVA_HOME环境变量
#编辑~/.bashrc文件
vim  ~/.bashrc
#添加环境变量
export JAVA_HOME=/usr/local/jdk #设置jdk安装目录
export PATH=$PATH:$JAVA_HOME/bin  #将bin目录添加到path中

保存退出后,执行以下命令使JDK环境变量立即生效并检查:

#使环境变量立即生效
source ~/.bashrc
#验证环境变量配置是否成功
java -version

使用scp命令将JDK文件分别复制给node2,node3:

#先切换到jdk解压的目录
cd /usr/local/
#复制给node2,node3
scp -r jdk node2:`pwd`/
scp -r jdk node3:`pwd`/

然后按以上相同操作分别给node2和node3配置环境变量。

6.Hadoop环境部署

注:Hadoop版本以3.4.1为例

官网下载Hadoop:Apache Hadoop

将Hadoop压缩包拖入Ubuntu虚拟机中,通过tar命令解压,这里以拖放到根目录为例:

#解压缩Hadoop文件到/usr/local
tar -zxvf hadoop-3.4.1.tar.gz -C /usr/local

配置Hadoop环境变量:

#配置HADOOP_HOME环境变量
#编辑~/.bashrc文件
vim  ~/.bashrc
#添加环境变量
export HADOOP_HOME="/usr/local/hadoop-3.4.1" #指定Hadoop的安装目录
export PATH="$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin" #将bin/sbin添加到PATH中
export HADOOP_CONF_DIR="$HADOOP_HOME/etc/hadoop" #指定Hadoop的配置文件目录

保存退出后,执行以下命令使Hadoop环境变量立即生效并检查:

#使环境变量立即生效
source ~/.bashrc
#验证环境变量配置是否成功
hadoop version

其他两台虚拟机node2,node3按jdk的操作scp过去即可。

7.配置 Hadoop 配置文件

首先,在配置前,让我们了解以下Hadoop相关知识:

1.Hadoop基础架构:中心化模式(也叫主从模式)

2.Hadoop三大核心组件:HDFS,MapReduce,YARN

2.1.HDFS(Hadoop Distributed File System):HDFS 是 Hadoop 的分布式文件系统,设计用于存储大规模数据集,并提供高容错性和高吞吐量的数据访问。

核心组件

  • NameNode:管理文件系统的命名空间(namespace),维护文件块映射信息,是整个集群的核心管理者。
  • DataNode:存储实际的数据块,并执行客户端请求的读写操作。
  • Secondary NameNode:辅助 NameNode 进行元数据的检查点操作,帮助减轻 NameNode 的负担,但不作为备份。

2.2.YARN( Yet Another Resource Negotiator):YARN 是 Hadoop 的资源管理和调度框架,负责管理集群资源并调度应用程序的任务。

核心组件

  • ResourceManager:全局的资源管理器,负责整个集群的资源分配和调度。
  • NodeManager:每个节点上的代理,负责监控节点的状态并向 ResourceManager 报告。
  • ApplicationMaster:为每个应用程序启动的进程,负责与 ResourceManager 协商资源,并与 NodeManager 交互以执行具体的任务。
  • Proxy Server:用于提供一个安全的代理服务,以防止直接访问ResourceManager和NodeManager的Web界面。它主要用于集群外部用户的安全访问。

2.3.MapReduce:MapReduce 是 Hadoop 中的一个编程模型和执行框架,用于并行处理大规模数据集。它通过将任务分解为 Map 和 Reduce 两个阶段来实现高效的分布式计算。

核心组件

  • JobHistory Server :用于记录和展示已完成的MapReduce作业的历史信息。这对于分析和调试历史作业非常有用。

工作流程

  1. Map 阶段:将输入数据集划分为多个独立的小任务(称为 map tasks),并行处理这些任务,生成中间键值对。
  2. Shuffle 和 Sort 阶段:将 Map 阶段生成的中间键值对进行分区、排序和合并,以便后续的 Reduce 阶段使用。
  3. Reduce 阶段:对经过 Shuffle 和 Sort 阶段处理后的数据进行聚合操作,生成最终结果。
HDFS集群规划

在开始前,我们首先对HDFS集群进行规划:

|-------|-------------------------------------|
| 节点 | 服务 |
| node1 | NameNode DataNode SecondaryNameNode |
| node2 | DataNode |
| node3 | DataNode |

NameNode 主角色 DataNode从角色 SecondaryNameNode辅助角色

HDFS集群配置

配置HDFS集群,我们主要涉及到如下文件的修改:

workers: 配置从节点(DataNode)有哪些

hadoop-env.sh:配置Hadoop的相关环境变量

core-site.xml: Hadoop核心配置文件

hdfs-site.xml: HDFS核心配置文件 这些文件均存在与$HADOOP_HOME/etc/hadoop文件夹中。

1.配置works文件
# 进入配置文件目录
cd /usr/local/etc/hadoop
# 编辑workers文件
vim workers
# 填入如下内容,表示集群记录了三个DataNode从节点
node1
node2
node3
2.配置hadoop-env.sh文件
# 填入如下内容

# JAVA_HOME,指明JDK环境的位置在哪
export JAVA_HOME=/usr/local/jdk

# HADOOP_HOME,指明Hadoop安装位置
export HADOOP_HOME=/usr/local/hadoop 

# HADOOP_CONF_DIR,指明Hadoop配置文件目录位置
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

# HADOOP_LOG_DIR,指明Hadoop运行日志目录位置
export HADOOP_LOG_DIR=$HADOOP_HOME/logs  # 修正变量名为HADOOP_LOG_DIR
3.配置core-site.xml文件
#在文件内部填入如下内容
<configuration>
  <!-- 默认文件系统 -->
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://node1:8020</value>
    <description>表示 NameNode 运行在 node1 节点上,并且监听端口 8020</description>
  </property>

  <!-- I/O 缓冲区大小 -->
  <property>
    <name>io.file.buffer.size</name>
    <value>131072</value>
    <description>用于序列文件的缓冲区大小</description>
  </property>

  <!-- Hadoop 临时目录 -->
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/usr/local/hadoop/tmp</value>
    <description>其他临时目录的基础</description>
  </property>

  <!-- 垃圾回收周期 -->
  <property>
    <name>fs.trash.interval</name>
    <value>1440</value>
    <description>垃圾检查点之间的分钟数</description>
  </property>
</configuration>
4.配置hdfs-site.xml文件

4.1首先,先创建节点目录

sudo mkdir -p /usr/local/hadoop/data/namenode
sudo mkdir -p /usr/local/hadoop/data/datanode
sudo mkdir -p /usr/local/hadoop/data/secondarynamenode

4.2然后再配置

<configuration>
  <!-- NameNode 相关配置 -->
  
  <!-- NameNode 存储元数据的目录 -->
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>/usr/local/hadoop/data/namenode</value>
    <description>确定DFS名称节点应在本地文件系统的什么位置存储名称表</description>
  </property>

  <!-- Secondary NameNode 相关配置 -->
  
  <!-- Secondary NameNode 的检查点目录 -->
  <property>
    <name>dfs.namenode.checkpoint.dir</name>
    <value>/usr/local/hadoop/data/secondarynamenode</value>
    <description>确定DFS(分布式文件系统)次级名称节点应在本地文件系统的什么位置存储用于合并的临时镜像</description>
  </property>

  <!-- DataNode 相关配置 -->
  
  <!-- DataNode 存储块数据的目录 -->
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>/usr/local/hadoop/data/datanode</value>
    <description>确定DFS数据节点应在本地文件系统的什么位置存储其数据块</description>
  </property>

  <!-- 副本数配置 -->
  
  <!-- 数据块的副本数 -->
  <property>
    <name>dfs.replication</name>
    <value>3</value>
    <description>默认块复制</description>
  </property>

  <!-- 权限配置 -->
  
  <!-- 是否启用权限检查 -->
  <property>
    <name>dfs.permissions.enabled</name>
    <value>true</value>
    <description>HDFS启动禁用权限</description>
  </property>

</configuration>
5.格式化NameNode与启动HDFS集群
# 为确保安全,这里以普通用户node启动集群
su - node
# 格式化namenode
hadoop namenode -format


# 启动hdfs集群
start-dfs.sh
# 关闭hdfs集群
stop-dfs.sh

# 如果遇到命令未找到的错误,表明环境变量未配置好,可以以绝对路径执行
/usr/local/hadoop/sbin/start-dfs.sh
/usr/local/hadoop/sbin/stop-dfs.sh

HDFS的配置文件修改好后,需要分发到其它的服务器节点中:

scp works hadoop-env.sh core-site.xml hdfs-site.xml node2:`pwd`
scp works hadoop-env.sh core-site.xml hdfs-site.xml node3:`pwd`

启动完成后,可以在浏览器打开:http://node1:9870

YARN&MapReduce集群规划

|-------|----------------------------------------------------------|
| 节点 | 角色 |
| node1 | ResourceManager NodeManager ProxyServer JobHistoryServer |
| node2 | NodeManager |
| node3 | NodeManager |

ResourceManager主角色 NodeManager从角色 ProxyServer&JobHistoryServer辅助角色

YARN&MapReduce集群配置

配置YARN&MapReduce集群,我们主要涉及到如下文件的修改:

mapred-env.sh: 用于设置 MapReduce 相关的环境变量

mapred-site.xml:用于配置 MapReduce 框架的属性

yarn-env.sh: 用于设置 YARN 相关的环境变量

yarn-site.xml: 用于配置 YARN 的属性

1.配置mapred-env.sh文件
# 设置Java的安装路径
export JAVA_HOME=/usr/local/jdk

# 设置MapReduce的日志目录
export HADOOP_MAPRED_HOME=/usr/local/hadoop

# 设置MapReduce的临时目录
export HADOOP_MAPRED_LOG_DIR=${HADOOP_MAPRED_HOME}/logs

# 设置MapReduce的PID文件目录
export HADOOP_MAPRED_PID_DIR=${HADOOP_MAPRED_HOME}/pids

# 设置MapReduce的临时目录
export HADOOP_MAPRED_TMP_DIR=${HADOOP_MAPRED_HOME}/tmp
2.配置mapred-site.xml文件
<configuration>
    <!-- 配置MapReduce框架使用YARN -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
        <description>MapReduce的运行框架设置为yarn</description>
    </property>

    <!-- 配置MapReduce作业历史服务器地址 -->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>node1:10020</value>
        <description>MapReduce作业历史服务器的地址</description>
    </property>

    <!-- 配置MapReduce作业历史服务器Web UI地址 -->
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>node1:19888</value>
        <description>MapReduce JobHistory服务器Web UI的地址</description>
    </property>

    <!-- 配置MapReduce任务的默认并行度 -->
    <property>
        <name>mapreduce.map.memory.mb</name>
        <value>1024</value>
        <description>提高映射(map)任务性能</description>
    </property>

    <property>
        <name>mapreduce.reduce.memory.mb</name>
        <value>2048</value>
        <description>提升归约任务的性能</description>
    </property>
</configuration>
3.配置yarn-env.sh文件
# 设置Java的安装路径
export JAVA_HOME=/usr/local/jdk
#设置Hadoop的安装路径
export HADOOP_HOME=/usr/local/hadoop
# 设置YARN的日志目录
export YARN_LOG_DIR=${HADOOP_HOME}/logs

# 设置YARN的PID文件目录
export YARN_PID_DIR=${HADOOP_HOME}/pids

# 设置YARN的临时目录
export YARN_TMP_DIR=${HADOOP_HOME}/tmp

# 设置ResourceManager的JVM堆大小
export YARN_RESOURCEMANAGER_OPTS="-Xmx2048m"

# 设置NodeManager的JVM堆大小
export YARN_NODEMANAGER_OPTS="-Xmx2048m"
4.配置yarn-site.xml文件

4.1首先,先创建节点目录:

#创建/data/nm-local-dir目录
sudo mkdir -p /usr/local/hadoop/data/nm-local-dir
#给予用户权限,这里将  USER  替换为你自己的用户名
sudo chown -R $USER:$USER /usr/local/hadoop/data

4.2.再进行配置:

<configuration>
    <!-- 配置ResourceManager的地址 -->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>node1</value>
        <description>资源管理器的主机名</description>
    </property>

    <!-- 配置ResourceManager的Web UI地址 -->
    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>node1:8088</value>
        <description>资源管理器Web应用程序的地址</description>
    </property>

    <!-- 配置NodeManager的本地目录 -->
    <property>
        <name>yarn.nodemanager.local-dirs</name>
        <value>/usr/local/hadoop/data/nm-local-dir</value>
        <description>用于存储容器日志和中间数据的以逗号分隔的目录列表</description>
    </property>

    <!-- 配置NodeManager的资源管理器地址 -->
    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>8192</value>
        <description>可用于容器的物理内存总量</description>
    </property>

    <!-- 配置NodeManager的CPU核心数 -->
    <property>
        <name>yarn.nodemanager.resource.cpu-vcores</name>
        <value>4</value>
        <description>可用于容器的CPU核心总数</description>
    </property>

    <!-- 配置NodeManager的健康检查脚本 -->
    <property>
        <name>yarn.nodemanager.health-checker.script.path</name>
        <value>/usr/local/hadoop/bin/health_check.sh</value>
        <description>检查节点健康状况的脚本路径</description>
    </property>

    <!-- 配置YARN的日志聚合 -->
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
        <description>是否启用日志聚合</description>
    </property>

    <!-- 配置日志保留时间 -->
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>604800</value>
        <description>历史服务器上保留聚合日志(以秒为单位)的时间</description>
    </property>
</configuration>
5.启动YARN集群&MapReduce作业历史服务器
# 启动YARN
start-yarn.sh

# 启动MapReduce作业历史服务器
mr-jobhistory-daemon.sh start historyserver

MapReduce和YARN的配置文件修改好后,需要分发到其它的服务器节点中:

#进入Hadoop配置文件目录
cd /usr/local/hadoop/etc/hadoop
#复制给node2,node3
scp mapred-env.sh mapred-site.xml yarn-env.sh yarn-site.xml node2:`pwd`
scp mapred-env.sh mapred-site.xml yarn-env.sh yarn-site.xml node3:`pwd`

最后,打开 http://node1:8088 即可看到YARN集群的监控页面(ResourceManager的WEB UI)

相关推荐
shelutai34 分钟前
ubuntu 启动不起来,光标闪烁 解决方法
linux·运维·ubuntu
小萌新~~~~1 小时前
Linux常见操作命令以及编辑器VI命令
linux·运维·服务器
神秘的土鸡1 小时前
Linux中WgCloud的服务器与客户端监控系统(完整部署教程)
linux·运维·nginx·adb·监控·自动化运维
laolitou_10241 小时前
CentOS 7 中安装 Docker和Docker Compose
linux·docker·centos
Main. 241 小时前
Linux的进程观:简单性如何成就强大性(三)
linux·服务器
莫扎特不唱摇篮曲1 小时前
Ubuntu 安装 stable-diffusion-webui-docker 常见问题处理方法
ubuntu·docker·stable diffusion
执 白2 小时前
xenomai4的dovetail学习(5)——文件和网络
linux·网络·学习·xenomai4
小林熬夜学编程2 小时前
【MySQL】第十二弹---表连接详解:从内连接到外连接
linux·开发语言·数据库·mysql·算法
深度Linux2 小时前
深入理解Linux内存缓存:提升性能的关键
linux·内存·cache
XMYX-03 小时前
CentOS 7 日志切割实战:Logrotate 详解与配置指南
linux·运维·centos