Hadoop
Hadoop是用java语言编写的,在分布式服务器集群上存储海量数据并运行分布式分析应用的开源框架,其核心部分是HDFS、MapReduce与Yarn
HDFS是分布式文件系统,引入存放文件元数据的服务器NameNode和实际存放数据的服务器DataNode,对数据进行分布式存储和读取
MapReduce是分布式计算框架,MapRuduce的核心思想是把计算任务分配给集群内的服务器执行,通过对计算任务的拆分(Map计算/Reduce计算)再根据任务调度器(JobTracher)对任务进行分布式计算。
Yarn是分布式资源框架,管理整个集群的资源(内存、CPU核数)分配调度集群的资源
把HDFS理解为一个分布式的,有冗余备份的,可以动态扩展的用来存储大规模数据的大硬盘
把MapRuduce理解成一个计算引擎,按照MapReduce的规则编写Map计算/Reduce计算的程序,可以完成计算任务。
怎么使用Hadoop
①Hadoop集群的搭建
无论是在windows上装几台虚拟机玩Hadoop,还是真实的服务器来玩,说简单点就是把Hadoop的安装包放在每一台服务器上,改改配置,启动就完成了Hadoop集群的搭建。
②上传文件到Hadoop集群,实现文件存储
Hadoop集群搭建好以后,可以通过web页面查看集群的情况,还可以通过Hadoop命令来上传文件到hdfs集群,通过Hadoop命令在hdfs集群上建立目录,通过Hadoop命令删除集群上的文件等等。
③编写map/reduce程序,完成计算任务
通过集成开发工具(例如eclipse)导入Hadoop相关的jar包,编写map/reduce程序,将程序打成jar包扔在集群上执行,运行后出计算结果。
Hadoop 部署安装
- 创建一个用于管理hadood的用户(可新建或者使用已有的用户)
- 安装并配置ssh免密码登陆
- 安装Java环境
- 下载hadoop并配置环境变量
- 配置相关的Hadoop配置
- 验证hadoop安装并启动
Hadoop 架构
HDFS读取流程:
(1)客户端通过Distributed FileSystem模块向NameNode请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在。
(2)NameNode返回是否可以上传。
(3)客户端请求第一个 Block上传到哪几个DataNode服务器上。
(4)NameNode返回3个DataNode节点,分别为dn1、dn2、dn3。
(5)客户端通过FSDataOutputStream模块请求dn1上传数据,dn1收到请求会继续调用dn2,然后dn2调用dn3,将这个通信管道建立完成。
(6)dn1、dn2、dn3逐级应答客户端。
(7)客户端开始往dn1上传第一个Block(先从磁盘读取数据放到一个本地内存缓存),以Packet为单位,dn1收到一个Packet就会传给dn2,dn2传给dn3;dn1每传一个packet会放入一个应答队列等待应答。
(8)当一个Block传输完成之后,客户端再次请求NameNode上传第二个Block的服务器。(重复执行3-7步)。
MapReduce工作流程:
Yarn调度相关:
Yarn详细调度流程:
1.client向yarn提交job,首先找ResourceManager分配资源,
2.ResourceManager开启一个Container,在Container中运行一个Application manager
3.Application manager找一台nodemanager启动Application master,计算任务所需的计算
4.Application master向Application manager(Yarn)申请运行任务所需的资源
5.Resource scheduler将资源封装发给Application master
6.Application master将获取到的资源分配给各个nodemanager
7.各个nodemanager得到任务和资源开始执行map task
8.map task执行结束后,开始执行reduce task
9.map task和 reduce task将执行结果反馈给Application master
10.Application master将任务执行的结果反馈pplication manager。
参考资料:
Hadoop: Setting up a Single Node Cluster.
Hadoop Cluster Setup
HDFS简介和部分架构图
Hadoop单机版安装
HDFS简介与部署
HDFS 的Java API操作
MapReduce 基础之:图文讲解 MapReduce 工作原理
YARN 详解 --- ResourceManager, NodeManager以及ApplicationMaster