大数据存储基石HDFS

这篇文章主要介绍HDFS的概述、读写流程,常用的shell操作以及一些HDFS 2.X的新特性
HDFS(Hadoop distributed file system),通过目录树来定位文件,文件实际以块分布式存在各个节点
优点:通过副本容错,在廉价机上存储海量数据。
缺点:不能高效存储小文件(1、占用大量NameNode内存。2、寻址时间会超过读取时间),一个文件不允许多线程写入,数据只能追加不支持随机修改(修改的时候数据都要加到内存改完再写出去,数据量大太耗费性能)
NameNode:处理客户端请求,其中主要有包括fsimages文件和Edits文件
fsimages文件:NameNode格式化就会产生,记录了HDFS文件系统的所有目录和文件IDnode的序列化信息
Edits文件:记录了客户端所有写操作
NameNode再启动后就会将这两个文件加载到内存合并,保证元数据是最新的
DataNode:实际存储的和执行读写操作的,每一块数据包括两个文件一个是数据本身,一个是元数据(数据块长度,校验和checksum,时间戳)
DataNode保证数据安全:
1、每个DataNode节点都保存有校验和日志,定期验证(3周),完成一块数据校验就更新日志。
2、在读取block的时候,会计算checksum和block创建时的值比较
3、写入block的时候,在传输管道有数据和checksum,由最后一个DataNode负责校验
以后介绍NameNode高可用,SecondNameNode,联邦机制
HDFS的写数据流程(3份):
HDFS客户端创建FS,与namenode通信请求上传文件,namenode返回可以上传,fs再请求上传第一个block,请求返回DataNode,namenode返回dn1,dn2,dn3,客户端create dataOutputStream,请求dn1,dn2,dn3建立block通道,三台节点应答成功,通过packet传输数据达到三个节点的内存,由各自刷写到磁盘。
HDFS的读数据流程:
HDFS客户端创建FS,与namenode通信请求读取文件,namenode返回目标文件元数据,之后client去create FSDataInputStream 去数据所在的DataNode节点上请求读取文件,读完之后,再去另一个块所在的datanode请求读取。
Shell操作:hadoop fs or hdfs dfs
-help:输出这个命令的参数
hdfs dfs -help rm
-ls:显示目录信息
hdfs dfs -ls /
-mkdir:在HDFS上创建目录
hdfs dfs -mkdir -p /xianqiang/comeon
-appendToFile:追加一个文件到已经存在的文件末尾
hdfs dfs -appendToFile test.txt /haha.txt
-cat:显示文件内容(后面加wc可以查看文件的数据行数)
hdfs dfs -cat /xianqiang/comeon/on.txt
hdfs dfs -cat /xianqiang/comeon/on.txt | wc -l
-chgrp -chmod -chown 和Linux上一样
-cp :复制
-mv :在HDFS目录中移动文件
-get:从HDFS下载文件到本地
-put :从本地上传文件到HDFS
-getmerge:合并下载多个文件
-tail:显示一个文件的末尾
-rm:删除 (-r 可以递归删除)
-rmdir:删除空目录
-du :查看文件夹的大小 (-h 人类可读)
-setrep : 设置HDFS 中文件副本数量
一些HDFS 2.X的新特性:
使用discp命令实现两个Hadoop集群之间的递归数据复制
Hadoop存档:主要针对小文件的,使用hadoop archive -archiceName xx.har -p input output
解压归档:hadoop fs -cp har:///output/* /
快照管理和启用回收站

猜你喜欢

转载自blog.csdn.net/weixin_42031369/article/details/85223934
今日推荐