大数据学习教程SD版第三篇【Hadoop HDFS】

3.Hadoop HDFS

文件系统,分布式,树型结构,针对文件的读写操作,多副本容错

3.1 HDFS 优点

  1. 多副本
  2. 存储大数据
  3. 对机器没有要求

3.2 HDFS 组成

  1. NN
  • 管理HDFS名称空间
  • 管理副本策略
  • 管理块的映射信息
  • 处理客户端请求
  1. DN
  • 存储数据块
  • 执行读写操作
  1. 2NN
  • 辅助NN,定期合并Fsimage和Edits,并推送给NN

  • 可恢复一部分NN数据

  1. Client
  • 文件切分
  • 从NN获取文件位置
  • 在DN执行读写操作

3.3 HDFS Shell操作

hadoop fs -xxx or hdfs dfs -xxx

hadoop fs -put xxx /yyy # put xxx to /yyy
hadoop fs -appendToFile xxx /yyy/xxx # append xxx to xxx end
hadoop fs -get /yyy/xxx xxx # get xxx to xxx
hadoop fs -ls /xxx
hadoop fs -mkdir /xxx  # mkdir
hadoop fs -cat /yyy/xxx
hadoop fs -chmod 777 -R /yyy # chmod
hadoop fs -cp  /xxx /yyy # cp
hadoop fs -mv  /xxx /yyy # mv
hadoop fs -tail /yyy/xxx
hadoop fs -rm /yyy  # 删除/yyy 文件夹下文件
hadoop fs -rm -r /yyy # 删除/yyy 文件夹及文件夹下文件
hadoop fs -du -h /yyy  # 统计文件夹文件大小 -s

3.4 HDFS API操作

需要先在工作环境(windows)配置hadoop的环境变量,需要一个额外的winutils.exe放置在bin目录下

		// 1.fs        
		URI uri = new URI("hdfs://hadoop102:8020");
        Configuration conf = new Configuration();
        String user = "root";
        FileSystem fileSystem = FileSystem.get(uri, conf, user);

        // 2.transform

        // 3.close
        fileSystem.close();
  1. 配置文件优先级顺序
code configuration > resource xxx-site.xml > {HDOOP_HOME}/etc/hadoop/xxx-site.xml > {HDOOP_HOME}/etc/hadoop/xxx-default.xml
  1. 常用API
API 函数名称函数含义
copyFromLocalFile上传
copyToLocalFile下载
delete删除文件和目录
rename移动或更名
listStatus获取指定目录一级列表
listFiles获取指定目录全部文件列表
isDirectory判断路径是否是目录

3.5 HDFS 读写流程

  • 读数据流程
  1. client 向NN 请求上传
  2. NN 响应可以上传(检查权限和路径是否存在)
  3. client 请求上传第一个Block,请求返回DN节点
  4. NN 响应三个DN节点(DN1,DN2,DN3)
  5. client 向DN1请求建立Block传输通道,DN1 再与DN2、DN3建立通道
  6. DN3、DN2、DN1 响应 应答成功
  7. client 向DN1 传输数据Packet(64K)
  8. DN1 数据一份存入磁盘,一份存入内存,内存的那份在分发给DN2、DN3
  9. DN节点回复 client ack响应,存储成功
  10. 重复第5步往下,发送第二个Block,直至文件上传成功!

节点距离计算:两个节点的距离为节点到共同祖先的距离之和

存储副本选择策略:

  1. 本机节点
  2. 其他机架一个节点,保证可靠性
  3. 其他机架另一个节点

存储副本策略源码在:

Class:BloclPlacementPlolicyDefault

function: chooseTargetInOrder()

  • 读数据流程
  1. client 向NN 请求下载

  2. NN 响应文件元数据

  3. client 请求 DN读数据Block1(串行读数据)

  4. DN 传输数据给client

  5. client 接收到所有的Block后,合并文件

  6. 关闭资源

3.6 HDFS NN和2NN

NN元数据:一份在内存,一份在磁盘【fsImage+Edits】

2NN: 合并【fsimage+edits】

  • NN 和2NN具体工作流程
  1. 启动时,NN将 fsimage+edits 加载进内存
  2. 当client 对元数据进行增删改请求时
  3. NN 记录操作日志【edits_inprogesss_xxx】、更新滚动日志【edit_inprogress_xxx -> edits_xxx】
  4. NN 在内存进行数据增删改
  5. 2NN 请求是否需要checkpoint
  6. 当满足checkpoint条件(定时默认一小时到了/edits满了),2NN请求执行checkpoint
  7. NN 滚动正在写的edits,记录新的操作日志
  8. 2NN 从NN拷贝【fsimage+edits_xxx】
  9. 2NN 加载到内存进行合并,生成fsimage.checkpoint
  10. 2NN 拷贝文件到NN
  11. NN 把fsimage.checkpoint 更名为fsimage
  12. 下次启动时时,只需要把【edits_inprogress_xxx + fsimage】加载进内存即可
  • fsimage和edits 文件内容查看
# 转换fsimage 格式之后,再查看
hdfs oiv -p XML -i fsimage_xxx -o /xxx/xxx/xxx.xml
# fsimage 文件内不存文件块的位置信息,由DN汇报
# 转换edits 格式之后,在查看
hdfs oev -p XML -i edits_inprogress_xxx -o /xxx/xxx/xxx.xml

? DN的文件块信息到底存储再NN的哪里

3.7 HDFS DN

流程

  1. client 向NN 请求下载

  2. NN 响应文件元数据

  3. client 请求 DN读数据Block1(串行读数据)

  4. DN 传输数据给client

  5. client 接收到所有的Block后,合并文件

  6. 关闭资源

3.6 HDFS NN和2NN

NN元数据:一份在内存,一份在磁盘【fsImage+Edits】

2NN: 合并【fsimage+edits】

  • NN 和2NN具体工作流程
  1. 启动时,NN将 fsimage+edits 加载进内存
  2. 当client 对元数据进行增删改请求时
  3. NN 记录操作日志【edits_inprogesss_xxx】、更新滚动日志【edit_inprogress_xxx -> edits_xxx】
  4. NN 在内存进行数据增删改
  5. 2NN 请求是否需要checkpoint
  6. 当满足checkpoint条件(定时默认一小时到了/edits满了),2NN请求执行checkpoint
  7. NN 滚动正在写的edits,记录新的操作日志
  8. 2NN 从NN拷贝【fsimage+edits_xxx】
  9. 2NN 加载到内存进行合并,生成fsimage.checkpoint
  10. 2NN 拷贝文件到NN
  11. NN 把fsimage.checkpoint 更名为fsimage
  12. 下次启动时时,只需要把【edits_inprogress_xxx + fsimage】加载进内存即可
  • fsimage和edits 文件内容查看
# 转换fsimage 格式之后,再查看
hdfs oiv -p XML -i fsimage_xxx -o /xxx/xxx/xxx.xml
# fsimage 文件内不存文件块的位置信息,由DN汇报
# 转换edits 格式之后,在查看
hdfs oev -p XML -i edits_inprogress_xxx -o /xxx/xxx/xxx.xml

? DN的文件块信息到底存储再NN的哪里

3.7 HDFS DN

存储数据、数据长度、校验和、时间戳

  • 工作流程
  1. DN 启动后向NN注册
  2. NN 告知DN 注册成功
  3. DN每周期(6h)自查,然后向NN上传所有块信息
  4. NN 与DN 保持心跳机制(3s),正常工作中
  5. 当超过默认值10min+30s没有收到DN 的心跳,则NN 判定DN 不可用

3.8 HDFS 数据完整性

对待上传的数据加一个校验位,crc校验位,类似于奇偶校验

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

道-闇影

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值