Hadoop历史
Hadoop是基于google的论文产生的 GFS Doug cutting作者 之前在搜索领域有很大成就,luence,netch
大数据行业所有的技术是基于google的GFS,MapReduce,bigtable产生的,可以说,三篇是基石
Hadoop的版本
1.x 几乎被淘汰,mapreduce执行引擎是jobtracker,tasktracker
2.x 主流:引入了yarn资源调度框架,将资源调度和任务调度分来操作
3.x 最近版本,还没有投入使用,mr引入了内存计算
hadoop的三大核心模块
1、分布式存储系统HDFS(Hadoop disdistributed File System)提供了 高可靠性、高扩展性和高吞吐率的数据存储服务
2、分布式计算框架 MapReduce,具有易于编程、高容错性和高扩展性等优点;
3、分布式资源管理框架 YARN(Yet Another Resource Management),负责集群资源的管理和调度。
Hadoop 的生态系统中包含多种技术:比如 Hive、Hbase、Spark 等。
分布式存储系统HDFS
1、存储模型
文件线性切割成块(Block):大文件切分为小文件
偏移量 offset(byte):每一个块的起始位置相对于原始文件的字节索引
Block 分散存储在集群节点中,单一文件 Block 大小一致,文件与文件之间 Block 大小可以不一致,Block 可以设置副本数,副本分散在不同节点中,副本数不要超过节点数量,文件上传可以设置 Block 大小和副本数,已上传的文件 Block 副本数可以调整,大小不变
只支持一次写入多次读取(修改是泛洪操作,集群开销很大,所有不允许在块中增删改操作),同一时刻只有一个写入者
可以 append 追加数据(加块,单点操作)
2、架构模型
概念:文件元数据 MetaData,文件数据
元数据:理解为文件的属性,比如权限、修改日期,文件名等数据本身:理解为文件中的内容
NameNode 节点(主)保存文件元数据:单节点 posix
DataNode 节点(从)保存文件Block 数据:多节点
DataNode 与 NameNode 保持心跳,提交 Block 列表
HdfsClient 与 NameNode 交互元数据信息
HdfsClient 与 DataNode 交互文件 Block 数据
hdfs:hdfs本质上就是存储数据,必须要以物理介质为基础,
是搭建在多台廉价的物理设施上,通过分布式的概念,将数据管理起来
hdfs分为数据和元数据
元数据指的是hdfs存储的文件的大小,以及分布在哪些block上
副本放置策略:以分布式的方式保存在多个datanode节点上,默认有副本策略,3个副本
1、本地
2、同一个机架的节点
3、另一个机架上的节点
hdfs的读写流程
1、写数据
客户端切分文件Block,按Block线性和NN获取DN列表(副本数),验证DN列表后以更小的单位流式传输数据各节点,两两通信确定可用
Block传输结束后:DN向NN汇报Block信息、DN向Client汇报完成、Client向NN汇报完成,获取下一个Block存放的DN列表最终Client汇报完成,NN会在写流程更新文件状态
2、读数据
客户端和NN获取一部分Block副本位置列表,线性和DN获取Block,最终合并为一个文件,在Block副本列表中按距离择优选取
hdfs元数据的合并过程
注意:
块的大小默认是128M,可以调整
搭建好集群之后可以通过50070端口去浏览器访问
当启动某一台namenode出问题的时候,查看日志,一般是因为元数据不一致造成的,不需要修改配置文件,直接重新格式化namenode即可
hdfs中的数据只能追加,不能修改
存储模型:字节
文件线性切割成块(Block):偏移量 offset (byte)
Block分散存储在集群节点中
单一文件Block大小一致,文件与文件可以不一致
Block可以设置副本数,副本分散在不同节点中
副本数不要超过节点数量
承担计算
文件上传可以设置Block大小和副本数
已上传的文件Block副本数可以调整,大小不变
只支持一次写入多次读取,同一时刻只有一个写入者
可以append追加数据
架构模型
文件元数据MetaData,文件数据
元数据
数据本身
(主)NameNode节点保存文件元数据:单节点
(从)DataNode节点保存文件Block数据:多节点
DataNode与NameNode保持心跳,提交Block列表
HdfsClient与NameNode交互元数据信息
HdfsClient与DataNode交互文件Block数据
图解析
架构图
hdfs设计思想
优点
高容错性
数据自动保存多个副本
副本丢失后,自动恢复
适合批处理
移动计算而非数据
数据位置暴露给计算框架(Block偏移量)
适合大数据处理
GB 、TB 、甚至PB 级数据
百万规模以上的文件数量
10K+ 节点
可构建在廉价机器上
通过多副本提高可靠性
提供了容错和恢复 机制
缺点
低延迟数据访问
比如毫秒级
低延迟与高吞吐率
小文件存取
占用NameNode 大量内存
寻道时间超过读取时间
并发写入、文件随机修改
一个文件只能有一个写者
仅支持append
权限
HDFS文件权限 POSIX
HDFS的权限目的:阻止好人错错事,而不是阻止坏人做坏事。
HDFS相信,你告诉我你是谁,我就认为你是谁。
节点服务
namenode
基于内存存储 :不会和磁盘发生交换
只存在内存中
持久化
功能
管理数据
接受客户端的读写服务
收集DataNode汇报的Block列表信息
保存metadata信息包括
文件owership和permissions
文件大小,时间
(Block列表:Block偏移量),位置信息
Block每副本位置(由DataNode上报)
持久化
NameNode的metadate信息在启动后会加载到内存
metadata存储到磁盘文件名为”fsimage”
Block的位置信息不会保存到fsimage
edits记录对metadata的操作日志
在NameNode重启的时候NameNode会合并fsimage和edits
block:偏移量,因为block不可以调整大小,hdfs,不支持修改文件
偏移量不会改变
journalnode
管理存储元数据
datanode
存储数据
本地磁盘目录存储数据(Block),文件形式
同时存储Block的元数据信息文件
副本数,调整,(备份,高可用,容错/可以调整很多个,为了计算向数据移动)
执行过程
启动DN时会向NN汇报block信息
通过向NN发送心跳保持与其联系(3秒一次),
如果NN 10分钟没有收到DN的心跳,
则认为其已经lost,并copy其上的block到其它DN
zkfc
保证高可用,当一台namenode宕机之后,另一台自动切换
resourmanager
资源管理器
nodemanager
具体执行task的节点
secondNamenode
用来做元数据的合并
它的主要工作是帮助NN合并edits log,减少NN启动时间。
SNN执行合并时机
根据配置文件设置的时间间隔fs.checkpoint.period 默认3600秒
根据配置文件设置edits log大小 fs.checkpoint.size
规定edits文件的最大值默认是64MB
合并流程图解
hdfs集群搭建
单节点
伪分布式
完全分布式
联邦形式
HA的完全分布式
1、准备四台机器,网络通信,ssh免秘钥,时间同步,hosts,jdk的安装,zk安装
使用ntp同步时间
yum install ntp –y
chkconfig ntpd on
service ntpd start
2、解压hadoop安装包(编译之后的64位版本)
3、修改配置文件
core-site.xml
hdfs-site.xml
yarn-site.xml
mapred-site.xml
hadoop-env.sh
mapred-env.sh
yarn-env.sh
的JAVA_HOME配置
4、启动zookeeper
5、先启动journalnode
6、在启动一台namenode,进行格式化操作hdfs -format namenode
7、同步元数据到另一台namenode,拷贝dfs文件下的目录到另一台,hadoop -bootstranpStandBy namenode
8、启动另一台namenode
9、在任意一台执行hadoop -zkfc -format
10、stop-dfs.sh
11、start-all.sh
理论
主备NameNode
解决单点故障(属性,位置)
主NameNode对外提供服务,备NameNode同步主NameNode元数据,以待切换
所有DataNode同时向两个NameNode汇报数据块信息(位置)
JNN:集群(属性)
standby:备,完成了edits.log文件的合并产生新的image,推送回ANN
两种切换选择
手动切换:通过命令实现主备之间的切换,可以用HDFS升级等场合
自动切换:基于Zookeeper实现
基于Zookeeper自动切换方案
ZooKeeper Failover Controller:监控NameNode健康状态,
并向Zookeeper注册NameNode
NameNode挂掉后,ZKFC为NameNode竞争锁,获得ZKFC 锁的NameNode变为active