Hadoop集群化服务实践

举报
MJ_C 发表于 2023/11/10 21:01:36 2023/11/10
【摘要】 本项目使用了华为云服务提供的基于鲲鹏计算架构的远程ECS主机和OBS对象存储服务,完成了Hadoop集群搭建、HDFS环境配置和系统功能验证等实验任务,并通过多个ECS主机作为Hadoop集群节点,了解Hadoop的工作原理和环境构建过程。实验结束后,成功在4个ECS服务器节点上部署运行了HDFS,且可以通过SSH协议正常访问。

一、实验内容

使用华为云提供的ECS云服务,通过搭建开源Hadoop集群从而掌握Hadoop搭建方法。并且利用对象存储服务,使开源Hadoop与华为云OBS服务互联,使Hadoop集群可读取OBS数据。
具体包括以下几个方面的实践内容:
(1)完成Hadoop集群的搭建;
(2)完成Hadoop与OBS的互联。

二、实验原理与参数

2.1 Hadoop集群

2.1.1 集群组网示意图

image.png

图2-1 Hadoop部署组网环境

2.1.2 理解与分析

Hadoop是一个开源的分布式计算系统,它由两个核心组件HDFS和MapReduce组成,可以用于处理大规模数据。如下所示,是Hadoop的典型集群架构说明:

  • NameNode
    NameNode是HDFS中最重要的一个组件,主要负责管理文件系统的命名空间以及维护文件系统中各个数据块与数据节点之间的映射关系。在一个Hadoop集群中,通常只有一个NameNode,它会将命名空间的元数据存储在内存中,并将其定期持久化到磁盘上。
  • Secondary NameNode
    Secondary NameNode(SNN)是NameNode的辅助节点,主要负责定期检查并合并NameNode中的日志和镜像文件,以便恢复文件系统的一致性。在Hadoop 2.x版本中,SNN已经被Checkpoint Node取代。
  • DataNode
    DataNode是HDFS中存储数据的节点,每个节点会保存一部分数据块的副本,并向客户端提供读写服务。在Hadoop集群中,通常会有多个DataNode,它们会将数据块的副本存储在本地磁盘中,并周期性地向NameNode报告自己的存储容量、状态等信息。
  • ResourceManager
    ResourceManager是YARN(Hadoop的资源调度系统)中最重要的一个组件,主要负责集群中各种资源(CPU、内存、磁盘等)的调度和管理。在一个Hadoop集群中,通常只有一个ResourceManager,它会根据不同应用的需求以及集群的状况分配资源并启动相应的任务。
  • NodeManager
    NodeManager是YARN中管辖单个节点的组件,负责本地资源的管理和任务的执行。在Hadoop集群中,每个DataNode都会运行一个NodeManager,它们会定期向ResourceManager汇报自己的状态,并接受ResourceManager的指令来启动、停止和监控任务。

2.2 远程连接手段

本次实验使用远程连接工具对ECS主机进行访问与操作。使用的工具包括PuTTY、Xshell等,均用到了SSH协议:如图2-2所示。SSH是一种加密的网络传输协议,可在不安全的网络中网络服务提供安全的传输环境,通过在网络中创建安全隧道来实现 SSH 客户端和服务器之间的连接。

2.3 ECS实验环境参数

2.3.1 CPU/GPU型号与参数

image.png

2.3.2 内存容量与带宽

image.png

2.3.3 互联网络参数

Node-0001:

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
    inet 192.168.0.223  netmask 255.255.255.0  broadcast 192.168.0.255
    inet6 fe80::f816:3eff:fe47:9f7e  prefixlen 64  scopeid 0x20<link>
    ether fa:16:3e:47:9f:7e  txqueuelen 1000  (Ethernet)
    RX packets 748627  bytes 546480634 (521.1 MiB)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 607953  bytes 2637082994 (2.4 GiB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
    inet 127.0.0.1  netmask 255.0.0.0
    inet6 ::1  prefixlen 128  scopeid 0x10<host>
    loop  txqueuelen 1000  (Local Loopback)
    RX packets 3299  bytes 336131 (328.2 KiB)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 3299  bytes 336131 (328.2 KiB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Node-0002:

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.204  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::f816:3eff:fe47:9f6b  prefixlen 64  scopeid 0x20<link>
        ether fa:16:3e:47:9f:6b  txqueuelen 1000  (Ethernet)
        RX packets 392745  bytes 1271822978 (1.1 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 245151  bytes 18219175 (17.3 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 73  bytes 11086 (10.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 73  bytes 11086 (10.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Node-0003:

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.189  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::f816:3eff:fe47:9f5c  prefixlen 64  scopeid 0x20<link>
        ether fa:16:3e:47:9f:5c  txqueuelen 1000  (Ethernet)
        RX packets 943068  bytes 1306985143 (1.2 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 251634  bytes 18607232 (17.7 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 64  bytes 10386 (10.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 64  bytes 10386 (10.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Node-0004:

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.143  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::f816:3eff:fe47:9f2e  prefixlen 64  scopeid 0x20<link>
        ether fa:16:3e:47:9f:2e  txqueuelen 1000  (Ethernet)
        RX packets 907974  bytes 1254824909 (1.1 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 249871  bytes 18673933 (17.8 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

    lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 65  bytes 10626 (10.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 65  bytes 10626 (10.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

三、准备华为云环境

3.1 购买ECS主机

首先根据要求,从华为云官网上配置虚拟私有云vpc-docker和ECS弹性云服务器资源。需要配置4个ECS Node。配置成功界面如下图3-1所示:
image.png

图3-1 实验资源的云上配置
3.2 购买OBS服务
根据要求,从华为云官网上配置OBS服务资源。需要配置1个桶和1个并行文件系统。配置成功界面如下图3-2所示:
image.png

图3-2(a) 配置标准存储的桶
image.png

图3-2(b) 配置并行文件系统

四、搭建Hadoop集群

本章介绍搭建Hadoop集群的步骤和每步的实验输出截图。该部分实验的整体流程图如图4-0所示:
image.png

图4-0 搭建Hadoop系统流程图

4.1 Hadoop集群配置

4.1.1 ECS配置

1.使用Xshell,登录全部4台ECS节点,然后将老师提供的hadoop安装包、jar包、OpenJDK文件通过Xftp传输到节点上。如图4-1所示:
image.png

图4-1 文件传输
2.配置/etc/hosts文件,为每台节点增加其他节点的内网IP地址,如图4-2所示:
image.png

图4-2 配置主机地址
3.配置节点互信,各节点执行ssh-keygen -t rsa,连续回车生成/root/.ssh/id_rsa.pub文件,如图4-3所示:

4.各节点执行cat指令,输出每个节点的key,下图以node-0001为例展示:
image.png

图4-4 复制密钥
5.各节点执行vim,配置authorized_keys文件,使得各个节点之间可以无密码访问,此后各节点执行:ssh node-0001~node-0004,选择yes后,均能够无密码跳转到目标节点。如下图所示:(以node-0001连接其他节点为例)
image.png

图4-5 节点间互访功能验证

4.1.2 JDK安装

按照实验指导书的要求,验证jdk是否已经安装,输出信息如下:
image.png

图4-6 JDK版本信息
可见已经成功安装JDK。

4.2 搭建Hadoop集群

4.2.1 集群搭建

1.执行如下操作:
· 各节点创建buf、localdir等目录
· node-0001解压安装包
· 对主节点node-0001配置hadoop core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml、slaves等文件
· 对node-0001配置Hadoop环境变量
2.对node-0001节点配置jar包,如下图所示:
image.png

图4-7 配置jar文件
3.Node-0001分发Hadoop到各个节点,如图4-8所示。
image.png

图4-8 分发Hadoop配置文件输出
4.配置4节点的profile然后source执行。之后,对node-0001执行HDFS初始化,如图4-9所示:
image.png

图4-9 节点初始化
5.上述步骤完成后,启动HDFS,如图所示。可见成功启动了集群,该步骤配置完成。
image.png

图4-10 启动HDFS
6.执行HDFS指令mkdir和ls,如下图所示。可以成功找到对应的项目。
image.png

图4-11 文件系统功能

4.2.2 OBS互联

1.上传OBS对象,即之后使用的Word Count文件:
image.png

图4-12 上传OBS对象
2.执行HDFS命令可见OBS文件,如图所示,由此可见,文件系统与OBS互联成功。
image.png

图4-13 OBS系统互联

4.3 资源的释放

本次实验的两个子实验完成后,释放华为云上的弹性云服务器ECS、OBS文件系统和外网IP等相关资源。

五、实验拓展与展望

5.1 对ECS云服务器的理解

5.1.1 ECS云服务器概述

弹性云服务器Elastic Compute Service(ECS)是华为云等云计算厂商提供的一种基础云计算服务。可以通过远程在高性能主机上控制部署自己的项目。云服务器相对传统的服务器而言,在部署项目时无需提前采购硬件设备,而是根据业务需要,可以随时扩容磁盘、增加带宽。

5.1.2 ECS云服务器的相关知识

表5-1列出了笔者自行归纳的有关ECS的知识点:
表5-1 ECS云服务器相关知识点
image.png

5.2 对Hadoop系统的理解

5.2.1 MapReduce模型

本次实验虽然不涉及这一部分的知识,但是,它作为Hadoop、HDFS的应用基础框架和计算模型依然十分重要。它是Hadoop中的一个分布式计算框架。它可以将大规模数据集分成许多小的数据块,并在分布式计算集群中并行处理这些数据块,最终将结果合并起来。MapReduce的原理可以概括为两个阶段:Map和Reduce。
image.png

图5-1 MapReduce框架
1.Map阶段
在Map阶段中,MapReduce会将输入数据分割成若干个数据块,并由每个Map任务对其进行并行处理。每个Map任务会将处理结果映射为一组键值对,并使用哈希函数将它们分类到不同的Reduce任务中去。MapReduce的Map阶段通常具有如下特点:
(1)输入数据的读取和预处理通过InputFormat完成,可以从多种来源(如本地文件系统、HDFS、HBase等)读取数据,并对其进行解析、压缩等操作;
(2)Map任务的执行由Mapper类实现,主要包括map()方法,该方法会对输入数据进行处理,并将处理结果输出为一组中间键值对;
(3)Map任务的个数由设置文件决定,默认情况下与Hadoop集群中DataNode的数量相同;
(4)中间键值对的数据类型由用户自定义,通常包括MapReduce中各种基本类型和自定义对象等。
2.Reduce阶段
在Reduce阶段中,MapReduce会将Map阶段中产生的中间键值对根据键进行合并和归并,并将每个键对应的值列表交给单个Reduce任务进行处理。Reduce任务会处理各个键对应的值列表,生成最终的输出结果。MapReduce的Reduce阶段通常具有如下特点:
(1)中间键值对的排序、分组和归并由Shuffle过程完成,在该过程中,Map任务会将自己产生的中间键值对按照键进行排序,并根据键的哈希值将它们分配到不同的Reduce任务中去;
(2)Reduce任务的执行由Reducer类实现,主要包括reduce()方法,该方法会接受一个键和与之相关的值列表,并将结果输出为一组最终键值对;
(3)Reduce任务的个数由用户自定义,但是通常与Hadoop集群中的节点数相同;
(4)最终输出结果的数据类型由用户自定义,可以是MapReduce中各种基本类型和自定义对象等。

5.2.2 Hadoop的优缺点

1.优点
(1)高可靠性:Hadoop采用了数据冗余和自动故障转移等机制,可以在一定程度上保证数据的可靠性和系统的稳定性。
(2)高扩展性:Hadoop具有良好的横向扩展能力,通过添加更多的节点可以轻松地扩展集群规模。
(3)高并发性:Hadoop能够将任务分配到不同的节点上进行并行计算,从而提高了数据处理的效率和并发性。
(4)低成本:由于Hadoop是基于开源软件构建的,因此相对于传统的商业数据仓库解决方案,其成本较低。
2.缺点
(1)数据一致性问题:由于Hadoop采用了数据冗余机制,可能会导致数据一致性方面的问题,需要额外的工作来维护数据的一致性。
(2)数据访问性能受限:由于Hadoop的数据存储和计算节点通常分离,因此在访问数据时需要跨越不同的物理节点,对数据访问性能造成一定的影响。
(3)MapReduce模型不适合所有场景:由于MapReduce模型的特殊性质,它并不适合所有的数据处理场景,需要考虑业务需求和技术选型等因素。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。