Hadoop — 分布式文件系统HDFS(初识 )
发布日期:2021-06-30 19:49:20 浏览次数:2 分类:技术文章

本文共 2529 字,大约阅读时间需要 8 分钟。

一、HDFS设计基础和目标

硬件错误是常态,以此要有冗余。

流式数据访问。数据批量读取(而不是随机读取)、Hadoop擅长数据分析(而不是事务处理)。

大规模数据集

简单一致模型。为降低系统复杂性,对文件采用一次写入多次读取的方式(文件写入之后就不能修改了)

程序采用“数据就近”原则分配节点执行

二、HDFS体系框架

NameNode

DataNode

事物日志

映像文件

SecondaryNameNode

1、NameNode

管理文件系统的命名空间

记录文件数据块所属的DataNode,和副本信息

协调客户端对文件的访问

记录命名空间内的改动和空间本身属性的改动

适用事物日志记录HDFS元数据的变化,适用映像文件存储文件系统的命名空间,包括映射和文件属性

2、DataNode

物理节点上的储存管理

一次写入多次读取(不能修改)

# 数据块(block)组成->块大小 64M

数据块尽可能分散到各个节点(实现冗余的效果)

3、数据读取流程

当客户端(Client)希望访问HDFS中的一个文件,首先从NodeNode中获取这个数据块的位置列表,然后读取到数据块所属的DataNode节点,在访问该DataNode,NameNode不参与实际的数据传输,其属于查询工具。

4、HDFS的可靠性

冗余副本策略:

在hdfs-site.xml中设置复制因子指定副本数量

所有数据块都有副本

DataNode启动时,遍历文件系统,产生一份hdfs数据块和本地文件的对应关系列表(blockreport)汇报给NameNode

机架策略:

集群一般放在不同机架中,机架间的带宽小于机架内的带宽

HDFS“机架感知”(通过节点之间的信息包感知是否在一个机架)

一般要在机架存放一个副本,在其他的机架存放剩下的副本,防止机架失效时的数据丢失,并且提高带宽利用率

心跳机制

NameNode周期性从DataNode接收心跳信号和块报告

NameNode根据块报告验证元数据

没有按时发送心跳的DataNode视为宕机,不再发送任何I/O请求

DataNode失效引起副本数量降低,低于预先设置的阀值,NameNode会检测出这些数据块,在适合时机重新设置

引发复制数据块的原因还有,数据块本身的损坏、磁盘错误、复制因子增大

安全模式

NameNode启动时,会经历一个“安全模式”

安全模式阶段不会产生数据的写入

此阶段NameNode收集各个DataNode的报告,当数据块达到最小副本数以上时,被认为安全

在一定比例的数据块被确定为”安全”后,再过若干时间,安全模式结束

当检测到副本数不足的数据块时,会执行复制行为(到副本数量达到最小副本数为止)

校验和

每个数据块都拥有一个校验和

校验和会作为一个单独的隐藏文件保存在命名空间

客户端获取数据时会检查校验和,从而判断数据块的完整性

若正在读取的数据块遭到损坏,则读取其他数据块

回收站

删除文件将放在trash

trash里的文件可以快速恢复

可以设置阀值,当文件存放时间超过阀值将被彻底删除,释放所占用的数据块

元数据保护

映像文件和事物日志是NameNode的核心数据,可配置多个副本

副本降低NameNode的处理速度,但增加安全性

NameNode是单点,发生故障要手工接换到SecondaryNameNode

快照(某些低版本不支持)

存储某个时间的映像,可以使数据快速重返那个时间点

三、HDFS基础命令

#将文件上传到HDFS下,并列出HDFS下的文件

将文件拷贝到HDFS -> [ hadoop fs -put "被复制文件在linux下的目录" “HDFS下的目标目录”]

补:[hadoop fs -get "path_HDFS" "path_linux"]与上传相反。

查询HDFS的文件 -> [hadoop fs -ls]

查询指定目录 -> [ hadoop fs -ls "HDFS下的目录"]

递归查询 -> [  hadoop fs -ls -R ]

注意:Hadoop 没有当前目录的概念,即无 “cd” 命令。

#查看文件内容命令

查看 -> [ hadoop fs -cat "path_HDFS" ]

#改变文件属性()

改变档案用户组 -> [ hadoop fs -chgrp "path_name_HDFS" ]

改变档案拥有者-> [ hadoop fs -chown "path_name_HDFS" ]

改变档案 权 限  -> [ hadoop fs -chmod "path_name_HDFS" ]

#删除HDFS中的文件

删除 -> [ hadoop fs -rm "path_HDFS" ]

查询

递归删除 -> [  hadoop fs -rm -R "path_HDFS" ]

#查看HDFS基本统计信息

查看 -> [ hadoop dfsadmin -report ]

#进入和退出安全模式

进入 -> [ hadoop dfsadmin -safemode enter ]

退出 -> [ hadoop dfsadmin -safemode leave ]

注意:以上所有的HDFS命令 第一个 “hadoop" 在 高版本的 Hadoop 中 应该将其换成 “hdfs”,例如进入和退出安全模式

退出 ->  [ hdfs dfsadmin -safemode leave ]

将不会出现  ->

四、添加节点

1.在新节点安装好hadoop

2.把namenode的有关配置文件复制到该节点

3.修改masters和slaves文件,增加该节点

4.设置ssh免密码进出该节点

5.单独启动该节点上的datanode和tasktracker(hadoop-daemon.sh start datanode/tasktracker)

6.运行start-balancer.sh进行数据负载均衡

五、了解 HDFS Java API 

转载地址:https://lipenglin.blog.csdn.net/article/details/49556149 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Hadoop — 分布式计算框架 Map-Reduce(初识 )
下一篇:win10(企业英文版)有关中文乱码 与 系统默认语言转换

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年04月14日 10时19分31秒