HDFS
HDFS 代表 Hadoop 分布式文件系统,主要是Hadoop的存储,用于海量数据存储。具有高容错的特点,提供高吞吐率的数据访问。

HDFS采用了主从(Master/Slave)结构模型,一个HDFS集群是由一个NameNode或以上(HA:一个NameNode处于active状态,另一个处于standby状态)和若干个DataNode组成的。

hdfs 某个节点数据比较多 hdfs有几个节点_hadoop

1.Namenode

是整个文件系统的管理节点。它维护着1.整个文件系统的文件目录树,2.文件/目录的元信息和每个文件对应的数据块列表。3.接收用户的操作请求。文件包括:(hdfs-site.xml的dfs.namenode.name.dir属性)
内部机制是将一个文件分割成一个或多个块,这些块被存储在一组数据节点中。名字节点用来操作文件命名空间的文件或目录操作,如打开,关闭,重命名等等。它同时确定块与数据节点的映射。数据节点负责来自文件系统客户的读写请求。数据节点同时还要执行块的创建,删除,和来自名字节点的块复制指令。

2.Datanode

提供真实文件数据的存储服务(以block形式存储)。

心跳机制

HDFS的标准: NameNode如果连续10次没有收到DataNode的汇报。 那么NameNode就会认为该DataNode存在宕机的可能。

timeout = 10 * 心跳间隔时间 + 2 * 检查一次消耗的时间

心跳间隔时间:dfs.heartbeat.interval 心跳时间:3s检查一次消耗的时间:heartbeat.recheck.interval checktime : 5min

安全机制

HDFS启动时会进入安全模式(只读),启动完成会退出。
hdfs dfsadmin -safemode <enter | leave | get | wait>

数据访问

运行在HDFS之上的应用程序必须流式地访问它们的数据集。HDFS被设计成适合批量处理的,而不是用户交互式的。重点是在数据吞吐量,而不是数据访问的反应时间。

HDFS不适合的场景

低延迟访问;

并发写入/修改文件;

轻量级小文件存储(占用内存大);

HDFS上传下载常用命令(hadoop fs\hdfs fs)

  1. mkdir 创建目录
创建目录
/bin/hadoop fs -mkdir /maliang
创建多级目录 加上 -p
/bin/hadoop fs –mkdir -p /a/b/c
  1. put 文件
/bin/hadoop fs -put /app/hadoop/vin_data.txt /maliang
  1. rm 删除目录或者文件
创建目录
/bin/hadoop fs -rm /vin_data.txt
创建多级目录 加上 -p
/bin/hadoop fs –mkdir -p /a/b/c
  1. ls 显示目录下的所有文件或者文件夹
显示目录下文件夹
/bin/hadoop fs -ls /
显示目录下所有文件 加上 -R
/bin/hadoop fs -ls -R /
  1. cat 查看文件内容
/bin/hadoop fs -cat /maliang/vin_data.txt
  1. get 下载文件到本地
/bin/hdfs dfs -get /maliang/vin_data.txt /app/hadoop

HDFS管理常用命令

  • -report
查看文件系统的基本信息和统计信息
 /bin/hdfs dfsadmin -report
  • -safemode 安全模式命令
enter | leave | get | wait
 /bin/hdfs dfsadmin -safemode enter
  • -refreshNodes
重新读取hosts和exclude文件,使新的节点或需要退出集群的节点能够被NameNode重新识别。这个命令在新增节点或注销节点时用到
 /bin/hdfs dfsadmin -refreshNodes

HDFS数据块

  • 数据块
数据块 : Block是HDFS物理上把数据分成一个块Block。
 默认块大小 : 128M
 数据切分 : 数据切片只是在逻辑上对输入进行分片,并不会在磁盘上分片存储。
 eg:
 切片大小设置为 : 100M
 默认物理块大小 : 128M
 如文末文件206M,那么逻辑上会分3片,而物理上只有2块。

块的大小设置

  • 通过如下命令查看:
    $HADOOP_HOME/bin/hdfs fsck -*
    $HADOOP_HOME/bin/hadoop fs –stat [format]
  • c查看 hdfs-site.xml 配置:
    dfs.blocksize
    268435456
    HDFS文件系统块大小;可以配置以m,g等后缀结尾的值 512m

(1)HDFS的块设置太小,会增加寻址时间,程序一直在找块的开始位置;

(2)如果块设置的太大,从磁盘传输数据的时间会明显大于定位这个块开始位置所需的时间。导致程序在处理这块数据时,会非常慢。

HDFS块的大小设置主要取决于磁盘传输速率。

HDFS副本存放策略

设置备份数

  • 配置文件hdfs-site.xml
<name>dfs.replication</name>

 <value>3</value>

</property>
  • 命令修改
/bin/hadoop fs -setrep -R 1 /

副本存放位置:(需了解机架感知机制)

  • 默认的同一份数据的副本,默认3个,优先读取本地副本(降低带宽消耗和读取延时)
第一份:存放到本机器的HDFS目录下
 
 第二份:存放到不同于第一份所在的机柜的另外一个机架上的某台服务器上
 
 第三份:存放在不同机柜的某个节点上
 
 更多的副本:选择任意一台服务器上进行存储

hdfs 某个节点数据比较多 hdfs有几个节点_hadoop_02

hdfs 某个节点数据比较多 hdfs有几个节点_hadoop_03

hdfs 某个节点数据比较多 hdfs有几个节点_HDFS_04


hdfs 某个节点数据比较多 hdfs有几个节点_hadoop_05

测试结果:
206M文件,按默认值128M分块,分为两个块,存储3副本。