之前听过hadoop,用过hadoop,发现还没有系统的了解一下。借着这篇文章来讲一下吧~
大数据时代有两个难题:一是数据存储,二是数据计算。单一主机即没有足够空间也没有足够算力。于是催生出分布式的思想,将大数据拆分成小数据分别进行处理。Hadoop就是分布式的结构,可以帮使用者进行大数据相关的操作。这篇文章希望解释清楚以下几个问题:
1.什么是hadoop?/hadoop的作用和应用场景
2.hadoop的组成结构
3.学习hadoop的重点
一、什么是hadoop?
Hadoop是存储海量数据和分析海量数据的工具,整体是分布式结构,不需要计算存储一体的大型计算机 多个小型计算机之间通过相互通信协同完成任务。同时hadoop也是一个分布式系统基础架构和对大量数据进行分布式处理的软件框架,可以让用户开发和运行处理海量数据的应用程序。hadoop的logo如下图,是一只可爱的小象:
图源:https://zhuanlan.zhihu.com/p/400939259
Hadoop有如下的三大优势:
1)支持并行计算,可以完成更快的数据处理
2)能够存储大量数据,并确保数据容错
3)集群资源管理
有一个问题了:hadoop的三大优势是如何体现的呢?这就与Hadoop的三大组成结构有关了。
二、Hadoop的组成结构
Hadoop总共有三大组成结构:HDFS、MapReduce、Yarn(好像还有个Common,但是不是很重要,就总结为三大结构啦~)。下面来介绍下这三大结构吧:
1.HDFS(Hadoop Distributed File System):
HDFS即分布式文件系统,是分布式文件管理系统的其中一种,主要解决大量数据的存储问题。它将文件拆分,并提供文件通过网络在多台主机上分享的功能。用多台主机存储数据,解决了大量数据的存储问题。
优点:
1)高容错,副本机制
2)分布式,可存储大量数据。成本低
缺点:
1)分布式访问时延较高
2)不支持文件随机修改(适于写一次,读多次的情况)
HDFS中数据以block为基本单位存储,block的大小为128MB,但具体还是取决于磁盘传输效率
HDFS主要由三部分组成:
1)NameNode:master,管理数据块元数据,和客户端交互,控制副本机制
2)DataNode:实际存储数据,进行数据的读写操作
3)Secondary NameNode:辅助NameNode, 在NameNode损坏时可辅助恢复
Namenode是存储控制、Datanode存放具体的文件。一个namenode会有很多个datanode。HDFS具体的存储流程是客户端、namenode、datanode之间的数据流动。
参考:https://blog.csdn.net/weixin_28707609/article/details/118585137
2.MapReduce
MapReduce是计算框架,会解决大量数据的计算问题,因为在不同主机。MapReduce的计算实际上是并行计算。适合并行计算就要求各节点数据尽量相互独立。
MapReduce从结构上可分成两个部分:mapper, reducer。mapper将复杂任务进行划分,分解为若干个简单任务,reducer对mapper阶段的结果进行汇总。
根据结构,工作流程也可以分为两个部分:mapReduce把输入的数据集切分为独立的数据库,map任务以完全并行的方式进行处理。map 任务的输出进行处理后再给reduce任务进行汇总
在计算时需要进行数据的读写,所以通常MapReduce和HDFS运行在一组相同节点,计算节点和存储节点通常在一起(就近原则)。
参考:https://blog.csdn.net/burpee/article/details/78769161
对于mapreduce的详细工作流程可以看看:https://www.bilibili.com/video/BV12h411t7jB?p=2&spm_id_from=pageDriver&vd_source=7b9f1ca2783a4c39a4d640a31e23457e
3.Yarn
Yarn是资源调度平台,为运算程序提供资源管理。这里的资源大多指硬件资源了,有了Yarn可以让HDFS和mapredeuce更好的工作
Yarn主要有如下四部分构成:
1)资源管理器:整个系统的资源管理和分配。作用是:处理客户端请求、监控节点管理器、监控应用管理、资源分配调度
2)节点管理器:处理并监控节点中的资源使用情况,管理单个节点上的资源。处理来自资源管理器和应用管理器的命令
3)应用管理器:管理当前整体各种应用,为应用程序申请内部资源
4)容器:所有物理资源的集合
参考:https://blog.csdn.net/sileiH/article/details/117962890
三、学习hadoop的重点
hadoop的东西还是比较庞大的,从实践和原理两个角度出发谈谈学习的重点吧:
1.从实践角度,hadoop作为软件框架,开发者可以根据需求进行开发,需要了解重要的组成框架及其各自能够提供的功能,要熟悉常用的命令
2.理论角度出发,要明确hadoop中实现分布式的运行机制原理,整体围绕三大组件的工作模式。例如HDFS如何实现数据读写、MapReduce如何实现大数据的计算,YARN整体操控的原理。特别是三个组件交互的详细过程。
学习资料:
1.https://www.bilibili.com/video/BV12h411t7jB?p=1&vd_source=7b9f1ca2783a4c39a4d640a31e23457e
2.https://www.zhihu.com/question/333417513
因作者水平有限,如果错误之处,请在下方评论区指出,谢谢!