HDFS

HDFS:分布式文件存储

1.HDFS架构
  1. client:
    文件切分。文件上传的时候,client将文件切分成一个个的block,然后进行存储;
    与NameNode交互,获取文件的位置信息;
    与DataNode交互,读取或者写入数据;
    提供命令俩管理和访问HDFS,比如启动或者关闭
  2. NameNode:
    管理HDFS的名称空间;
    管理数据块(block)的映射信息;
    配置副本策略;
    处理客户端读取请求;
  3. DataNode:
    存储实际的数据,存在datanode的磁盘上;
    执行数据块的读写;
    周期性的向NameNode汇报心跳信息
  4. SecondryNameNode:
    辅助NameNode,但是不可顶替;
    合并fsimage和edits,负责数据管理备份
2.HDFS副本机制:
  1. block:数据库
    HDFS最基本的存储单元
    默认大小:128M(2.x)
  2. 作用:避免数据丢失
  3. 默认数:3
  4. 存放机制:
    一个在本地机架节点,一个在同一机架不同节点,一个在不同机架的节点
3.HDFS命令

-ls :列出目录下的所有文件 -R 递归显示
-mkdir :创建目录 -p 递归创建
-moveFromLocal :从本地上传到hdfs(剪切) -moveFromLocal localpath tarpath
-moveToLocal :移动到本地(剪切)
-put :本地上传到hdfs(复制) -put localsrc tarsrc
-get :从hdfs移动到本地(复制) -get tarsrc localsrc
-mv :在hdfs系统上移动文件,不可与local互相移动(剪切)
-rm :删除,默认放在回收站 -r 递归删除
-cp :在hdfs上实现复制 -f 进行覆盖 -p 深度拷贝
-cat :查看文件
-chmod :修改权限 -R 修改整个目录的权限
-chown :修改所属用户和用户组 -R 修改整个目录的用户和用户组
-appendToFile :追加文件 -appendToFile localsrc tarsrc
hdfs dfs -count -q -h dir 查看dir的限额配置
hdfs dfsadmin -setQuota num dir 给dir设置数额限制为num(dir本身也算一个)
hdfs dfsadmin -clrQuota num dir 清除数量限额
hdfs dfsadmin -setSpaceQuota size dir 给dir设置大小限制为size,最小为block*3=384M
hdfs dfsadmin -clrSpaceQuota dir 清除数量大小
hdfs dfsadmin -safemod get 查看安全模式
hdfs dfsadmin -safemod enter 查看安全模式
hdfs dfsadmin -safemod leave 查看安全模式

4.Java实现HDFS文件的读取
  1. 新建maven的project → 设置maven地址:file - setting - Build,… - maven
    导包:导入需要的Hadoop包
  2. 新建Class:src - java - package - Class
  3. 创建文件夹
//1.创建配置文件(hadoop.conf)
Configuration conf = new Configuration();
//2.获取文件系统(hadoop.fs)
 Filesystem fs = Filesystem.get(new URL("hdfs://hadoop100:9000"),conf,user,"root")
//3.调用API操作
fs.mkdir(new Path("")
//4.关闭资源
fs.close()

上传文件: 1 2 4 不变,只需要改变3

fs.copyFromLocalFile(new Path("local path"),new Path("hdfs path"))
5.HDFS写文件过程
  1. client分块:128M为一个block,最后剩余的不够128M的为一个block
  2. client请求上传第一个数据块
  3. nodename检测上传权限与目标路径是否存在
  4. namenode返回一个datanode列表(DN1,DN2,DN3)给client
  5. client与就近的DN之间建立pipeline连接,三个DN之间也建立pipeline连接
  6. client向就近的DN传递数据,传递的单位为packet,大小为64kb;数据会传递到DN1的内存中进行缓存,然后落在磁盘中,同时也往下一个DN中传递
  7. 第三个DN传递成功后往前依次响应写入成功
  8. 第二个block重复以上的动作
    在这里插入图片描述
6.HDFS读文件
  1. client向namenode请求下载文件
  2. 权限检查,文件block列表检查,根据就近原则选出每一个block对应的主机列表
  3. namenode返回block对应的主机列表给client
  4. client和每一个block对应的主机建立pipeline
  5. client开始数据的读取,读取的单位是packet(64kb),每条pipeline可以并行读取
  6. client将读取的block合并为一个完整的文件
    在这里插入图片描述
7.HDFS的元数据管理
  1. fsimage:
    元数据的镜像,存放的是比较完整的元数据信息,一般不一定是最新的数据
  2. edits:
    最近一段时间的操作日志,有最新的元数据的信息
  3. secondarynamenode:
  • secondarynamenode将fsimage、edits复制过来。(触发条件:默认1h,或者64M;参数可以在core-site.xml中修改)
  • 将fsimage和edits合并,产生新的fsimage,清空edits
  • 用新的fsimage替换掉旧的fsimage实现更新
8.HDFS的高可用机制
  1. 原理
    在Hadoop2.X之前,Namenode是HDFS集群中可能发生单点故障的节点,每个HDFS集群只有一个namenode,一旦这个节点不可用,则整个HDFS集群将处于不可用状态。
    HDFS高可用(HA)方案就是为了解决上述问题而产生的,在HA HDFS集群中会同时运行两个Namenode,一个作为活动的Namenode(Active),一个作为备份的Namenode(Standby)。备份的Namenode的命名空间与活动的Namenode是实时同步的,所以当活动的Namenode发生故障而停止服务时,备份Namenode可以立即切换为活动状态,而不影响HDFS集群服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值