HDFS、YARN、MapReduce原理--读书笔记

hadoop

大数据工程师/hadoop工程师
目的:高效的存储、处理这些海量、多种类、高速流动的数据
hadoop来源google 03~06 年 的三篇论文
hadoop利用分而治之的朴素思想为大数据处理提供了一整套新的解决方案,分布式文件系统HDFS、分布式计算框架MapReduce、NoSQL数据库HBase、数据仓库工具Hive等
hadoop主要组件:HDFS、MapReduce、YARN、Hive、Sqoop、Hbase
hadoop其实是由一系列的软件库组成的框架,这些软件库可称为功能模块,他们各自负责hadoop一部分功能,其中最主要的是Common、HDFS、YARN,HDFS负责数据的存储,YARN负责统一资源管理和调度,Common则提供远程过程调用RPC、序列化机制
Hadoop生态圈:
Hadoop Common 是Hadoop体系最底层的一个模块,为hadoop各子项目提供各种工具,如系统配置工具Configuration、远程过程调用 RPC、序列化机制和日志操作,是其他模块基础
HDFS:高度容错性分布式文件系统
YARN
MapReduce 编程模型 函数式编程(java python C++ php)
Spark 新一代计算框架
HBase 分布式面向列族的数据库
zookeeper 解决分布式一致性问题
Hive/pig/impala/mahout/flume/sqoop/kafka
基于hadoop做二次开发的公司;Cloudera、Hortonworks、MapR
CDH (cloudera distribution for hadoop)

云计算定义:云计算是一种可以通过网络方便的接入共享资源池,按需获取计算资源(cpu 内存 存储 网络)的服务模型
云计算五大特点:按需提供服务、宽带网络访问、资源池化、高可伸缩性、可量化服务
云计算类型:
IaaS 作为云计算框架最底层,利用虚拟化技术将硬件设备等基础资源封装成服务供用户使用,用户相当于使用裸机
ps:虚拟化产品:VMvare vShpere 、微软的Hyper-V、开源的KVM、开源的Xen Amazon EC2 利用的就是Xen这种技术
PaaS Google App Engine
SaaS
hadoop 作为一个分布式的软件框架,拥有云计算PaaS的所有特点,是云计算的重要组成部分

hadoop是apache软件基金会的顶级项目
CDH5

Hadoop主要有两部分组成,分布式文件系统HDFS和统一资源管理和调度系统YARN,分布式文件系统主要负责海量数据的存储,而YARN主要是管理集群的计算资源并根据计算框架的需求进行调度

Hadoop HDFS架构:
NameNode(元数据–数据的数据–数据存储在文件系统的位置,存储文件系统元数据,存储文件与数据块映射,并提供文件系统全景图)、SecondaryNameNode(元数据备份,备份namenode数据,并负责镜像与namenode日志数据的更新)、多个DataNode

YARN架构:
ResourceManager:负责集群中所有资源的统一管理和调度
NodeManager:负责管理单个计算节点、容器的生命周期管理、追踪节点健康水平

因此,HDFS集群和YARN集群其实有一些守护进程组成,而所有这些守护进程与运行它们的节点就构成了hadoop

注意:DataNode 和 NodeManager需配对部署在同一个节点,而 NameNode 和 ResourceManager 出于稳定性考虑,商业部署时却不在同一节点

Hadoop安装步骤:
安装运行环境(VM)
修改主机名和用户名
配置静态IP
配置SSH无密码链接
安装JDK
配置Hadoop
格式化HDFS
启动hadoop

hadoop伪分布式安装心得:
需要安装ssh ,namenode 、 secondarynode 、datanode、resourcemanager、nodemanager 虽都部署在同一服务器上,但都是一个个独立的进程,有自己的端口号,相互间通信时需要相互登陆,所以需要ssh

Linux注意文件权限问题

Hive安装使用!!!
HBase安装使用!!!

Linux环境变量修改
/etc/profile 全局环境变量
~/.bash_file 只对当前用户生效
编辑环境变量后需source后生效

Hadoop的基石:HDFS
Hadoop有一个抽象的文件系统,HDFS只是其中的一个实现
Hadoop提供了很多文件系统的接口,用户可以选取合适的URI方案来实现对特定文件系统的交互
例如:
本地文件系统 hadoop dfs -ls file:///
HDFS hadoop dfs -ls hdfs:///
HDFS设计理念:
适合存储超大文件
是和部署在廉价硬件上
一次写入多次读取

短板:
实时数据访问弱,可考虑用HBase
大量小文件:当Hadoop启动时,Namenode会将所有元数据读到内存,以此构建目录树。一般来说,一个HDFS上的文件、目录和数据块的存储信息大约在150B左右,那么可以推算出,如果namenode内存为16GB,大概只能存放480万个文件

HDFS的架构:
一个典型的HDFS集群中,有一个NameNode 一个SecondaryNameNode,至少一个DataNode,所有数据都存在运行DataNode进程的节点的块(block)里
1.块
每个磁盘都有默认的数据块大小,这是磁盘进行数据读写的最小单位,而文件系统也有文件块的概念,如ext2、ext3等。文件系统的块大小只能是磁盘块大小的整数倍,磁盘块大小一般为512B,文件系统块一般为4096B.用户在使用文件系统进行读写的时候,完全不需要知道快的细节,这些对于用户是透明的
HDFS同样也有块的概念,但HDFS的块比一般文件系统大得多,默认为64MB,也可自行设置,配置项为hdfs-site.xml文件中的dfs.block.size项,与单一文件系统相似,HDFS上的文件也被划分成块大小的多个分块
HDFS块之所以设置这么大的原因是为了最小化寻址开销,块设置的足够大,磁盘传输数据的时间就会明显大于寻址时间,从而提升了磁盘传输的效率
dfs.relication.size 块副本数

2.NameNode 和 SecondaryNameNode
NameNode 维护整个文件系统的目录树,以及目录树所有的文件和目录,这些信息以两种文件存储在本地文件 FSImage edit-log
SecondaryNameNode 是用于定期合并文件系统镜像和编辑日志的辅助守护进程
生产环境下 一般将 SecondaryNameNode 单独部署在另一台服务器上
FSImage文件其实是文件系统元数据的一个永久检查点,但并非每一个写操作都会更新入这个文件,因为FSImage是一个大型文件,如果频繁读写,会使系统运行极慢

Secondary 负责合并

HDFS容错
1.心跳机制
在NameNode和DataNode之间维持心跳检测,当因为网络故障或DataNode节点宕机实,立即转储该宕机节点存储的数据块
2.检验文件块的完整性,分隔时记录校验和,从某节点获取块时校验
3.集群负载均衡
4.NameNode 上的FSImage 和 edit.log定期备份到 SecondaryNameNdoe

HDFS中的新特性
NameNode HA(high avaiable)
NameNode HA 其实就是NameNode 的热备,而非像SecondaryNameNode的冷备
NameNode Federation

YARN:统一资源管理和调度平台
YARN脱胎于MRv1,MRv1饱受诟病,缺点:可靠性差、可扩展性差、资源利用率低、无法支持异构计算框架
YARN 接管所有资源管理功能,兼容异构框架
HDFS——>YARN——>(spark、mapreduce…)

统一资源和调度平台范型
1.集中调度器
在高并发作业下容易出现瓶颈
2.双层调度器
3.状态共享调度器

YARN的架构
主从架构
YARN服务有ResourceManager、NodeManager两类进程组成,container是YARN资源表示模型,任何类型的计算类型的作业都可以运行在container中,AplicationMaster就是二级调度器,他也运行在container中
1.ResourceManager相当于双层调度器中的中央调度器,其主要责任是定期汇总各个NodeManager的资源情况,并根据资源情况将资源分配给各个二级调度器(applicationMaster)
假如有多个作业同时竞争资源,ResourceManager会根据优先级权衡分配给多个应用的applicationMaster资源,并不关注资源利用细节
因此对于每个应用,只需ResourceManager进行一次资源分配,大大减轻负荷,增强了扩展性
2.NodeManager 与 ResourceManager、applicationMaster通信,回报资源情况,任务处理情况,管理该节点container
3.AplicationMaster 负责具体应用执行,由ResourceManager分配资源,第一个container即为AplicationMaster,其负责处理应用细节,随着应用开始而开始,结束而结束
4.container 资源分配单位,抽象cpu 内存 硬盘等资源,可执行任何类型计算任务,因此兼容异构框架

YARN 的工作流程:
客户端向ResourceManager提交自己的应用
ResouceManager向NodeManager发送指令,为应用开启的一个container,在container启动AplicationMaster
AplicationerMaster向ResourceManager注册
AplicationMaster采用轮询的方式向ResourceManager的 YARN scheduler领取资源
当 AplicationMaster申领到资源后(其实就是获得了空闲节点的信息),与对应的NodeManager建立通信,请求启动计算任务
NodeManager根据资源量的大小、所需运行环境,在container中启动任务
各个任务向AplicationMaster回报自己的状态和进度
应用程序完成后 AplicationMaster向ResourceManager报告并注销关闭自己

MapReduce
源于google论文
开发简单:MapReduce编程模型,用户不需要考虑进程间通信、套接字编程,只需要满足MapReduce简单逻辑,其他交给MapReduce分布式计算框架去完成
可扩展性强
容错性强
MapReduce运行环境已经成为YARN
MapReduce编程思想:MapReduce操作数据的最小单位是一个键值对
MapReduce核心将数据用键值对表示,利用分而治之的思想,将复杂的问题转化一系列MapReduce作业,利用Hadoop提供的MapReduce计算框架,实现分布式计算
MapReduce作业是用户提交最小的单位,而Map/Reduce任务是节点运行单位,当用户向hadoop提交一个作业,负责改作业的aplicationManager会将作业分解为多个Map/Reduce任务下发各子计算节点执行

MapReduce的局限性
1.MapReduce的执行速度慢,MapReduce的慢主要由于磁盘I/O,MapReduce作业多是数据密集型作业,大量中间结果需要写到磁盘上并通过网络传输,耗去了大量时间
2.不是所有算法都可以借助MapReduce的键值对实现

MapReduce实例(wordcount)分析:
思路:HDFS上文件作为输入,map函数中完成对单词的拆分并输出为中间结果,在reduce函数中完成对每个单词的统计

MapReduce的过程
一个MapReduce作业经历input、map、conbine、reduce、output五个阶段,其中combine并不一定发生,map输出的中间结果被分发到reducer的过程为shuffle(数据混洗)
在shuffle阶段还会发生copy和sort过程
Reduce任务默认在map任务完成5%之后才启动
Map任务概括:首先通过用户指定的InputFormat类中gatsplits和next方法将输入文件切片成键值对作为map函数输入。然后map函数经过处理后输出并中间结果交给指定partitioner,确保中间结果交给指定reducer处理,此时如果用户指定了conbiner,将进行combine操作。最后map函数将中间结果保存在本地
reduce任务概括:将map任务输出的中间结果复制到reduce任务所在节点,带数据复制完成后,再以键排序,将相同的键交给reduce函数处理
五大过程:
input:对于Map任务来说,处理单位为一个inputsplit,inputsplit可以和块等大小,也可以包含多个块,hadoop在进行任务调度时会优先考虑本地数据,如果本节点没有可处理的数据或者还需要处理其他节点的数据,就要通过网络传输,当inputsplit容量大于块的容量,map任务就必须从其它节点读取一部分数据,这样不能实现完全数据本地化,所以应尽量使InputSplit和HDFS块大小相同,以提高map任务的本地计算率
Reduce阶段分为 copy sort reduce (sort)
mapreduce过程从 map阶段的分区 combine 到 shuffle reduce 的sort,一直注意数据的有序性

Hive SQL on Hadoop
常见的count、group by、order by、join等sql操作都可以由mapreduce实现,在某种意义上,Hive可以说是HiveQL到MapReduce作业的映射器
Hive将用户输入的HiveQL脚本转化成一个或多个MapReduce作业在集群中运行
同样地在hadoop生态圈里还有一个pig的组件,它的作用和hive类似,但pig提供的不是sql接口而是一种叫pig latin的语言接口
pig latin 和 hiveQL 都是对mapreduce进行了一种封装,使用户不用直接编写mapreduce程序,所以称它为hadoop的高级语言
hadoop HDFS/yarn——>mapreduce——>hive

你可能感兴趣的:(云计算)