HDFS
作者:互联网
HDFS基本概念
是一个文件系统,用于存储文件,通过目录树来定位文件;是分布式的,由多个服务器联合起来实现其功。
适合场景:一次写入,多次读出,不可更改。文件写入后就不需要再改变
HDFS特征
优点
- 高容错,文件报错多个副本
- 适合处理大数据,数据规模到GB、TB甚至TP;文件数量多到百万级以上均可处理
- 可建构廉价机器上
- 不适合低延迟数据访问,实时场景不合适
- 无法高效对大量小文件进行存储(占用大量NN内存来存储目录和块信息,且小文件的寻址时间超过读取时间,违反了HDFS的设计目标)
- 不支持并发写入、文件随机修改,不允许多线程写入
- 仅支持数据追加,不允许文件修改
- NameNode:即NN,Master,是整个HDFS的管理者,
- 管理HDFS的NmaeSpeace
- 配置副本策略
- 管理Block的映射信息
- 处理客户端读写请求
- DataNode:即DN,Slave,NN下达的命令由DN执行实际的操作
- 存储实际的数据块
- 执行数据块的读写操作
- Secondary NameNode:NN的冷备份,当NN挂掉后并不会立刻替换NN
- 辅助NN,定期合并Fsimage和Edits,并推送给NN
- 紧急情况下可辅助恢复NN
- Client:客户端
- 文件切分。
- 与NameNode交互,读取文件位置信息
- 与DataNode交互,读取或写入数据
- 提供命令管理HDFS,如HDFS格式化
- 通过命令访问HDFS,如HDFS增删改查
- HDFS块设置太小,会增加寻址时间
- HDFS块设置太大,传输时间会明显大于寻址时间,导致程序处理这块数据会非常慢
- 上传
- -moveFromLocal:从本地剪切粘贴到HDFS
- -copyFromLocal 或 -put:从本地文件系统中拷贝文件到HDFS路径去
- -appendToFile:追加一个文件到已经存在的文件末尾
- 下载、直接操作
- -copyToLocal 或 -get :从HDFS 拷贝到本地
- -ls: 显示目录信息
- -cat:显示文件内容
- -chgrp、-chmod、-chown:Linux文件系统中的用法一样,修改文件所属权限
- -mkdir:创建路径
- -cp:从HDFS的一个路径拷贝到HDFS的另一个路径
- -mv:在HDFS目录中移动文件
- -tail:显示一个文件的末尾1kb的数据
- -rm:删除文件或文件夹
- -rm -r:递归删除目录及目录里面内容
- -du -h -s :统计文件夹的大小信息
- -setrep:设置HDFS中文件的副本数量,最大副本数取决于节点数
- 资料包中打开windows依赖,将文件夹拷贝到本地文件,并对其添加环境变量(windows上不需要安装hadoop服务器,只需安装此文件中的winutils即可)
- 创建maven项目,添加hadoop等相关依赖
- 添加日志打印等级,创建包、类,干代码
- 注意:IDEA的jar包依赖问题困扰了很久才解决。猜测是可能本地仓库的问题,下次如果还会出现的话,把仓库删了重新换回原始的.m2试试。还有环境变量一定要注意,如果有参数不对可以优先打桩出来看看是否正确
- 定时时间到
- hdfs-default.xml中有所描述,即 dfs.namenode.checkpoint.period字段,默认设置为3600s。即每个小时2NN会向NN请求checkpoint
- Edits中的数据满了
- hdfs-default.xml中有所描述,即 dfs.namenode.checkpoint.txns字段,当操作次数到达100w次时,2NN执行checkpoint,检查次数的时间由 dfs.namenode.checkpoint.check.period设置,默认为60s即每分钟检查一次操作次数
- oiv查看Fsimage文件
例子: hadoop103:8088hdfs oiv -p XML -i fsimage_0000000000000000025 -o /opt/module/hadoop-3.1.3/fsimage.xml cat /opt/module/hadoop-3.1.3/fsimage.xmlfsimage.xml文件中,记录了HDFS中的文件树,并使用inode来作为元数据中的目录管理节点,与文件一一对应。
- oev查看Edits
例子: hdfs oev -p XML -i edits_inprogress_0000000000000000289 -o /opt/software/edits.xml cat /opt/module/hadoop-3.1.3/edits.xmledits.xml中记录了写入追加的操作。 NN和2NN最大的区别就是2NN没有edits_inprogress这个记录最新操作的文件,因此如果发生数据丢失,最有可能丢失的是最近一次操作,而往期操作被存放在2NN中 DataNode 的工作机制 服务及开机之后,DN会主动向NN发送当前节点的所有块信息(活动的块,非死亡块)(注册) 块信息——数据、数据长度、校验和、时间戳 在开机之后:
- DN会自己自我检查块信息(每6小时,字段:dfs.datanode.directoryscan.interval)查询之后立即向NN汇报(每6小时,字段dfs.blockreport.intervalMsec)所有块信息
- DN会每3秒发起心跳信号,告诉NN它还存活。若超过10分钟+30秒(timeOut=2*dfs.namenode.heartbeat.recheck-interval + 10*dfs.heartbeat.interval)NN仍未收到DN的的心跳信号,NN则认为该DN不可用,即不再使用该节点读写数据
标签:DN,HDFS,NN,xml,dfs,文件 来源: https://www.cnblogs.com/yuan-zhou/p/15378123.html