hadoop之HDFS总结

HDSF(分布式存储学习总结)

1.hadoop的历史
  1. 大数据起源于Google发布的三篇论文:GFS、MapReduce和BigTable。
  2. hadoop的作者Doug Cutting根据Google的GFS提出了HDFS分布式,根据MapReduce提出了MapReduce,同时Doug Cutting还是全文搜索Lucene的创始者。
  3. Google的技术虽好但不开源。如果没有Doug Cutting和他的Hadoop开源软件,我们就看不到如今大数据技术和应用的飞速发展。
2.HDFS的存储原理
2.1HDFS各个角色的作用

1.NameNode

1.接受client的读写请求
2.掌控全局,管理DataNode
3.管理元数据
 1. 上传的文件的权限
 2. 上传的文件的属主以及属组
 3. 上传文件的时间
 4. 上传文件的block数以及id号
 5. 每一个block的位置是由DN在集群启动时汇报的
 6. 各个DN的位置信息

2.DataNode

1.接受客户端的读请求
2.存储block块
3.向Active NN汇报心跳,当一个block块传输完成之后汇报信息
4.构建pipeline管道,实现并行写入数据
5.管理本机(本节点)上的block元数据

3.SecondaryNameNode

  • 负责持久化,拉取NN节点上的edits+fsimage文件合并
  • edits文件存储客户端对HDFS的操作
  • 为什么要搞edits文件(磁盘中)来存储操作呢?因为SNN若要与NN直接交互数据(内存中)的话会锁住NN的内容,不能提供服务
1.合并过程
 - 文件拉取之时,在NN节点创建一个edit_new,目的是存储在合并期间对HDFS的操作
 - 基于拉来的edits文件进行重演产出元数据
 - 将重演产出的元数据合并到fsimage中
 - 将合并后的fsimage推送给NN
 - 将edits.new文件变为edits文件
2.合并机制
 - 大于3600s未合并
 - NameNode的edits大小超过64M

4 .ZKFC

1.监控各自的NN,将监控的情况汇报给ZK集群
2.接受Zookeeper的选举结果,确认一下另外一个NN是否真的挂了,将自己监控的NN提升为Active NN 

5 . JournalNode

1.写数据的时候只需要保证半数以上的节点写入成功即可,小于势力范围的JournalNode集群内的节点会自杀
2.最终一致性/弱一致性	
 - 最终一致性:存储半数以上,即可进别的操作
 - 弱一致性:必须等存储完所有的节点NN才能进别的操作
3.存储edits文件

6 .Standby NN

1.监控JournalNode中的数据变化,实时更新自己的内存元数据
2.将内存中的元数据持久化到fsimage中,推送给active NN

.

2.2备份机制
  • 集群内提交(DataNode上提交)
    • 第一个block存在当前DataNode节点(根据就近原则)
    • 第一个备份的block存储在与第一个block不同机架的随机一台服务器上
    • 第二个备份存在放与第一个备份相同的机架上,但是不是同一台服务器上的随机一台服务器。
  • 集群外提交
    • 第一个block存放在一个负载不是很高的一台服务器上
    • 第一个备份的block存储在与第一个block不同机架的随机一台服务器上
    • 第二个备份存在放与第一个备份相同的机架上,但是不是同一台服务器上的随机一台服务器。

.

2.3安全模式

每次启动集群的时候都会启动安全模式,相当于初始化的工作,完成后即可对外提供服务

  1. 加载fsimage到内存
  2. 当edits不为空时,此时NameNode将其操作并合并(除初始化时是NameNode合并,其余时候都是SecondaryNode)但是可以得知NameNode也可以合并edits
  3. 检查DataNode的健康,是否存活
  4. 若某个DataNode挂掉,会把它本来存储的数据进行备份。

.

2.4权限

他依据Linux里面的权限,他是为了防止好人做错事,不防止坏人做坏事。

2.5读流程
  1. 首先用户端发送请求到NameNode
  2. Namenode会判断client是否有权向,如果有权限的话会将datanode的元数据信息返回给client
  3. Client按照距离和顺序去读取datanode中的block,当datanode发生异常的话会进行记录并上传给datanode节点,剩余的数据读取会略过这个节点
  4. 读取block之后通过append将block整合成一个完整的文件进行使用
2.6写流程
  1. client计算block的数量,切割大文件成一个个block
  2. 用户端client向NameNode汇报上传文件的权限、数据块block数和上传时间,这些内容在此时被加载到NameNode的内存中。
  3. 请求一个id号和请求存放的block位置
  4. NameNode将当前负载不高的DataNode的地址发送给client
  5. 将block切割成一个个packet(64K),然后源源不断地往Pipeline管道(多个备份和一份数据)中传送,实现并行存储。
  6. DataNode存储完一个块后向NameNode汇报当前的存储情况(block的位置),此时此信息被加载到NameNode内存中。
  7. 重复上述步骤,直到传送完所有的block

.

2.7HDFS的优缺点
  • 优点
    1. 副本机制,数据安全
    2. 分布式存储,适合批处理
    3. 高可用
    4. 元数据持久化
    5. 禁掉了一些功能,使集群更加完美(修改文件、文件一旦上传成功,不能修改block块的大小)
  • 缺点
    1. 无法毫秒级的读写数据
      - 读写发杂,找NN请求
      - 形成管道,文件切割block,block,packet
    2. 不适合存储大量的小文件,容易造成元数据过多,NN内存溢出
      - 1.将小文件合并成大文件
      - 2.联邦机制
    3. 不能并发写入,但是可以并发的读取

.

2.8HDFS的操作
命令功能例子
hdfs dfs -ls 列出文件或者目录内容hdfs dfs -ls /
hdfs dfs -lsr 递归的列出目录内容hdfs dfs -lsr /
hdfs dfs -mv 将hdfs上的文件移动到目的文件夹hdfs dfs -mv /user/hadoop/a.txt /user/test,将/user/hadoop下的a.txt文件移动到/user/test目录下
hdfs dfs -rm 将hdfs上路径为path的文件移动到回收站hdfs dfs -rm /test.txt
hdfs dfs -put 将本地文件上传到HDFS的目录下hdfs dfs -put /home/hadoop/test.txt /user/hadoop
hdfs dfs -mkdir 在hdfs上创建路径为path的目录hdfs dfs -mkdir /user/test
hdfs dfs -appendToFile 往文件中追加信息hdfs dfs -appendToFile /abc.txt /usr/test
hdfs dfs -copyToLocal 将HDFS上的文件复制到本地hdfs dfs -copyToLocal … 本地目录
hdfs dfs -df -h 查看文件系统的磁盘空间hdfs dfs -df -h /
hdfs dfs -chgrp -R 更改文件的属组hdfs dfs -chgrp supergroup zxj
hdfs dfs -chown -R zxj(拥有者):zzz(组) …更改文件的组和拥有者hdfs dfs -chown -R zxj(拥有者):zzz(组) …
hdfs dfs -chmod -R 777 更改文件的权限hdfs dfs -chmod -R 777 /text

.

2.9HDFS的搭建

hadoop集群环境搭建之伪分布式集群环境搭建
hadoop集群环境搭建之完全分布式集群环境搭建
hadoop集群环境搭建之高可用的完全分布式集群环境搭建
hadoop集群环境搭建之集群客户端的搭建

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值