1、HDFS特点:
- 高容错性:允许集群中某些机器宕机影响正常的存储
- 廉价性:对单台服务器要求不会太高,成本低
- 安全性:一个数据有多个副本,即使某台机器宕机也不会造成数据丢失
- 扩展性:集群可在工作状态下随时扩展增加容量
- 元数据限制:为提升查找效率,它在namenode的内存中存储一份,在磁盘中也会存储一份备份,不要存储大量小文件,以免给namenode工作压力,且在分布式环境下,效率会非常低
- 不可随机修改:在HDFS中文件不可以随机进行修改
2、HDFS 存储:元数据基于内存存储,其数量局限于namenode内存大小
以文件为单位进行管理的分布式存储系统
数据存储以物理块为基本单位存储多个副本,存储在不同的机器上
将物理文件进行切块存储
以物理切块的方式存储在集群中的datanode上
3、主从架构 :会有单节点故障问题,当namenode宕机会整个集群无法工作
Namenode:记录数据存储的位置
- 提供虚拟的目录供外部进行读与访问
- 维护文件系统的元数据,并根据客户端的请求返回相应的元数据,返回分配的任务
- 接收datanode汇报的数据存储情况,副本复制的任务分配(比如副本中某个数据块丢失时,它会自动从另一个位置的副本处同步一个过去)
Datanode:
-
存储真正的块数据
-
真正处理用户读写的请求
-
向namenode注册和汇报:获取集群一个唯一的标识以及集群的版本,汇报自己的存储能力,汇报自己存储的数据块的信息
4、修改默认操作的文件系统
配置core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://linux01:8020</value>
</property>
BP目录:block pool 文件块池,默认是hdfs的编号为命名
blk_1073741830: 具体文件块,若是多个多副本,名称后面是递增在不同的节点上存储其副本
5、安装时无法正常运行的可能性问题
- 历史hadoop没有清理干净、如datanode\namenode中的信息与现在的相互影响
- 主机名不对
- 域名没做映射 host
- ip地址不对
- 防火墙没关或端口没开
- java_home没正确配置
- 免密配置不对
6、关键配置:hdfs-site.xml
namenode地址:主机名:8020或9000
dfs.namenode.name.dir: namenode元数据存储位置
dfs.datanode.data.dir: 存储数据的位置
dfs.namenode.secondary.http-address: secondary主机位置:主机名:50090
7、客户端Shell操作命令:
hdfs dfs -命令 -参数 /操作的路径
-df [-h] 路径 查看分布式系统的总存储空间
-du[-shvx] 查看文件或文件夹的大小
-chmod -R 777 /aaa 修改aaa文件夹的权限
-mkdir -p /aaa/bbb/ccc/dd 创建多级文件夹
-find / -name aa 从根目录开始找名字为aa 的文件
8、HDFS的JAVA客户端
- 创建maven项目,添加依赖
- 操作步骤
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>pub.ryan</groupId>
<artifactId>codereview</artifactId>
<version>1.0</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target