Hadoop 第二章 HDFS

 

详细过程请看官方文档: https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/ClusterSetup.html

1.HDFS优点

2.HDFS缺点

3.hdfs设计目标

4.hdfs基本概念

5.hdfs操作

6.hdfs文件读取流程

7.hdfs写入流程

8.hdfs副本机制

9.负载均衡

10.机架感知

11.hdfs序列化机制

 

1.HDFS优点
1.处理超大文件
2.运行于廉价机器上
3.流式访问数据

2.HDFS缺点
1.不适合低延迟数据访问,实时,低延迟Hbase更好
2.无法高效储存大量小文件

3.HDFS设计目标
1.硬件错误的快速检测和恢复
2.大规模数据
3.移动计算代价比移动数据代价低

4.HDFS基本概念
1.数据块
一个文件小于数据块的大小,文件多大数据块多大
2.元数据节点
主要储存所有文件夹和文件的元数据,还有包含数据块之类的信息
3.数据节点
真正储存数据的地方,储存了数据块数据和数据块的属性,校验和等信息
4.从元数据节点
1.主要功能周期性将namenode的editlog和fsimage合并,当namenode出现问题进行恢复。
2.帮助namenode将内存中的元数据信息checkpoint到硬盘上

5.HDFS操作
HDFS基本命令格式:
hdfs dfs -cmd<args>
列出文件目录
hdfs dfs -ls dirpath
创建文件夹
hdfs dfs -mkdir dirname
hdfs dfs -mkdir -p dirname/dirname 级联文件夹
上传至hdfs
hdfs dfs -put sourcepath targetpath
从hdfs上下载文件
hdfs dfs -get <hdfs dirpath> <loaclDirPath>
查看hdfs上某个文件的内容
hdfs dfs -text <filePath>
hdfs dfs -cat <filePath>
统计目录各文件的大小
hdfs dfs -du <dirPath>
统计目录下文件大小单位是字节
删除hdfs上的某个文件夹
hdfs dfs -rmr <dirpath>
hdfs dfs -rm -r <dirpath>
使用hdfs help
hdfs dfs -help <command>

6.HDFS文件读取流程
1.client通过调用filesystem的open方法获取所需要读取文件的文件数据,对于HDFS来说gaifilesystem就是distributeFileSystem
2.distributeFileSyste通过RPC来调用Namenode,获取到要读取的数据文件对应的Block储存在哪个DataNode之上
3.client调用DFSInputStream的read方法,先到最近的Datanode,然后进行校验,如果有问题寻找下一个Datanode,对数据块继续read,直到数据块全部读取完毕
4.读取完毕后会关闭Datanode寻找下一个数据块最近的位置,继续以上操作
5.client完成数据读取操作以后就会关闭DFSinputSearn

7.HDFS文件写入流程
1.client通过调用distibutefilesystem的creat创建一个文件
2.distibutefilesystem会通过RPC向namenode发送请求,在文件系统的命名空间中创建一个文件夹,会进行检查,例如文件是否已经存在,如果不存在Namenode就会为该文件创建一条元数据记录
3.client调用FSDataOutputStream的write方法将数据写到一个内部队列中,假设副本系数为3,那么将队列中的数据写到各个副本独赢储存的DataNode上
4.FSDataOutputStream中维护着一个确认队列,当接受到所有的Datanode确认完的消息后,该数据才会从队列中删除
5.当client完成数据的写入后。会对数据流调用close方法关闭相关资源

8.HDFS副本机制
1.副本摆放策略
1.第一副本:DataNode上,如果是集群提交,选择一个磁盘不太慢,CPU不太忙的节点
2.第二副本:与第一个副本不同机架的节点上
3.第三副本第二个副本相同机架不同节点上
2.副本系数
副本系数是几,datanode就有几个

9.数据负载均衡
1.当某个数据节点数据低于阈值的时候,会把datanode迁移到其他空闲的datanode
2.当对某个文件请求增加时,会创建副本,并且平衡集群中的其他数据
3.负载均衡脚本 hadoop/bin/start-balancer.sh

10.机架感知
1.Hadoop同一个机架上的不同节点的网络状况比不同机上之间更为理想,同意数据块在不同机架上提高容错性
2.hadoop允许dfs.network.script来配置datanode属于哪个机架
3.通过机架树结构可以计算每个Datanode之间距离
4.默认同属于一个机架

11.HDFS序列化
1.什么时序列化和反序列化?
  1.序列化:将对象转化为字节流,以便在网络上传输或写在磁盘上进行永久保存
  2.反序列化:将字节流转化为对象
  3.Hadoop多个节点进程间通信通过远程调用(remoteprocedure call,RPC)实现
2.Hadoop的序列化
hadoop不采用java序列化卫视实现自己的序列化功能,但是没有比较功能,而是采用了java的比较功能

基于文件的数据结构SequencenFile
1.概述
主要作用用于多个小文件进行合并,减小namenode负担。
2.特点
1.支持压缩:可定制为基于Record(记录)和Block(块)压缩。
    无压缩类型:如果没有启用压缩,那么每个记录就由它的记录长度,键长度,键和值组成。
    record针对行压缩,之压缩val部分;blockkey和value都压缩。
  2.本地化任务支持:因为文件可以被切分,因此尽可能发起map task并行处理
  3.难度低:hadoop提供的api,逻辑比较简单

基于文件的数据结构MapFile
1.mapfile概述
数排序过后的SequencenFile,由两部分组成data和index。index作为文件的数据索引,主要记录了每个 record的key值,以及在该record在文件的偏移位置。因此在mapfile被访问的时候,会先被加载到内存, 然后通过index映射迅速定位record所在文件的位置。
2.MapFile写操作
1.设置configguration
2.获取filesystem
3.设置文件输出路径
4.mapfile.writer()创建mapfile.write写入
5.调用mapfile.write.append追加写入
6.关闭流
3.mapfile读操作
1.设置configguration
2.获取filesystem
3.设置文件输出路径
4.mapfile.reader()创建mapfile.reader写入
5.拿到key与value的class
6.读取
7.关闭流

 

猜你喜欢

转载自www.cnblogs.com/zhixingweitianxia/p/11715561.html