HDFS (Hadoop Distributed File System)

回到术语表

HDFS

HDFS (Hadoop Distributed File System)是Hadoop应用的主存储系统。这个开源框bob下载地址架的工作原理是在节点之间快速传输数据。它经常被需要处理和存储大数据的公司使用。HDFS是许多Hadoop系统的关键组件,因为它提供了一种管理大数据的方法,以及支持大数据分析。

全球有很多公司都在使用HDFS,那么它到底是什么,为什么需要它?让我们深入了解HDFS是什么,以及它为什么对企业有用。

HDFS是什么?

HDFS是Hadoop分布式文件系统的缩写。HDFS是一种分布式文件系统,设计用于在商用硬件上运行。

HDFS是容错的,并且设计为部署在低成本的商用硬件上。HDFS为应用程序数据提供高吞吐量的数据访问,适用于数据集较大的应用程序,支持文件系统数据的流访问Apache Hadoop

所以,什么是Hadoop?它与HDFS有什么不同?Hadoop和HDFS最核心的区别是Hadoop是开源框架,可以存储、处理和分析数据,而HDFS是Hadoop的文件系统,提供对bob下载地址数据的访问。这本质上意味着HDFS是Hadoop的一个模块。

让我们来看看HDFS的架构:

正如我们所看到的,它主要关注namenode和datanode。NameNode是包含GNU/Linux操作系统和软件的硬件。Hadoop分布式文件系统作为主服务器,可以对文件进行管理,控制客户端对文件的访问,以及文件的重命名、打开、关闭等海外操作过程。

DataNode是包含GNU/Linux操作系统和DataNode软件的硬件。对于HDFS集群中的每个节点,您将找到一个DataNode。这些节点有助于控制其系统的数据存储,因为它们可以在客户端请求时对文件系统执行操作,也可以在NameNode指示时创建、复制和阻止文件。

HDFS的含义和目的是实现以下目标:

  • 管理大型数据集-组织和存储数据集可能是一件很难处理的事情。HDFS用于管理必须处理庞大数据集的应用程序。要做到这一点,HDFS每个集群应该有数百个节点。
  • 检测故障HDFS应该有适当的技术来快速有效地扫描和检测故障,因为它包含了大量的商用硬件。组件故障是一个常见问题。
  • 硬件效率—当涉及大数据集时,可以减少网络流量,提高处理速度。

HDFS的历史

Hadoop的起源是什么?HDFS的设计基于谷歌文件系统。它最初是作为Apache Nutch网络搜索引擎项目的基础设施构建的,但后来成为Apache Nutch的成员Hadoop生态系统

在互联网的早期,网络爬虫开始出现,作为人们在网页上搜索信息的一种方式。这创造了各种搜索引擎,如雅虎和谷歌。

它还创建了另一个名为Nutch的搜索引擎,希望同时在多台计算机上分发数据和计算。纳奇后来去了雅虎,并被一分为二。Apache Spark和Hadoop现在是各自独立的实体。Hadoop被设计用来处理批处理,而Spark被设计用来高效地处理实时数据。

如今,Hadoop的结构和框架由Apache软件基金会管理,这是一个由软件开发人员和贡献者组成的全球社区。

HDFS由此诞生,旨在用一种更好、更有效的方法取代硬件存储解决方案——虚拟文件系统。当MapReduce第一次出现时,它是唯一可以使用HDFS的分布式处理引擎。最近,替代Hadoop数据服务组件,如HBase和Solr也利用HDFS存储数据。

HDFS在大数据世界中是什么?

那么,什么是大数据,HDFS又是如何参与其中的呢?“大数据”指的是所有难以存储、处理和分析的数据。HDFS大数据是组织在HDFS文件系统中的数据。

正如我们现在所知道的,Hadoop是一个通过使用并行处理和分布式存储工作的框架。这可以用来分类和存储大数据,因为它不能以传统的方式存储。

事实上,它是处理大数据最常用的软件,Netflix、Expedia和英国航空等公司都在使用它与Hadoop的关系用于数据存储。HDFS在大数据中是至关重要的,因为这是现在许多企业选择存储数据的方式。

HDFS服务组织的大数据有五个核心元素:

  • 速度-生成、整理和分析数据的速度。
  • 体积—生成的数据量。
  • 各种数据的类型,可以是结构化的,非结构化的等等。
  • 真实性-数据的质量和准确性。
  • 价值-如何使用这些数据来深入了解您的业务流程。

Hadoop分布式文件系统的优点

作为Hadobob下载地址op内部的开源子项目,HDFS在处理大数据时提供了五个核心优势:

  1. 容错.HDFS具有检测故障并自动快速恢复的功能,确保了连续性和可靠性。
  2. 速度,由于其集群架构,它可以保持每秒2 GB的数据。
  3. 访问更多类型的数据,特别是流数据。由于其设计用于批处理大量数据,因此允许高数据吞吐率,使其成为支持流数据的理想选择。
  4. 兼容性和可移植性.HDFS被设计成可以跨各种硬件设置进行移植,并与几种底层操作系统兼容,最终为用户提供了使用自己定制的设置的HDFS的可选性。这些优势在处理大数据时尤其显著,并且通过HDFS处理数据的特定方式实现。

    这个图展示了本地文件系统和HDFS之间的区别。

  5. 可伸缩的.您可以根据文件系统的大小来扩展资源。HDFS包括垂直和水平可伸缩性机制。
  6. 数据本地化.对于Hadoop文件系统,数据驻留在数据节点中,而不是将数据移动到计算单元所在的位置。通过缩短数据与计算过程之间的距离,减少网络拥塞,使系统更加有效和高效。
  7. 成本效益.最初,当我们想到数据时,我们可能会想到昂贵的硬件和占用的带宽。当硬件出现故障时,修复成本可能非常高。使用HDFS,数据存储成本很低,因为它是虚拟的,这可以大大降低文件系统元数据和文件系统名称空间数据存储成本。更重要的是,由于HDFS是开源的,企业不需要担心支付许可费bob下载地址。
  8. 存储大量数据.数据存储是HDFS的全部内容——意味着所有种类和大小的数据——但特别是来自公司的大量数据,这些数据正在努力存储。这包括结构化数据和非结构化数据。
  9. 灵活的.与其他一些更传统的存储数据库不同,在存储之前不需要处理收集的数据。您可以存储尽可能多的数据,并有机会确切地决定您想用它做什么以及以后如何使用它。这也包括非结构化数据,如文本、视频和图像。

如何使用HDFS

那么,如何使用HDFS呢?HDFS与一个主NameNode和多个其他datanode一起工作,所有这些都在一个商用硬件集群上。这些节点被组织在数据中心内的相同位置。接下来,它被分解成块,分布在多个datanode中进行存储。为了减少数据丢失的机会,通常在节点之间复制块。这是数据丢失时的备份系统。

让我们看看namenode。NameNode是集群中的节点,它知道数据包含什么、它属于什么块、块大小以及它应该放在哪里。namenode还用于控制对文件的访问,包括何时可以跨各种数据注释写入、读取、创建、删除和复制数据。

集群还可以根据服务器容量在必要时进行实时调整——这在数据激增时非常有用。必要时可以添加或删除节点。

现在,进入datanode。datanode与namenode保持不断的通信,以确定它们是否需要启动和完成任务。这种一致的协作流意味着NameNode能够敏锐地意识到每个datanode的状态。

当一个DataNode被挑出来没有按照它应有的方式运行时,命名模式能够自动将该任务重新分配给同一数据锁中的另一个正常运行的节点。类似地,datanode也能够彼此通信,这意味着它们可以在标准文件操作期间协作。因为NameNode知道datanode及其性能,所以它们在维护系统中至关重要。

数据锁被复制到多个数据笔记中,并由NameNode访问。

要使用HDFS,您需要安装和设置一个Hadoop集群。这可以是更适合首次使用的单个节点,也可以是为大型分布式集群设置的集群。然后,您需要熟悉HDFS命令,例如下面的命令,以操作和管理您的系统。

命令

描述

rm

删除文件或目录

- ls

列出具有权限和其他详细信息的文件

mkdir

在HDFS中创建名为path的目录

显示文件的内容

删除文件夹

删除目录

——

从本地磁盘上传文件或文件夹到HDFS

-rmr

删除由路径或文件夹及其子文件夹标识的文件

在闲暇

将文件或文件夹从HDFS移动到本地文件

统计文件数、目录数和文件大小

df

显示空闲空间

-getmerge

合并HDFS中的多个文件

修改文件权限

更改文件权限

-copyToLocal

将文件复制到本地系统

统计

打印有关文件或目录的统计信息

——头

显示文件的第一个千字节

使用

返回单个命令的帮助

乔恩

分配文件的新所有者和组

HDFS是如何工作的?

如前所述,HDFS使用namenode和datanode。HDFS支持计算节点之间快速传输数据。当HDFS接收数据时,它能够将信息分解成块,将它们分布到集群中的不同节点上。

数据被分解成块并分布在datanode之间进行存储,这些块也可以跨节点复制,从而实现高效的并行处理。您可以通过各种命令访问、移动和查看数据。HDFS的DFS选项如“-”而且“——”允许您根据需要检索和移动数据。

更重要的是,HDFS被设计成高度警报,可以快速检测故障。文件系统使用数据复制来确保每个数据片段都被多次保存,然后在各个节点之间分配数据,确保至少有一个副本与其他副本位于不同的机架上。

这意味着当一个DataNode不再向NameNode发送信号时,它将从集群中移除DataNode并在没有它的情况下运行。如果该数据节点返回,则可以将其分配给新的集群。另外,由于数据锁是跨多个datanode复制的,因此删除一个datanode不会导致任何类型的文件损坏。

HDFS组件

重要的是要知道Hadoop有三个主要组件。Hadoop HDFS、Hadoop MapReduce、Hadoop YARN。让我们来看看这些组件为Hadoop带来了什么:

  • Hadoop的HDFS—HDFS (Hadoop Distributed File System)是Hadoop的存储单元。
  • Hadoop MapReduce—Hadoop MapReduce是Hadoop的处理单元。该软件框架用于编写处理大量数据的应用程序。
  • Hadoop纱—Hadoop YARN是Hadoop的资源管理组件。它处理和运行用于批处理、流、交互和图形处理的数据——所有这些都存储在HDFS中。

如何创建HDFS文件系统

想知道如何创建HDFS文件系统吗?按照下面的步骤,将指导您如何创建系统,编辑它,并在需要时删除它。

列出您的HDFS

您的HDFS列表应该是/ user / yourUserName.要查看HDFS主目录的内容,输入:

HDFS DFS -ls

因为你刚刚开始,在这个阶段你什么都看不到。当你想查看一个非空目录的内容时,输入:

HDFS DFS -ls /user

然后,您可以看到所有其他Hadoop用户的主目录的名称。

在HDFS中创建目录

现在可以创建一个测试目录,我们称之为测试目录testHDFS.它将出现在您的HDFS中。只需输入以下内容:

hdfs dfs -mkdir testHDFS

现在,您必须使用列出您的HDFS时输入的命令来验证目录是否存在。您应该看到列出了testHDFS目录。

使用HDFS到您的HDFS的完整路径名再次验证它。输入:

hdfs dfs -ls /user/yourUserName

在您采取下一步之前,请仔细检查它是否正常工作。

复制文件

要将文件从本地文件系统复制到HDFS,首先要创建一个要复制的文件。要做到这一点,输入:

echo "HDFS测试文件" >> testFile . sh

这将创建一个名为testFile的新文件,包括字符HDFS测试文件。要验证这一点,输入:

ls

然后验证文件是否被创建,输入:

猫测试文件

然后需要将文件复制到HDFS。要将文件从Linux复制到HDFS,您需要使用:

hdfs dfs -copyFromLocal testFile

注意,您必须使用该命令“-copyFromLocal”因为这个命令“- cp”用于拷贝HDFS中的文件。

现在您只需要确认文件已经被正确复制。请输入以下内容:

HDFS DFS -ls
hdfs dfs -cat testFile

移动和复制文件

当复制testfile时,它被放到base主目录中。现在可以将它移动到已经创建的testHDFS目录中。使用以下方法:

hdfs dfs -mv testFile testthdfs /
HDFS DFS -ls
hdfs dfs -ls testHDFS/

第一部分将您的testFile从HDFS主目录移动到您创建的test目录中。该命令的第二部分告诉我们它不再在HDFS主目录中,第三部分确认它现在已经移动到测试HDFS目录。

要复制一个文件,输入:

hdfs dfs -cp testHDFS/testFile testHDFS/testFile2 . hdfs dfs -cp testthdfs /testFile2 . hdfs dfs -cp testthdfs /testFile2 . hdfs
hdfs dfs -ls testHDFS/

检查磁盘使用率

在使用HDFS时,检查磁盘空间非常有用。为此,您可以输入以下命令:

HDFS DFS -du

这将允许您查看您在HDFS中使用了多少空间。您还可以通过输入以下命令查看整个集群中HDFS有多少可用空间:

HDFS DFS -df

删除文件/目录

可能会有需要删除HDFS中的文件或目录的时候。这可以通过以下命令实现:

hdfs dfs -rm testHDFS/testFile
hdfs dfs -ls testHDFS/

您将看到仍然有您创建的testthdfs目录和testFile2剩余。输入以下命令删除目录:

HDFS DFS -rmdir testhdfs

然后它将弹出一个错误消息-但不要惊慌。大概是这样的" rmdir: testhdfs:目录不是空的".该目录必须为空,才能被删除。您可以使用“rm”命令绕过此命令并删除一个目录,包括其包含的所有文件。输入:

hdfs dfs -rm -r testHDFS
HDFS DFS -ls

如何安装HDFS

要安装Hadoop,您需要记住有一个单节点和一个多节点。根据需要,您可以使用单节点集群或多节点集群。

单节点集群意味着只有一个DataNode在运行。它将包括一台机器上的NameNode、DataNode、资源管理器和节点管理器。

对于某些行业来说,这就是所需要的。例如,在医疗领域,如果您正在进行研究,并且需要按顺序收集、排序和处理数据,则可以使用单节点集群。与分布在数百台机器上的数据相比,这可以轻松地处理较小规模的数据。安装单节点集群,请按照以下步骤操作:

  1. 下载java8软件包。将该文件保存在主目录中。
  2. 提取Java Tar文件。
  3. 下载Hadoop 2.7.3包。
  4. 解压Hadoop tar文件。
  5. 在bash文件中添加Hadoop和Java路径(. bashrc).
  6. 编辑Hadoop配置文件。
  7. 打开core-site.xml并编辑属性。
  8. 编辑hdfs-site.xml并编辑属性。
  9. 编辑mapred-site.xml文件并编辑属性。
  10. 编辑yarn-site.xml并编辑属性。
  11. 编辑hadoop-env.sh并添加Java路径。
  12. 进入Hadoop主目录,格式化NameNode。
  13. hadoop-2.7.3 / sbin目录并启动所有守护进程。
  14. 检查所有Hadoop服务是否都在运行。

现在,您应该已经成功安装了HDFS。

如何访问HDFS文件

考虑到我们处理的是数据,HDFS的安全性很严格就不足为奇了。由于HDFS技术上是虚拟存储,它横跨整个集群,因此您只能看到文件系统上的元数据,无法查看实际的特定数据。

访问HDFS文件可以下载“罐子”文件从HDFS到本地文件系统。您也可以通过web界面访问HDFS。只需打开浏览器并输入即可“localhost: 50070”进入搜索栏。从那里,您可以看到HDFS的web用户界面,并移动到右手边的utilities选项卡。然后单击“浏览文件系统”,这将显示位于HDFS上的完整文件列表。

HDFS DFS实例

下面是一些最常见的Hadoop命令示例。

一个例子

要删除一个目录,您需要应用以下命令(注意:这只能在文件为空时执行):

$Hadoop fs -rmdir /directory-name

$hdfs DFS -rmdir /directory-name

例B

当您在HDFS中有多个文件时,您可以使用“-getmerge”命令。这将把多个文件合并为一个文件,然后您可以将该文件下载到本地文件系统。你可以用以下方法做到这一点:

$ Hadoop fs -getmerge [-nl] /source /local-destination

$ HDFS DFS -getmerge [-nl] /source /local-destination .使用实例

示例C

当您需要将文件从HDFS上传到本地时,可以使用“-put”命令。您可以指定要从哪里复制,以及要将什么文件复制到HDFS。使用下面的方法:

$ Hadoop fs -put /local-file-path /hdfs-file-path

$ HDFS DFS -put /local-file-path / HDFS -file-path

例D

count命令用于跟踪HDFS上的目录数量、文件数量和文件大小。你可以使用以下方法:

$ Hadoop fs -count /hdfs-file-path

$ HDFS DFS -count / HDFS -file-path

例如E

chown命令用于修改文件的属主和所属组。要激活它,请使用以下命令:

$ Hadoop fs -chown [-R] [owner][:[group]] hdfs-file-path

$ hdfs dfs -chown [-R] [owner][:[group]] hdfs-file-path

什么是HDFS存储?

正如我们现在所知道的,HDFS数据存储在称为块的东西中。这些块是文件系统可以存储的最小数据单位。文件被处理并分解成这些块,然后在集群中获取并分布这些块——为了安全起见,也可以复制这些块。通常,每个块可以复制三次。这张图展示了大数据以及如何使用HDFS存储数据。

第一个存储在DataNode上,第二个存储在集群内的一个单独的DataNode上,第三个存储在不同集群中的一个DataNode上。这就像一个三重保护的安全步骤。因此,如果最坏的情况发生了,一个副本失败了,数据也不会永远消失。

NameNode保存重要的信息,比如块的数量和副本存储的位置。DataNode存储的是实际数据,可以根据命令创建块、删除块和复制块。它是这样的:

在hdfs-site.xml
dfs.NameNode.name.dir 文件:/ Hadoop / hdfs / NameNode

dfs.DataNode.data.dir
文件:/ Hadoop / hdfs / DataNode
Dfs.DataNode.data.dir

这决定了datanode应该在哪里存储它的块。

HDFS如何存储数据?

HDFS文件系统由一组Master服务(NameNode、secondary NameNode和datanode)组成。NameNode和secondary NameNode负责管理HDFS的元数据。datanode承载底层HDFS数据。

NameNode跟踪哪些datanode包含HDFS中给定文件的内容。HDFS将文件划分为块,并将每个块存储在DataNode上。多个datanode连接到集群。然后,NameNode在集群中分发这些数据块的副本。它还指示用户或应用程序在哪里查找所需的信息。

Hadoop分布式文件系统(HDFS)设计用来处理什么?

简单地说,当问到“Hadoop分布式文件系统设计用来处理什么?”答案首先是大数据。这对于大公司来说是非常宝贵的,否则它们将难以管理和存储来自业务和客户的数据。

使用Hadoop,您可以存储和统一数据,无论是交易数据、科学数据、社交媒体数据、广告数据还是机器数据。这还意味着您可以返回这些数据并获得有关业务性能和分析的有价值的见解。

由于它被设计用来存储数据,HDFS也可以处理原始数据,这些数据通常被科学家或医学领域的人使用,他们希望分析这些数据。这些被称为数据湖。这让他们可以不受限制地解决更难的问题。

更重要的是,由于Hadoop主要设计用于以各种方式处理大量数据,它也可以用于运行用于分析目的的算法。这意味着它可以帮助企业更有效地处理和分析数据,使他们能够发现新的趋势和异常。某些数据集甚至被从数据仓库移到Hadoop。它只是让你更容易把所有东西都存储在一个容易拿到的地方。

当涉及到事务数据时,Hadoop也具备了处理数百万个事务的能力。由于其存储和处理能力,它可以用来存储和分析客户数据。您还可以深入研究数据,以发现有助于实现业务目标的新趋势和模式。不要忘记,Hadoop正在不断地更新新的数据,您可以比较新旧数据,看看有什么变化,以及为什么发生了变化。

使用HDFS的注意事项

默认情况下,HDFS配置了3倍复制,这意味着数据集将有两个额外的副本。虽然这提高了处理过程中本地化数据的可能性,但也带来了存储开销。

  • HDFS在配置本地附加存储时工作最好。这确保了文件系统的最佳性能。
  • 增加HDFS的容量需要增加新的服务器(计算、内存、磁盘),而不仅仅是存储介质。

HDFS vs.云对象存储

如上所述,HDFS的容量与计算资源是紧密耦合的。增加存储容量需要增加CPU资源,尽管后者不是必需的。在HDFS中增加更多的数据节点时,需要进行rebalance操作,将现有的数据分发到新增的服务器上。

这个操作可能需要一些时间。从成本和空间的角度来看,在本地环境中扩展Hadoop集群也很困难。HDFS使用本地连接的存储,可以提供IO性能优势,假设YARN可以在存储待处理数据的服务器上提供处理。

在大量使用的环境中,大多数数据读/写操作可能是通过网络而不是本地进行的。云对象存储包括Azure数据湖存储、AWS S3或谷歌云存储等技术。它独立于访问它的计算资源,因此客户可以在云中存储更大量的数据。

希望存储pb级数据的客户可以在云对象存储中轻松实现这一点。但是,所有针对云存储的读写操作都将通过网络进行。因此,访问其数据的应用程序在可能的情况下利用缓存或包括最小化IO操作的逻辑是很重要的。

额外的资源


回到术语表