Hadoop集群化服务实践
一、实验内容
使用华为云提供的ECS云服务,通过搭建开源Hadoop集群从而掌握Hadoop搭建方法。并且利用对象存储服务,使开源Hadoop与华为云OBS服务互联,使Hadoop集群可读取OBS数据。
具体包括以下几个方面的实践内容:
(1)完成Hadoop集群的搭建;
(2)完成Hadoop与OBS的互联。
二、实验原理与参数
2.1 Hadoop集群
2.1.1 集群组网示意图
图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型号与参数
2.3.2 内存容量与带宽
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所示:
图3-1 实验资源的云上配置
3.2 购买OBS服务
根据要求,从华为云官网上配置OBS服务资源。需要配置1个桶和1个并行文件系统。配置成功界面如下图3-2所示:
图3-2(a) 配置标准存储的桶
图3-2(b) 配置并行文件系统
四、搭建Hadoop集群
本章介绍搭建Hadoop集群的步骤和每步的实验输出截图。该部分实验的整体流程图如图4-0所示:
图4-0 搭建Hadoop系统流程图
4.1 Hadoop集群配置
4.1.1 ECS配置
1.使用Xshell,登录全部4台ECS节点,然后将老师提供的hadoop安装包、jar包、OpenJDK文件通过Xftp传输到节点上。如图4-1所示:
图4-1 文件传输
2.配置/etc/hosts文件,为每台节点增加其他节点的内网IP地址,如图4-2所示:
图4-2 配置主机地址
3.配置节点互信,各节点执行ssh-keygen -t rsa,连续回车生成/root/.ssh/id_rsa.pub文件,如图4-3所示:
4.各节点执行cat指令,输出每个节点的key,下图以node-0001为例展示:
图4-4 复制密钥
5.各节点执行vim,配置authorized_keys文件,使得各个节点之间可以无密码访问,此后各节点执行:ssh node-0001~node-0004,选择yes后,均能够无密码跳转到目标节点。如下图所示:(以node-0001连接其他节点为例)
图4-5 节点间互访功能验证
4.1.2 JDK安装
按照实验指导书的要求,验证jdk是否已经安装,输出信息如下:
图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包,如下图所示:
图4-7 配置jar文件
3.Node-0001分发Hadoop到各个节点,如图4-8所示。
图4-8 分发Hadoop配置文件输出
4.配置4节点的profile然后source执行。之后,对node-0001执行HDFS初始化,如图4-9所示:
图4-9 节点初始化
5.上述步骤完成后,启动HDFS,如图所示。可见成功启动了集群,该步骤配置完成。
图4-10 启动HDFS
6.执行HDFS指令mkdir和ls,如下图所示。可以成功找到对应的项目。
图4-11 文件系统功能
4.2.2 OBS互联
1.上传OBS对象,即之后使用的Word Count文件:
图4-12 上传OBS对象
2.执行HDFS命令可见OBS文件,如图所示,由此可见,文件系统与OBS互联成功。
图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云服务器相关知识点
5.2 对Hadoop系统的理解
5.2.1 MapReduce模型
本次实验虽然不涉及这一部分的知识,但是,它作为Hadoop、HDFS的应用基础框架和计算模型依然十分重要。它是Hadoop中的一个分布式计算框架。它可以将大规模数据集分成许多小的数据块,并在分布式计算集群中并行处理这些数据块,最终将结果合并起来。MapReduce的原理可以概括为两个阶段:Map和Reduce。
图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模型的特殊性质,它并不适合所有的数据处理场景,需要考虑业务需求和技术选型等因素。
- 点赞
- 收藏
- 关注作者
评论(0)