1.HDFS优点
2.HDFS缺点
3.hdfs设计目标
4.hdfs基本概念
5.hdfs操作
6.hdfs文件读取流程
7.hdfs写入流程
8.hdfs副本机制
9.负载均衡
10.机架感知
11.hdfs序列化机制
1.处理超大文件
2.运行于廉价机器上
3.流式访问数据
1.不适合低延迟数据访问,实时,低延迟Hbase更好
2.无法高效储存大量小文件
1.硬件错误的快速检测和恢复
2.大规模数据
3.移动计算代价比移动数据代价低
1.数据块
一个文件小于数据块的大小,文件多大数据块多大
2.元数据节点
主要储存所有文件夹和文件的元数据,还有包含数据块之类的信息
3.数据节点
真正储存数据的地方,储存了数据块数据和数据块的属性,校验和等信息
4.从元数据节点
1.主要功能周期性将namenode的editlog和fsimage合并,当namenode出现问题进行恢复。
2.帮助namenode将内存中的元数据信息checkpoint到硬盘上
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>
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
1.client通过调用distibutefilesystem的creat创建一个文件
2.distibutefilesystem会通过RPC向namenode发送请求,在文件系统的命名空间中创建一个文件夹,会进行检查,例如文件是否已经存在,如果不存在Namenode就会为该文件创建一条元数据记录
3.client调用FSDataOutputStream的write方法将数据写到一个内部队列中,假设副本系数为3,那么将队列中的数据写到各个副本独赢储存的DataNode上
4.FSDataOutputStream中维护着一个确认队列,当接受到所有的Datanode确认完的消息后,该数据才会从队列中删除
5.当client完成数据的写入后。会对数据流调用close方法关闭相关资源
1.副本摆放策略
1.第一副本:DataNode上,如果是集群提交,选择一个磁盘不太慢,CPU不太忙的节点
2.第二副本:与第一个副本不同机架的节点上
3.第三副本第二个副本相同机架不同节点上
2.副本系数
副本系数是几,datanode就有几个
1.当某个数据节点数据低于阈值的时候,会把datanode迁移到其他空闲的datanode
2.当对某个文件请求增加时,会创建副本,并且平衡集群中的其他数据
3.负载均衡脚本 hadoop/bin/start-balancer.sh
1.Hadoop同一个机架上的不同节点的网络状况比不同机上之间更为理想,同意数据块在不同机架上提高容错性
2.hadoop允许dfs.network.script来配置datanode属于哪个机架
3.通过机架树结构可以计算每个Datanode之间距离
4.默认同属于一个机架
1.什么时序列化和反序列化?
1.序列化:将对象转化为字节流,以便在网络上传输或写在磁盘上进行永久保存
2.反序列化:将字节流转化为对象
3.Hadoop多个节点进程间通信通过远程调用(remoteprocedure call,RPC)实现
2.Hadoop的序列化
hadoop不采用java序列化卫视实现自己的序列化功能,但是没有比较功能,而是采用了java的比较功能
1.概述
主要作用用于多个小文件进行合并,减小namenode负担。
2.特点
1.支持压缩:可定制为基于Record(记录)和Block(块)压缩。
无压缩类型:如果没有启用压缩,那么每个记录就由它的记录长度,键长度,键和值组成。
record针对行压缩,之压缩val部分;blockkey和value都压缩。
2.本地化任务支持:因为文件可以被切分,因此尽可能发起map task并行处理
3.难度低:hadoop提供的api,逻辑比较简单
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.关闭流
原文:https://www.cnblogs.com/zhixingweitianxia/p/11715561.html