什么是HDFS

什么是HDFS

Hadoop附带了一个名为HDFS的分布式文件系统。在HDFS中,数据分布在多台机器上,并进行了复制,以确保其对故障的耐用性和并行应用的高可用性。

它具有成本效益,因为它使用廉价的硬件。它涉及块、数据节点和节点名称的概念。

在哪里可以使用HDFS

  • 非常大的文件: 文件应该是几百兆字节、几十吉字节甚至更大。
  • 流式数据访问: 读取整个数据集所需的时间比读取第一个数据的延迟更重要。HDFS基于一次写入,多次读取的模式构建。
  • 廉价硬件: 它可以在廉价硬件上运行。

不适合使用HDFS的场景

  • 低延迟数据访问: 需要非常短的时间来访问第一个数据的应用程序不应使用HDFS,因为它更注重整个数据而不是获取第一个记录所需的时间。
  • 大量的小文件: 名称节点将文件的元数据存储在内存中,如果文件的大小很小,则名称节点的内存花费很多,这是不可行的。
  • 多次写入: 当需要多次写入时,不应使用HDFS。

HDFS的概念

  1. 块: 一个块是可以读取或写入的最小数据单元。默认情况下,HDFS块大小为128MB,可以进行配置。HDFS中的文件被分割成块大小的块,作为独立单元存储。与文件系统不同,如果HDFS中的文件小于块大小,则不会占用完整块大小,即在HDFS中以128MB块大小存储的5MB文件仅占用5MB的空间。HDFS块大小设置较大,以减小搜索成本。
  2. 名称节点: HDFS以主从模式工作,其中名称节点作为主节点工作。名称节点是HDFS的控制器和管理器,它了解HDFS中所有文件的状态和元数据;元数据信息包括文件权限、块的名称和位置。元数据很小,因此存储在名称节点的内存中,以便更快地访问数据。此外,HDFS集群被多个客户端同时访问,所以所有这些信息都由单台机器处理。它执行文件系统操作,如打开、关闭、重命名等。
  3. 数据节点: 它们按照客户端或名称节点的指示存储和检索块。它们定期向名称节点报告它们正在存储的块列表。数据节点是廉价硬件,同时也负责块的创建、删除和复制,如名称节点所述。

HDFS数据节点和名称节点的图像:

什么是HDFS

HDFS读取图像:

什么是HDFS

HDFS写入镜像:

什么是HDFS

所有的元数据都存储在名称节点中,这非常重要。如果名称节点失败,文件系统将无法使用,因为我们无法知道如何根据数据节点中的块重建文件。为了克服这个问题,引入了辅助名称节点的概念。

辅助名称节点: 它是一个独立的物理机器,作为名称节点的帮助器。它执行定期的检查点。它与名称节点通信并对元数据进行快照处理,有助于最小化停机时间和数据丢失。

启动HDFS

首先要格式化HDFS,然后以分布式模式启动。以下是命令:

格式化:$ hadoop namenode -format

启动:$ start-dfs.sh

HDFS基本文件操作

  1. 将数据从本地文件系统放入HDFS
  • 首先,在HDFS中创建一个文件夹,用于从本地文件系统中放置数据。

$ hadoop fs -mkdir /user/test

  • 将名为”data.txt”的文件从本地文件夹”/usr/home/Desktop”复制到HDFS文件夹”/user/test”。

$ hadoop fs -copyFromLocal /usr/home/Desktop/data.txt /user/test

  • 显示HDFS文件夹的内容。

$ Hadoop fs -ls /user/test

  1. 从HDFS复制数据到本地文件系统
  • $ hadoop fs -copyToLocal /user/test/data.txt /usr/bin/data_copy.txt
    1. 比较这两个文件,查看它们是否相同
  • $ md5 /usr/bin/data_copy.txt /usr/home/Desktop/data.txt

递归删除

  • hadoop fs -rmr <arg>

示例:

  • hadoop fs -rmr /user/sonoo/

HDFS其他命令

以下用于命令中:

<path>“表示任何文件或目录名称。

<path>...“表示一个或多个文件或目录名称。

<file>“表示任何文件名。

<src>“和”<dest>“是有向操作中的路径名。

<localSrc>“和”<localDest>“是一个本地文件系统上的路径。

  • put <localSrc><dest>

将本地文件或目录(由localSrc标识)复制到DFS中的dest位置。

  • copyFromLocal <localSrc><dest>

与-put命令相同。

  • copyFromLocal <localSrc><dest>

与-put命令相同。

  • moveFromLocal <localSrc><dest>

将本地文件或目录(由localSrc标识)复制到HDFS中的dest位置,并在成功后删除本地副本。

  • get [-crc] <src><localDest>

将HDFS中由src标识的文件或目录复制到本地文件系统路径localDest。

  • cat <filen-ame>

在标准输出中显示filename的内容。

  • moveToLocal <src><localDest>

类似于-get命令,在成功后删除HDFS中的复制。

  • setrep [-R] [-w] rep <path>

将路径为path的文件的目标副本数设置为rep。(实际副本数会随时间逐渐接近目标副本数)

  • touchz <path>

在路径path处创建一个包含当前时间戳的文件。如果路径已经存在一个文件,并且大小不为0,则操作失败。

  • test -[ezd] <path>

如果路径path存在、长度为零或为一个目录,则返回1;否则返回0。

  • stat [format] <path>

打印有关路径path的信息。format是一个字符串,可以接受块大小(%b)、文件名(%n)、块大小(%o)、副本数(%r)和修改日期(%y,%Y)。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程