learn-tech/专栏/计算机基础实战课/加餐03学习攻略(二):大数据&云计算,究竟怎么学?.md
2024-10-16 13:06:13 +08:00

192 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

因收到Google相关通知网站将会择期关闭。相关通知内容
加餐03 学习攻略(二):大数据&云计算,究竟怎么学?
你好我是LMOS。
上节课我们从谷歌的三驾马车开始,学习了大数据三件套的设计思路,可惜谷歌三驾马车作为商用软件,只开放了论文来讲解原理,却并没有开放出对应的源代码。
为了帮你更好地理解这些核心技术是怎么落地的,这节课我会简单介绍一下另外三个基础组件的设计原理,它们也是开源大数据生态中的重要角色。
HDFS设计原理
首先我们来说说HDFS它的全称是Hadoop Distributed File System你可以理解为一个可以由低成本的普通PC机组成的大规模分布式文件系统。
HDFS的架构图如下所示
其实HDFS的核心架构和[上节课]讲过的GFS架构思路是一脉相承的。
HDFS基于主/从架构设计其集群的核心是由NameNode充当主服务器、DataNode充当从服务器、Client这三部分构成的。各部分的含义和功能你可以参考后面这张表-
通过这几个组件的配合,我们就拥有了一个可靠的分布式文件系统。
那么HDFS有哪些优势呢主要是后面这四点
容错性:可以在集群中的任意节点发生故障时继续运行,这能保证数据的安全性。
大数据处理能力HDFS可以存储海量的数据并支持大规模并行计算。
高可靠性HDFS将文件分割成多个块存储并在集群中多次复制可以保证数据的高可靠性。
简单易用HDFS提供了简单易用的文件存储和访问接口与其他系统集成很方便。
但是HDFS也有一些不足具体包括
性能相对较低:不适合低延迟的数据访问。
不支持随机写入:不支持随机写入,只能进行顺序写入。
对小文件不友好:不能很好地存储小文件,因为它需要将小文件分割成大块存储,而这会导致存储和计算效率低下。
总之HDFS能够高效地存储海量数据并支持大规模并行计算。但是HDFS 不适合用于低延迟的数据访问,也不适合用于存储小文件。
说到这我们就不难推测HDFS的适用场景了——它适合用在海量数据存储和大规模数据分析的场景中例如搜索引擎、广告系统、推荐系统等。
YARN设计原理
其实早期Hadoop也按照Google Mapreduce的架构实现了一套Mapreduce的资源管理器用于管理和调度MapReduce任务所需要的资源。但是JobTracker存在单点故障它承受的访问压力也比较大这影响了系统的可扩展性。另外早期设计还不支持MapReduce之外的计算框架比如Spark、Flink
正是因为上述问题Hadoop才做出了YARN这个新的Hadoop资源管理器。YARN的全称是Yet Another Resource Negotiator让我们结合架构图了解一下它的工作原理。-
根据架构图可见YARN由ResourceManager、NodeManager、JobHistoryServer、Containers、Application Master、job、Task、Client组成。
YARN的架构图中的各个模块的功能你可以参考后面这张表格-
了解了每个模块大致的功能之后我们再看看YARN运行的基本流程吧-
到YARN运行主要是包括后面表格里的八个步骤。-
其实我们计算的每一个MapReduce的作业也都是通过这几步被YARN资源管理器调度到不同的机器上运行的。弄懂了YARN的工作原理对“Hadoop大数据生态下如何调度计算作业到不同容器做计算”这个问题你会更容易理解。
然而解决了存储和计算问题还不够。因为大数据生态下需要的组件非常多各种组件里还有很多需要同步、订阅或通知的状态信息。如果这些信息没有一个统一组件处理那整个分布式系统的运行都会失控这就不得不提到一个重要的协调组件——ZooKeeper了。
ZooKeeper设计原理
ZooKeeper集群中包含Leader、Follower以及Observer三个角色。
Leader负责进行投票的发起和决议更新系统状态Leader是由选举产生的。Follower用于接受客户端请求并向客户端返回结果在选主过程中会参与投票。
Observer的目的是扩展系统提高读取速度。Observer会从客户端接收请求并将结果返回给客户端。Observer可以接受客户端连接也可以接收读写请求并将写请求转发给Leader。但是Observer不参与投票过程只同步Leader的状态。
后面是ZooKeeper的架构图
-
在其核心Zookeeper使用原子广播来保持服务器同步。实现这种机制的协议称为Zab协议它包括恢复模式用于主选择和广播模式用于同步
当服务启动或leader崩溃后Zab协议进入恢复模式。恢复模式结束时leader已经当选大多数服务器已经同步完成leader的状态。这种状态同步可以确保leader和Server的系统状态相同。
为了保证事务序列的一致性ZooKeeper使用递增的事务IDzxid来标识事务。所有提案提交时都会附上zxid。Zxid为64位整数高32位表示领导人关系是否发生变化每选出一个领导者就会创建一个新的epoch表示当前领导人所属的统治时期低32位用于增量计数。
在工作期间,每个服务器都有三种状态:
LOOKING表示当前服务器不知道该领导者正在寻找他。
LEADING表示当前Server为已当选的leader。
FOLLOWING表示该leader已经当选当前Server正在与该leader同步。
通过这样一套可靠的一致性协议和架构设计Zookeeper把用户改变数据状态的操作抽象成了类似于对文件目录树的操作。这样就简化了分布式系统中数据状态协调的难度提高了分布式系统运行的稳定性和可靠性。
综合应用与环境搭建
学了这么多基础概念我们来挑战一个综合性问题。假设在一个大型Hadoop集群中你作为系统管理员需要解决这样一个问题——如何保证数据的安全性
你会如何解决呢使用哪些HDFS、YARN、ZooKeeper中的哪些功能为什么这样选择呢你可以自己先思考一下再听听我的想法。
为了保证数据的安全性我们可以使用HDFS的多副本机制来保存数据。在HDFS中我们可以将文件分成若干块存储在集群中的多个节点上并设置每个块的副本数量。这样即使某个节点出现故障也可以通过其他节点上的副本来恢复数据。
此外还可以利用YARN的资源管理功能来控制集群中节点的使用情况以避免资源过度使用导致的数据丢失。
最后我们还可以利用ZooKeeper的分布式锁功能来保证集群中只有一个节点可以访问某个文件。这样多个节点同时写入同一个文件造成的数据冲突也能够避免。
总的来说综合使用HDFS的多副本机制、YARN的资源管理功能以及Zookeeper的分布式锁功能可以帮我们有效保证数据的安全性。
接下来就让我们动手搭建一套大数据开发环境吧。大数据开发环境搭建一般环节比较多所以比较费时。为了节约部署时间提高开发效率我比较推荐使用Docker部署。
首先我们先安装好Docker和docker-compose。
要安装Docker一共要执行六步操作。第一步在终端中更新软件包列表
sudo apt update
第二步,安装依赖包:
sudo apt install apt-transport-https ca-certificates curl software-properties-common
第三步添加Docker的官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
第四步在系统中添加Docker的存储库
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
第五步更新软件包列表并安装Docker
sudo apt update
sudo apt install docker-ce
第六步启动Docker服务并将其设置为开机启动
sudo systemctl start docker
sudo systemctl enable docker
安装完Docker接下来我们来还需要执行两个步骤来安装 Docker Compose。首先我们要下载Docker Compose可执行文件代码如下
sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
第二步为Docker Compose可执行文件设置执行权限
sudo chmod +x /usr/local/bin/docker-compose
现在Docker和Docker Compose都安好了。为了确认安装是否成功可以使用后面的命令验证
docker --version
docker-compose --version
接下来,我们就可以启动大数据项目了。首先需要使用命令克隆仓库:
git clone https://github.com/spancer/bigdata-docker-compose.git
然后,我们打开项目目录运行下面的命令:
docker-compose up -d
等待项目启动成功我们就可以使用Hadoop生态的各个组件做更多的探索实验啦。
总结
这节课我们学到了开源大数据生态中的三个重要角色它们是Hadoop大数据平台的基础负责了文件存储、资源管理和分布式协调。
HDFS是Hadoop的分布式文件系统它可以将海量数据分布在集群中的多个节点上进行存储采用多副本机制保证数据安全。
YARN是Hadoop的资源管理系统负责调度任务并管理资源。
ZooKeeper是分布式协调服务提供分布式锁、队列、通知等功能常用于分布式系统的配置管理、分布式协调和集群管理。
了解了这些组件的原理之后我们还一起分析了一道综合应用题帮你加深理解。最后动手环节也必不可少利用Docker可以帮我们快速搭建一套大数据开发环境课后你有兴趣的话也推荐自己上手试试看。
欢迎你在留言区和我交流讨论,我们下节课见。