1.Hadoop介绍
狭义上Hadoop是Apache软件基金会的一款开源软件,用java语言实现,允许用户使用简单地编程模型实现跨机器集群对海量数据进行分布式计算处理
Hadoop核心组件:
Hadoop HDFS(分布式文件存储系统):解决海量数据存储
Hadoop YARN(集群资源管理和任务调度框架):解决资源任务调度
Hadoop MapReduce(分布式计算框架):解决海量数据计算
广义上Hadoop是指微软Hadoop打造的大数据生态圈
注意:谷歌三篇论文
1.基于GFS
2.分布式计算框架MR
3.谷歌结构化数据存储系统
![](https://i-blog.csdnimg.cn/blog_migrate/5a4a836b39c09d217dc6136992d9bc52.png)
2.Hadoop特性优点
特点:
扩容性
成本低
效率高
可靠性
![](https://i-blog.csdnimg.cn/blog_migrate/99dc27e921f672be3be866134c495275.png)
还有通用性,简单等特性……
Hadoop版本更迭
1.0-2.0
![](https://i-blog.csdnimg.cn/blog_migrate/f0371c6fe282232b546af0e1db5d828d.png)
2.0-3.0
![](https://i-blog.csdnimg.cn/blog_migrate/0a1ac1112358f9232b017a1c51c93a6d.png)
Hadoop集群整体概述
Hadoop包括两个集群:HDFS集群和YARN集群.
两个集群逻辑上分离,通常物理上在一起.
两个集群都是标准的主从架构集群.
![](https://i-blog.csdnimg.cn/blog_migrate/0f6fbf98165847ab2bc2479d4cd21fb9.png)
思考:
1.什么是逻辑上分离物理上连接在一起?
![](https://i-blog.csdnimg.cn/blog_migrate/bb4f9fc575dc5df8216f6fbe29733bf6.png)
逻辑上分离:
HDFS集群和yarn集群各自带领的节点不同(大哥,小弟,秘书都不互相占用)(逻辑上分离)
物理上在一起:
对于一台机器来说(以node1为例),其中内存中既有HDFS的节点的组成部分,又有yarn节点组成部分,所以HDFS和yarn物理上在一起.
2.为什么没有MapReduce集群?有这样的说法吗?
没有这样的说法,MapReduce是计算框架,代码层面的组件,没有集群一说
3.Hadoop集群初体验
利用Hadoop分布式文件储存系统进行MapReduce操作完成词频统计
问题:
1.执行MR的时候,为什么先请求yarn?
2.MR看上去是两个阶段,先Map在Reduce?
3.处理小数据的时候MapReduce速度快吗?
4.HDFS分布式文件系统基础
文件系统与分布式文件系统
文件系统是一种存储和组织数据的方法,实现了数据的存储、分级组织、访问和获取等操作,使得用户对文件访问和查找变得更容易
文件系统使用树形目录的抽象逻辑概念代替了硬盘等物理设备使用数据块的概念,用户不必关心数据底层存在硬盘哪里,只需要记住这个文件的所属目录和文件名即可
文件系统通常使用硬盘和光盘这样的存储设备,并维护文件在设备中的物理位置。
![](https://i-blog.csdnimg.cn/blog_migrate/ec58f4a1eed1bc5befee703bab76e8e0.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f49fcfb2e7899780b2402c4467b14cc3.png)
分布式存储系统应该有哪些核心属性
1.分布式存储(无限拓展)
解决的问题:
数据量大,单机存储遇到瓶颈
解决方案:
单机纵向扩展:磁盘不够加磁盘,有上限瓶颈限制
多机横向拓展:机器不够加机器,理论上无限拓展
2.元数据记录(快速定位文件)
解决的问题:文件分布在不同机器上不利于寻找
解决方案:
元数据记录下文件机器存储位置信息,快速定位文件位置
![](https://i-blog.csdnimg.cn/blog_migrate/504806ad9a6cd72ab0e26618b643eaec.png)
3.分块存储(并行操作提高效率)
解决的问题:
文件过大导致单机存不下,上传下载效率低下
解决方案:
文件分块存储在不同机器,针对块并行(同时操作)操作提高效率
![](https://i-blog.csdnimg.cn/blog_migrate/54767a1c81adf84ca0771ce897a225a8.png)
4.副本机制(数据安全)
解决的问题:
硬件故障难以避免,数据容易丢失
解决方案:
不同机器设置备份,冗余存储,保障数据安全
![](https://i-blog.csdnimg.cn/blog_migrate/4d9f63bc332079b4e502e9f156363324.png)
HDFS简介
Hadoop分布式文件系统(横跨多机器)
Hadoop是基石
HDFS主要是解决大数据如何存储问题的。分布式意味着是HDFS是横跨在多台计算机上的存储系统。
HDFS是一种能够在普通硬件上运行的分布式文件系统,它是高度容错的,适应于具有大数据集的应用程序,它非常适于存储大型数据(比如TB和PB)。
HDFS使用多台计算机存储文件,并且提供统一的访问接口,像是访问一个普通文件系统一样使用分布式文件系统。
![](https://i-blog.csdnimg.cn/blog_migrate/bede34087d14cf5c62986feb674576ae.png)
HDFS起源发展、设计目标
起源发展:百度百科
设计目标:
![](https://i-blog.csdnimg.cn/blog_migrate/2d24024e4302eb401312b5194af1ae53.png)
特别的,对于访问是HDFS的策划更倾向于一次写入多次读取的方式。
![](https://i-blog.csdnimg.cn/blog_migrate/3b7d4b386bdc262d2ec754feea459430.png)
HDFS应用场景
HDFS重要特性
主从架构
master/slave结构
一般一个HDFS集群是有一个Namenode和一定数目的Datanode组成
两种节点各司其职沟通协调完成分布式的文件存储服务
分块存储
物理上分块存储,默认128M/块
可以在hdfs-default.xml中设置blocksize
副本机制
保证数据安全,默认是3个副本(1+2)
元数据记录
matedata:记录数据的数据称之为元数据
元数据分类
文件自身属性信息
文件名称、权限、修改时间、文件大小、复制因子、数据块大小
文件块位置映射信息
记录文件块和DataNode之间的映射信息,即哪个块位于哪个节点上
抽象统一的目录树结构
namespace:命名空间具有层次形的文件组织结构
目录结构只有文件、目录
![](https://i-blog.csdnimg.cn/blog_migrate/57551ee0e0f5f23e7085e6fc02097d79.png)
5.shell命令行
命令行界面(command-line interface,缩写CLI)是指用户通过键盘输入指令,计算机结束到指令后,予以执行的一种人机交互方式。
Hadoop提供了文件系统shell命令行客户端hadoop fs [generic options]
简写hdfs dfs 例如:hdfs dfs -ls /
shell常用命令行
hdfs dfs -mkdir [ - p ]<path>…(递归的形式创建目录)
hdfs dfs -ls [-h] [-R] 目录(查看目录下内容 -h可以看文件大小,-R递归看下面全部内容)
hdfs dfs -put [-f][-p] 本地路径 HDFS目标路径(-f覆盖目标文件--》存在的情况下,-p保留访问和修改时间,所有权和权限)
hdfs dfs -get[-f][-p] HDFS目录 本地目录
hdfs dfs -cp [-f]拷贝
hdfs dfs -appendToFile 本地路径下文件们 HDFS路径下文件(在HDFS文件下追加写多个或者单个文件的内容)
hdfs dfs -mv 路径1 路径2 (剪切)
6.HDFS集群角色与职责
NameNode:
功能:
是Hadoop分布式文件系统的核心,架构中的主角色
维护和管理文件系统元数据,包括名称空间目录树结构、文件和块的位置信息、访问权限等信息
是访问HDFS的唯一入口
![](https://i-blog.csdnimg.cn/blog_migrate/2db160e3019e98c5c38e78a9593383bf.png)
实现方式:
NameNode内部通过内存和磁盘文件两种方式管理元数据
其中磁盘上的元数据文件包括Fsimage内存元数据镜像文件和deits log编辑日志
职责:
![](https://i-blog.csdnimg.cn/blog_migrate/692b002547ea9ba6f081a3a540fa48ee.png)
DataNode:
功能:
HDFS的从角色,负责具体的数据块存储
DataNode的数量决定了HDFS集群的整体数据存储能力
职责:
![](https://i-blog.csdnimg.cn/blog_migrate/bc7a9be1d9e3addb126d3094c65f1831.png)
secondarynamenode:
功能:
充当NAMENode的辅助节点,但是不能替代NameNode。(并不是备份节点!!!不能代替NameNode)
主要是帮助主角色进行元数据的合并动作,类似于做着秘书一样的功能
![](https://i-blog.csdnimg.cn/blog_migrate/b3c87ef5aed15df535b155b91dee8992.png)
每隔一段时间进行辅助数据合并
7.HDFS写数据流程与读数据流程
上传文件、写入数据知识点
核心概念-->Pipeline管道
Pipeline,是HDFS在上传文件写数据过程中采用的一种数据传输方式
客户端将数据块写入第一个数据节点,第一个数据节点保存数据之后再将块复制到第二个数据节点,后者保存后将其复制到第三个数据节点
![](https://i-blog.csdnimg.cn/blog_migrate/3316bc4f7aab214cfdbfd4b9121e473c.png)
为什么采用线性传输的而不采用同时兵分三路的拓扑式传输?
![](https://i-blog.csdnimg.cn/blog_migrate/b628493f1bbbae7f6e30adfa16a4ffb1.png)
核心概念--ACK应答响应(超时重传)
![](https://i-blog.csdnimg.cn/blog_migrate/10e91b0b2b0bc874f54ac68de1615584.png)
核心概念--默认3副本存储策略(不把鸡蛋放在一个篮子里)
![](https://i-blog.csdnimg.cn/blog_migrate/e04bcc693c613428f75bfa0bab73f515.png)
写入文件步骤详解
![](https://i-blog.csdnimg.cn/blog_migrate/a357a9f6fe1d5bc924fb6ca7e3954792.png)
![](https://i-blog.csdnimg.cn/blog_migrate/9846f6414c47c5fce8fca154fad44aab.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1dce8ff6ebd5470b1ca1de99ca9ebeed.png)
![](https://i-blog.csdnimg.cn/blog_migrate/16f2f9ddb30f9330eb9b0bb114034f35.png)
因为namenode已经知道文件是由哪些块组成的(DataStream请求分配数据块),
因此仅需等待最小复制块即可成功返回最小复制是由参数dfs.namenode.replication.min指定,默认是1
![](https://i-blog.csdnimg.cn/blog_migrate/d55f66b19c188994a95fbe23c5f57790.png)
读取文件方式:
![](https://i-blog.csdnimg.cn/blog_migrate/2d14c7186699ea309014012c15e5b77d.png)
步骤:
1.客户端发送请求,连接namenode
2.namenode判断是否有权限、是否有此文件等,全部通过则返回block块的地址
3.客户端接收完毕block块,列表去对应datanode节点并行连接读取block块数据
4.查看是否不缺少block块,不缺啥进入第五步,缺少再进行请求,进行1-3步操作
5.按照block块排序拼接,并返回一个最终文件