hadoop yarn hdfs 原理和联系

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值