目录
大数据和分布式的基础概念
从硬件和软件的角度思考实现大数据的需要
硬件角度:(1)大量机器的集群构成数据中心 (2)使用高速互联网络对大量机器进行连接以确保数据传递 (3)综合考量数据中心的散热问题、能耗问题,以及各方面成本 (4)集群中硬件发生故障的概率很高,如何确保可靠性 (5)单一架构的机器难以胜任各种计算类型,考虑异构计算
软件角度:(1)分而治之,使用分片存储策略和分布式算法对大数据进行存储与处理 (2)考虑存储与计算的容错性,以使得故障发生时造成的损失最小化 (3)算法设计方面要尽可能减少节点间通信(因为这很耗时)
分布式
将任务分配到许多节点上去,借助网络并行计算。包括分布式存储和分布式计算。
谷歌“三驾马车”
GFS(分布式文件系统)、BigTable(管理结构化数据的分布式存储系统)、MapReduce(处理和生成大数据集的编程模型)
Hadoop
Hadoop概念
Hadoop是一系列开源软件的集合,是为大数据处理而设计的框架。
HDFS
概念:是Hadoop下的一个分布式的文件系统。
HDFS的架构:HDFS使用master/slave架构,包含一个NameNode和多个DataNode。目录结构、命名空间、分块的存储位置由NameNode维护;文件的各个实际的块由DataNode存储。
特点:(1)分块存储,每个块都有多个副本,有较高容错性。(2)一个文件一旦创建、写入和关闭就不需要更改,除了追加和截断,这样简化了一致性问题且提高了吞吐。
YARN
概念:是Hadoop下用来调度计算任务和计算资源的框架。
架构:(1)master/slave架构,master是ResourceManager,slave是NodeManager;(2)ResourceManager--负责集群中全部应用程序的资源调度,包含Scheduler和ApplicationManager两个组件;(3)NodeManager--负责管理容器,监控其使用情况,而ApplicationMaster则负责管理一个Application,向ResourceManager汇报资源状态和申请资源。
MapReduce
概念:是一个用于编写并行大数据处理程序,并使其在集群上可靠运行的编程框架。
过程:输入为<k,v>对,输出也为<k,v>对;(1)在各机器上启动代码副本,执行map操作,读入分块并输出中间值 (2)对中间值按key进行分组、排序(3) 在各机器(reduce worker)上启动代码副本,执行reduce操作,读入各自key对应的中间值并生成结果
推测执行:在集群上分布式执行任务时,总会有一些节点跑得比其他节点慢很多 Hadoop默认情况下不会傻傻等着慢节点运行完,如果发现有的任务执行比平均速度慢,它会尝试开启一个与该任务相同的“推测任务” 原任务和推测任务谁先跑完就用谁,另一个会被终止。