HDFS

HDFS(Hadoop Distributed File System),是一个文件系统,用于存储文件,通过目录树来定位文件,其实,它是分布式的,联合多台服务器实现功能。HDFS容错性高,适合处理大数据。
使用场景:

  1. 适合一次写入,多次读出的场景;
  2. 不支持文件的修改;
  3. 适合于用来做数据分析,不适合用过来做网盘。

缺点:

  1. 不适合低延时数据访问
  2. 无法高效的对大量小文件进行存储;
    2.1 大量小文件会占用NameNode大量的内存来存储文件目录和块信息。
    2.2 小文件存储的寻址时间会超过读取时间。
  3. 不支持并发写入、文件随机修改;
    3.1 一个文件只能有一个写,不允许多线程同时写。
    3.2 仅支持数据追加,不支持文件的随机修改。

HDFS组成架构


HDFS文件块大小

HDFS的文件在物理上是分块(block)存储的,块的大小可以通过配置参数(dfs.blocksize)来规定,在Hadoop2.x版本中默认是128M,老版本是64M。
块的大小与磁盘的传输速率有关系:

  1. 在集群的block中,寻址时间为10ms
  2. 当寻址时间为传输时间的1%时,为最佳状态。
    T_{传输时间}=10ms/0.01=1000ms=1s
  3. 目前磁盘的传输速度普遍为100MB/s,因此block的大小为:
    S_{block}=1s*100MB/s=100MB

HDFS的Shell操作

  1. hadoop fs -help rm:查看rm命令的帮助信息
  2. hadoop fs -ls /显示目录信息
  3. hadoop fs -mkdir -p /user/input:在HDFS上创建目录
  4. hadoop fs -moveFromLocal ./demo.txt /user/input/:将本地的demo.txt文件剪切粘贴到HDFS
  5. hadoop fs -copyFromLocal ./demo.txt /user/input/:将本地的demo.txt文件拷贝到HDFS

-put命令与-copyFromLocal功能相同

  1. hadoop fs -copyToLocal /user/input/demo.txt ./:将HDFS上的demo.txt拷贝到本地

-get命令与-copyToLocal功能相同

  1. hadoop fs -appendToFile ./append.txt /user/input/demo.txt:将本地的append.txt中的内容追加到已经存在的文件demo.txt的末尾
  2. hadoop fs -getmerge /user/input/* ./zaiyiqi.txt:将HDFS上/user/input/目录下的所有文件合并下载到本地,并将结果保存在zaiyiqi.txt中。
  3. hadoop fs -du -h /user/统计文件夹的大小

hadoop fs -du -h -s /:根目录下所有文件夹大小的总和

  1. hadoop fs -setrep 2 /demo.txt设置demo.txt的副本数为2

当副本数大于数据节点的个数时,数据的实际副本数仍然为节点数,只有当新增节点时,才会生成新的副本,直到增加的节点数与数据的副本数相同时停止。


HDFS写数据流程

1.节点距离计算

两个节点到达最近的公共祖先的距离总和。

2.Hadoop2.7.2副本节点选择

HDFS读数据流程


NameNode和SecondaryNameNode

1. NN和2NN的工作机制

所有的元数据存储在NN的内存中,同时在NN的本地磁盘会备份一个FsImage,以保证断电时数据不会丢失。但是这样每次元数据更新时同时更新FsImage时效率很低,此时,增加一个Edits文件,每当元数据有变化就将变动追加到Edits中,这样断电后就可以通过FsImag和Edits合并生成元数据。但是如果Edits的文件很大时,恢复一次元数据的效率非常低,应该定期进行FsImage和Edits的合并,而这个工作是由2NN完成的。

2. FsImage和Edits解析

2.1. 将Fsimage格式化成可查阅的文件

hdfs oiv -p XML -i fsimage_000*** -o fsimage.xml

2.2. 将Edits格式化成可查阅的文件

hdfs oev -p XML -i edits_000*** -o edits.xml

3. CheckPoint时间设置

3.1. 通常情况下,SecondaryNameNode每隔一小时执行一次
hdfs-default.xml

<property>
  <name>dfs.namenode.checkpoint.period</name>
  <value>3600</value>
</property>

3.2, 一分钟检查一次操作数,当操作数达到一百万时,SecondaryNameNode执行一次
hdfs-default.xml

<property>
  <name>dfs.namenode.checkpoint.txns</name>
  <value>1000000</value>
</property>

<property>
  <name>dfs.namenode.checkpoint.check_period</name>
  <value>60</value>
</property>

4.NameNode故障处理

4.1 将SecondaryNameNode中的数据拷贝到NameNode存储数据的目录,
步骤如下:
I. kill -9 NameNode进程
II. 删除NameNode存储的数据
rm -rf /opt/module/hadoop_2.x.x/data/tmp/dfs/name/*
III. 拷贝SecondaryNameNode中的数据到原NameNode存储数据的目录
scp -r secondaryNameNode:/opt/modeul/hadoop_2.x.x/data/tmp/dfs/namesecondary/* ./data/tmp/ds/name/
IV. 重新启动NameNode

4.2 使用-importCheckpoint选项启动NameNode守护进程,从而将SecondaryNameNode中的数据拷贝到NameNode中
步骤如下:
I. 修改hdfs-site.xml文件

<property>
  <name>dfs.namenode.checkpoint.period</name>
  <value>120</vaue>
</property>

<property>
  <name>dfs.namenode.name.dir</name>
  <value>/opt/module/hadoop-2.x.x/data/tmp/dfs/name</value>
</property>

II. kill -9 NameNode进程
III. 删除NameNode存储的数据
IV. 如果2NN和NN没有在一个主机节点上,需要将2NN存储数据的目录拷贝到NN存储数据的平级目录(也就是和/name处于同一目录下),并删除in_ust.lock文件
V. 导入检查点数据
bin/hdfs namenode -importCheckpoint
VI. 启动NameNode
bin/hadoop_daemon.sh start namenode

5. 集群的安全模式


DataNode工作机制

1. DataNode掉线时限参数设置

hdfs-site.xml中的参数heartbest.recheck.intervaldfs.heatbeat.interval,二者单位均为毫秒

2. 服役新节点

直接从已有的datanode上克隆一个主机,然后删除/data和/logs文件,启动服务器,即可加入新节点
但是这样做很危险,容易被人加入一台主机,偷走数据

3. 添加白名单

可以在NameNode主机上添加白名单,允许在白名单上的主机节点访问NameNode。具体配置如下:
I. 在NameNode的hadoop_2.x.x/etc/hadoop/目录下创建dfs.hosts文件,再文件里添加主机名

34.56.73.166
...

II. 在hdfs-site.xml配置文件中增加dfs.hosts属性

<property>
  <name>dfs.hosts</name>
  <value>hadoop_2.x.x/etc/hadoop/dfs.hosts</value>
</property>

III. 刷新NameNode,更新ResourceManager节点
hdfs dfsadmin -refreshNodes
yarn rmadmin refreshNodes

4. 黑名单退役

在黑名单上的主机都会被强制退出。具体配置如下:
I. 在NameNode的hadoop_2.x.x/etc/hadoop/目录下创建dfs.hosts.exclude文件,加入要退役的节点
II. 在NameNode的hdfs-stie.xml配置文件中添加dfs.hosts.exclude属性

<property>
  <name>dfs.hosts.exclude</name>
  <value>hadoop_2.x.x/etc/hadoop/dfs.hosts.exclude</value>
</property>

III. 刷新NameNode和ResourceManger。
IV. 在退役节点上进行单节点退出
sbin/hadoop-daemon.sh stop datanode
sbin/yarn-daemon.sh stop nodemanager


HDFS 2.x新特性

1. 小文件存档

2. 回收站

将删除的文件在不超时的情况下,恢复元数据,防止误删除、备份等作用。默认是关闭的。



启用回收站,在NN的core-site.xml中:

<property>
  <name>fs.trash.interval</name>
  <value>1</value> # 一分钟
</property>

修改访问垃圾回收站的用户名称,在NN的core-site.xml中:

<property>
  <name>hadoop.http.staticuser.user</name>
  <value>user_name</value>
</property>

3. 快照管理

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容