什么是HDFS
 
 
什么是HDFS?
 
  Hadoop附带了一个称为HDFS的分布式文件系统。在HDFS中,数据分布在多台计算机上并进行复制,以确保它们的故障持久性和并行应用程序的高可用性。
 
 由于它使用商品硬件,因此具有成本效益。它涉及块,数据节点和节点名称的概念。
 
在哪里使用HDFS 
 
 非常大的文件: 文件的大小应为数百兆,千兆字节或更多。 
 流数据访问: 在读取第一个数据时,读取整个数据集的时间比等待时间更重要。 HDFS建立在一次写入和多次读取模式上。 
 商品硬件: 它适用于低成本硬件。 
不使用HDFS的地方
 
 低延迟数据访问: 需要很少时间访问第一数据的应用程序不应使用HDFS,因为HDFS重视整个数据,而不是时间来获取第一条记录。 
 很多小文件: 名称节点包含内存中文件的元数据,如果文件较小,则名称节点的内存将占用大量内存,这是不可行的。 
 多次写入: 当我们不得不多次写入时,不应使用它。 
 HDFS概念
 
 块: 块是它可以读取或写入的最小数据量。HDFS块默认为128 MB,并且是可配置的。文件n HDFS分为块大小的块,与文件系统不同,与文件系统不同,如果HDFS中的文件小于块大小,则它不会占用整个块的大小,即,存储在块大小为128 MB的HDFS中的5 MB文件需要5MB HDFS块的大小很大,只是为了最大程度地降低搜寻成本。 
 名称节点: HDFS以主工作模式工作,其中名称节点充当主节点。名称节点是HDFS的控制器和管理者,因为它知道HDFS中所有文件的状态和元数据;元数据信息是文件许可权,每个块的名称和位置。元数据很小,因此将其存储在名称节点的内存中,从而可以更快地访问数据。此外,HDFS群集可同时由多个客户端访问,因此所有这些信息都由一台计算机处理。文件系统操作如打开,关闭,重命名等都由它执行。 
 数据节点: 当它们被告知时,它们存储和检索块;通过客户端或名称节点。他们定期向名称节点报告,并列出要存储的块列表。作为商品硬件的数据节点还按照名称节点的说明执行块创建,删除和复制的工作。 
  HDFS DataNode和NameNode映像: 
 
 
  HDFS读取映像: 
 
 
  HDFS写入映像: 
 
 
 由于所有元数据都存储在名称节点中,因此非常重要。如果失败,则无法使用文件系统,因为无法知道如何从数据节点中存在的块中重建文件。为了克服这个问题,出现了次要名称节点的概念。
 
  次要名称节点: 这是一个单独的物理计算机,充当名称节点的助手。它执行定期检查点。它与名称节点进行通信并获取元数据的快照,这有助于最大程度地减少停机时间和数据丢失。
 
启动HDFS 
 
  HDFS应该首先进行格式化,然后以分布式模式启动。下面给出命令。
 
 要格式化 $ hadoop namenode-format 
 
 要格式化 $ start-dfs.sh 
 
 HDFS基本文件操作
 
从本地文件系统将数据放入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 
 
  
将数据从HDFS复制到本地文件系统  $ hadoop fs-copyToLocal/user/test/data.txt/usr/bin/data_copy.txt   
比较文件,看两个文件是否相同  $ md5/usr/bin/data_copy.txt/usr/home/Desktop/data.txt   
 递归删除
 
 hadoop fs-rmr  
 示例: 
 
 hadoop fs-rmr/user/sonoo/ 
 HDFS其他命令
 
 以下命令中使用
 
 " <path>"表示任何文件名或目录名。
 
 " <path> ..."表示一个或多个文件或目录名称。 
 
 " <file>"表示任何文件名。 
 
 " <src>"和" <dest>"是定向操作中的路径名。 
 
 " <localSrc>"和"<localDest>"是上述路径,但在本地文件系统上
 
put<localSrc><dest>  
 从localSrc标识的本地文件系统中复制文件或目录到DFS中的目标。
 
 copyFromLocal <localSrc><dest> 
 完全相同的输入
 
 copyFromLocal <localSrc><dest>  
 完全相同的输入
 
 moveFromLocal <localSrc><dest> 
 将由localSrc标识的本地文件系统中的文件或目录复制到HDFS中的dest,然后在成功后删除本地副本。
 
get[-crc] <src> <localDest>  
 将src标识的HDFS中的文件或目录复制到localDest标识的本地文件系统路径。
 
cat <filen-ame>  
 在标准输出上显示文件名的内容。
 
 moveToLocal <src> <localDest>  
 与-get相似,但成功删除HDFS副本。
 
 setrep [-R] [-w] rep <path>  
 设置由rep路径标识的文件的目标复制因子。(实际的复制因子会随着时间的流逝而趋向于目标)
 
 touchz <path>  
 在包含当前时间作为时间戳的路径上创建一个文件。如果文件在路径中已经存在,则失败,除非该文件的大小为0。
 
test -[ezd] <path>  
 如果路径存在,则返回1;否则,返回1、长度为零;或为目录,否则为0。
 
 stat [format] <path>  
 打印有关路径的信息。格式是一个字符串,它接受以块(%b),文件名(%n),块大小(%o),复制(%r)和修改日期(%y,%Y)为单位的文件大小。