当前位置: 首页 > news >正文

Ubuntu从零创建Hadoop集群

目录

前言

前提准备

1.设置网关和网段

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

3.Ubuntu相关配置

镜像源配置

下载  vim编辑器 

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

设置静态IP  

SSH免密

5.JDK环境部署

6.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
  1.  如果不想使用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 update sudo 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: 2renderer: networkd  #ui桌面更适合使用NetworkManagerethernets:ens33:  #替换为你的网络接口名称,ip a 命令可查看dhcp4: false  #禁用动态IPaddresses: [192.168.101] #设置成你想设置的静态IPgateway4: 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.gz:Java 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
    #添加环境变量
    HADOOP_HOME="/usr/local/hadoop-3.4.1"
    PATH="$PATH:$HADOOP_HOME/bin:HADOOP_HOME/sbin"

    保存退出后,执行以下命令使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集群进行规划:

    节点服务
    node1NameNode  DataNode  SecondaryNameNode
    node2DataNode
    node3DataNode

     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=/sur/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
    
    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集群规划
    节点角色
    node1ResourceManager NodeManager ProxyServer JobHistoryServer
    node2NodeManager
    node3NodeManager

     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# 设置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的配置文件修改好后,需要分发到其它的服务器节点中:

    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)


    http://www.mrgr.cn/news/92348.html

    相关文章:

  1. 【STL】4.<list>
  2. 业务随行原理
  3. mac下载MAMP6.8.1
  4. 探索超声波的奥秘——定时器与PCA
  5. 面试题——简述Vue 3的服务器端渲染(SSR)是如何工作的?
  6. MongoDB 面试题目
  7. (Arrow)时间处理变得更简单
  8. 批量将gitlab仓库转移到gitea中
  9. 计算机视觉(opencv-python)入门之图像的读取,显示,与保存
  10. 微信小程序网络请求与API调用:实现数据交互
  11. 系统调用过程
  12. 模型蒸馏与量化技术:让AI模型“瘦身”却不“降智”的底层逻辑
  13. 可狱可囚的爬虫系列课程 14:10 秒钟编写一个 requests 爬虫
  14. Android AOSP系统裁记录
  15. 在 HuggingFace 中使用 SSH 进行下载数据集和模型
  16. Java入门基础、JDK安装和配置
  17. 音视频入门基础:RTP专题(12)——RTP中的NAL Unit Type简介
  18. mamba,mamba2环境搭建
  19. Python批量压缩并上载CSV数据文件到Box企业云盘
  20. kvaser pythoncan 调用报错(x86 ubuntu工控机)