赞
踩
大数据存储的问题
HDFS集群包括,NameNode和DataNode以及Secondary Namenode。
NameNode负责管理整个文件系统的元数据
DataNode 负责管理用户的文件数据块
Secondary NameNode用来监控HDFS状态的辅助后台程序
HDFS的特性
首先,它是一个文件系统,用于存储文件,通过统一的命名空间目录树来定位文件;
名字空间(NameSpace)
其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。
NameNode元数据管理
DataNode数据存储
拥有副本机制,容错性高。
适合一次写入,多次读出,且不支持文件的修改
安全模式是HDFS所处的一种特殊状态
处在安全模式中,文件系统只能被读取,而无法进行增删改的操作
一般在namenode主节点启动时,hdfs会进入安全模式
或者,查看一下datanode是否没有启动成功
直接执行命令退出安全模式:hadoop dfsadmin -safemode leave
(1)-help:输出这个命令参数
(2)-ls: 显示目录信息
(3)-mkdir:在hdfs上创建目录
(4)-moveFromLocal从本地剪切粘贴到hdfs
(5)-moveToLocal:从hdfs剪切粘贴到本地
(6)–appendToFile :追加一个文件到已经存在的文件末尾
(7)-cat :显示文件内容
(8)-tail:显示一个文件的末尾
(9)-text:以字符形式打印一个文件的内容
(10)-chgrp 、-chmod、-chown:linux文件系统中的用法一样,修改文件所属权限
(11)-copyFromLocal:从本地文件系统中拷贝文件到hdfs路径去
(12)-copyToLocal:从hdfs拷贝到本地
(13)-cp :从hdfs的一个路径拷贝到hdfs的另一个路径
(14)-mv:在hdfs目录中移动文件
(15)-get:等同于copyToLocal,就是从hdfs下载文件到本地
(16)-getmerge :
(17)-put:等同于copyFromLocal
(18)-rm:删除文件或文件夹
(19)-rmdir:删除空目录
(20)-df :统计文件系统的可用空间信息
(21)-du统计文件夹的大小信息
(22)-count:统计一个指定目录下的文件节点数量
(23)-setrep:设置hdfs中文件的副本数量
(24) - expunge :清空hdfs垃圾桶
1)client发起文件上传请求,通过RPC与namenode建立通讯
2)client请求namenode第一个block该传输到哪些datanode服务器上
3)namenode根据就近原则机制、心跳活跃机制和磁盘空闲情况
4)client请求3台DataNode中的一台A上传数据(本质上是一个RPC调用,建立pipeline),A收到请求会继续调用B,然后B调用C,将整个pipeline建立完成,后逐级返回client;
5)client开始往A上传第一个block(先从磁盘读取数据放到一个本地内存缓存)
6)数据被分割成一个个packet数据包在pipeline上依次传输
7)当一个block传输完成之后,client再次请求NameNode上传第二个block到服务器。
1)client发起文件读取请求,通过RPC与namenode建立通讯
2)NameNode会视情况返回文件的部分或者全部block列表
3)这些dn地址会根据就近原则和心跳机制进行排序,使用排序靠前的dn进行数据的读取
4)如果client本身就是datanode,那么将从本地直接获取数据(短路读取特性);
5)底层上本质是建立 Socket Stream(FSDataInputStream)
6)读取完一个 block 都会进行 checksum 验证
7)read 方法是并行的读取 block 信息,不是一块一块的读取;
8)最终读取来所有的 block 会合并成一个完整的最终文件。
hdfs的文件权限机制与linux系统的文件权限机制类似
r:read w:write x:execute 权限x对于文件表示忽略
对于文件夹表示是否有权限访问其内容
HDFS文件权限的目的,防止好人做错事,而不是阻止坏人做坏事。HDFS相信你告诉我你是谁,你就是谁
低版本Hadoop副本节点选择
Hadoop2.7.2副本节点选择
1)第一阶段:namenode启动
(1)第一次启动namenode格式化后
(2)客户端对元数据进行增删改的请求
(3)namenode记录操作日志,更新滚动日志。
(4)namenode在内存中对数据进行增删改查
2)第二阶段:Secondary NameNode工作
(1)Secondary NameNode询问namenode是否需要checkpoint。
(2)Secondary NameNode请求执行checkpoint。
(3)namenode滚动正在写的edits日志
(4)将滚动前的编辑日志和镜像文件拷贝到Secondary NameNode
(5)Secondary NameNode加载编辑日志和镜像文件到内存,并合并。
(6)生成新的镜像文件fsimage.chkpoint
(7)拷贝fsimage.chkpoint到namenode
(8)namenode将fsimage.chkpoint重新命名成fsimage
1)节点上线操作:
当要新上线数据节点的时候,需要把数据节点的名字追加在 dfs.hosts 文件中
(1)关闭新增节点的防火墙
(2)在 NameNode 节点的 hosts 文件中加入新增数据节点的 hostname
(3)在每个新增数据节点的 hosts 文件中加入 NameNode 的 hostname
(4)在 NameNode 节点上增加新增节点的 SSH 免密码登录的操作
(5)在 NameNode 节点上的 dfs.hosts 中追加上新增节点的 hostname,
(6)在其他节点上执行刷新操作:hdfs dfsadmin -refreshNodes
(7)在 NameNode 节点上,更改 slaves 文件
(8)启动 DataNode 节点
(9)查看 NameNode 的监控页面看是否有新增加的节点
2)节点下线操作:
(1)修改/conf/hdfs-site.xml 文件
(2)确定需要下线的机器,dfs.osts.exclude 文件中配置好需要下架的机器
(3)配置完成之后进行配置的刷新操作./bin/hadoop dfsadmin -refreshNodes,
(4)当执行三的命令完成之后,需要下架的机器就可以关闭了
(5)机器下线完毕,将他们从excludes 文件中移除。
FSImage镜像文件与edits编辑日志文件,用于保存所有数据的元数据信息
fsimage:是namenode中关于元数据的镜像,一般称为检查点。
fsimage与edits的合并时机取决于两个参数
1)一个数据块在datanode上以文件形式存储在磁盘上,包括两个文件
2)DataNode启动后向namenode注册
3)心跳是每3秒一次
4)集群运行中可以安全加入和退出一些机器
NameNode整个内存结构大致可以分成四大部分:
Namespace
BlockManager
NetworkTopology
其它
LeaseManager:
CacheManager:
SnapshotManager:
DelegationTokenSecretManager:管理HDFS的安全访问;
另外还有临时数据信息、统计信息metrics等等。
NameNode常驻内存主要被Namespace和BlockManager使用,二者使用占比分别接近50%。其它部分内存开销较小且相对固定,与Namespace和BlockManager相比基本可以忽略。
HA(High Available), 高可用,是保证业务连续性的有效解决方案
通过ZKFailoverController对NN进行监控
1)健康监测:
2)会话管理:
3)当宕机的NN新启动时,它会再次注册zookeper,发现已经有znode锁了,便会自动变为Standby状态,如此往复循环,保证高可靠,需要注意,目前仅仅支持最多配置2个NN。
4)master选举:如上所述,通过在zookeeper中维持一个短暂类型的znode,来实现抢占式的锁机制,从而判断那个NameNode为Active状态
当活动节点出现问题,导致正在运行的业务(任务)不能正常运行时,ZKFailoverController会诊测到,删除掉znode,让备用节点得到这把锁,并立即接续活动节点来执行业务。从而实现业务的不中断或短暂中断。
HA模式下,会将FailoverController部署在每个NameNode的节点上,作为一个单独的进程用来监视NN的健康状态。
FailoverController主要包括三个组件:
HealthMonitor:
ActiveStandbyElector:
ZKFailoverController:
上述三个组件都在跑在一个JVM中,这个JVM与NN的JVM在同一个机器上。但是两个独立的进程。一个典型的HA集群,有两个NN组成,每个NN都有自己的ZKFC进程。
1)HealthMonitor初始化完成后通过内部线程调用NameNode的RPC接口对其进行健康检查
2)如果检查到NameNode状态异常
3)如果ZKFailoverController发现集群需要进行主备选举
4)ActiveStanbyElector在完成主备切换后
单NameNode的架构使得HDFS在集群扩展性和性能上都有潜在的问题
当集群大到一定程度后,NameNode进程使用的内存可能会达到上百G,NameNode成为了性能的瓶颈。
Federation中文意思为联邦,联盟,是NameNode的Federation,也就是会有多个NameNode。
HDFS Federation意味着在集群中将会有多个namenode/namespace
这样的方式有什么好处呢?
HDFS Federation是解决NameNode单点问题的水平横向扩展方案。
之前看别的文章在讲述HDFS Federation的时候直接拿viewFs来讲,个人觉得二者还是有些许的不同的,用一句话概况应该这么说。
因为它们不仅仅是namespace独立,而且真实数据的存放也是独立的,也就是多个完全独立的集群。在这点上我们还是有必要做一下区分,否则让人以为HDFS Federation就是viewFs。
第一点,命名空间的扩展。
第二点,性能的提升.
第三点,资源的隔离。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。