当前位置: 首页 > article >正文

分布式文件系统HDFS

一、HDFS简介

  • HDFS( Hadoop Distributed File System ),意为:Hadoop分布式文件系统。是Apache Hadoop核心组件之一,作为大数据生态圈最底层的分布式存储服务而存在。
  • 分布式文件系统解决大数据如何存储问题。分布式意味着是横跨在多台计算机上的存储系统。
  • HDFS是一种能够在普通硬件上运行的分布式文件系统,它是高度容错的,适应于具有大数据集的应用程序,它非常适于存储大型数据 (比如 TB 和 PB)。
  • HDFS使用多台计算机存储文件, 并且提供统一的访问接口, 像是访问一个普通文件系统一样使用分布式文件系统。

二、HDFS设计目标

  • 硬件故障(Hardware Failure)是常态, HDFS可能有成百上千的服务器组成,每一个组件都有可能出现故障。因此故障检测和自动快速恢复是HDFS的核心架构目标。
  • HDFS上的应用主要是以流式读取数据(Streaming Data Access)。HDFS被设计成用于批处理,而不是用户交互式的。相较于数据访问的反应时间,更注重数据访问的高吞吐量。
  • 典型的HDFS文件大小是GB到TB的级别。所以,HDFS被调整成支持大文件(Large Data Sets)。它应该提供很高的聚合数据带宽,一个集群中支持数百个节点,一个集群中还应该支持千万级别的文件。
  • 大部分HDFS应用对文件要求的是write-one-read-many访问模型。一个文件一旦创建、写入、关闭之后就不需要修改了。这一假设简化了数据一致性问题,使高吞吐量的数据访问成为可能。
  • 移动计算的代价比之移动数据的代价低。一个应用请求的计算,离它操作的数据越近就越高效。将计算移动到数据附近,比之将数据移动到应用所在显然更好。
  • HDFS被设计为可从一个平台轻松移植到另一个平台。这有助于将HDFS广泛用作大量应用程序的首选平台。

三、HDFS应用场景

四、HDFS重要特性

1. 主从架构 

        HDFS采用master/slave架构。一般一个HDFS集群是有一个Namenode和一定数目的Datanode组成。Namenode是HDFS主节点,Datanode是HDFS从节点,两种角色各司其职,共同协调完成分布式的文件存储服务。

2. 分块存储机制

        HDFS中的文件在物理上是分块存储(block)的,块的大小可以通过配置参数来规定,参数位于hdfs-default.xml中:dfs.blocksize。默认大小是128M(134217728)。

3. 副本机制

  • 文件的所有block都会有副本。每个文件的block大小(dfs.blocksize)和副本系数(dfs.replication)都是可配置的。副本系数可以在文件创建的时候指定,也可以在之后通过命令改变。
  • 默认dfs.replication的值是3,也就是会额外再复制2份,连同本身总共3份副本。

4. namespace

  • HDFS支持传统的层次型文件组织结构。用户可以创建目录,然后将文件保存在这些目录里。文件系统名字空间的层次结构和大多数现有的文件系统类似:用户可以创建、删除、移动或重命名文件。
  • Namenode负责维护文件系统的namespace名称空间,任何对文件系统名称空间或属性的修改都将被Namenode记录下来。
  • HDFS会给客户端提供一个统一的抽象目录树,客户端通过路径来访问文件,形如:hdfs://namenode:port/dir-a/dir-b/dir-c/file.data。

5. 元数据管理

在HDFS中,Namenode管理的元数据具有两种类型:

  • 文件自身属性信息:文件名称、权限,修改时间,文件大小,复制因子,数据块大小。
  • 文件块位置映射信息:记录文件块和DataNode之间的映射信息,即哪个块位于哪个节点上。

6. 数据块存储

文件的各个block的具体存储管理由DataNode节点承担。每一个block都可以在多个DataNode上存储。

五、微博HDFS案例

1. HDFS Shell CLI客户端

  • 命令行界面(英语:command-line interface,缩写:CLI)是指用户通过键盘输入指令,计算机接收到指令后,予以执行一种人际交互方式。
  • Hadoop提供了文件系统的shell命令行客户端,使用方法如下:

hdfs [OPTIONS] SUBCOMMAND [SUBCOMMAND OPTIONS]  

SUBCOMMAND:Admin Commands、Client Commands、Daemon Commands。

  • 跟文件系统读写使用相关的命令是 hdfs dfs [generic options]

说明

  • HDFS Shell CLI支持操作多种文件系统,包括本地文件系统(file:///)、分布式文件系统(hdfs://nn:8020)等
  • 操作的是什么文件系统取决于URL中的前缀协议。
  • 如果没有指定前缀,则将会读取环境变量中的fs.defaultFS属性,以该属性值作为默认文件系统

hdfs dfs -ls file:///  #操作本地文件系统

hdfs dfs -ls hdfs://node1:8020/ #操作HDFS分布式文件系统

hdfs dfs -ls /  #直接根目录,没有指定协议 将加载读取fs.defaultFS值

hadoop dfs、hdfs dfs、 hadoop fs 三者区别  

  •  hadoop dfs 只能操作HDFS文件系统(包括与Local FS间的操作),不过已经Deprecated  
  •  hdfs dfs   只能操作HDFS文件系统相关(包括与Local FS间的操作),常用   
  • hadoop fs  可操作任意文件系统,不仅仅是hdfs文件系统,使用范围更广

目前版本来看,官方最终推荐使用的是hadoop fs。当然hdfs dfs在市面上的使用也比较多。

  • HDFS文件系统的操作命令很多和Linux类似,因此学习成本相对较低。
  • 可以通过hadoop fs -help命令来查看每个命令的详细用法。 

2. 微博案例--HDFS Shell实操

微博用户数据HDFS操作

需求:微博作为社交平台,拥有大量的用户评论数据。为了更好的分析微博用户的行为和习惯,进行精准的营销和推荐。可以将微博的用户评论数据上传到HDFS,供后续其他大规模文本、情感分析程序来处理。因为HDFS作为分布式文件存储系统,是整个大数据平台的最底层的核心。

1)目录规划: 

2)创建规划目录 
  • 命令:hadoop fs -mkdir [-p] <path> ...     

        path 为待创建的目录     

        -p选项的行为与Unix mkdir -p非常相似,它会沿着路径创建父目录。

hadoop fs -mkdir /common

hadoop fs -mkdir /workspace

hadoop fs -mkdir /tmp/

hadoop fs -mkdir /warehouse

hadoop fs -mkdir /source

3)查看指定目录下内容
  • 命令:hadoop fs -ls [-h] [-R] [<path> ...]

        path 指定目录路径   

         -h 人性化显示文件size   

         -R 递归查看指定目录及其子目录 

4)上传文件到指定目录下(1)
  • hadoop fs -put [-f] [-p] <localsrc> ... <dst>

        -f 覆盖目标文件(已存在下)     

        -p 保留访问和修改时间,所有权和权限。     

        localsrc 本地文件系统(客户端所在机器)     

        dst 目标文件系统(HDFS)

hadoop fs -mkdir -p /source/weibo/star/comment_log/20190810_node1.itcast.cn/

hadoop fs -put caixukun.csv /source/weibo/star/comment_log/20190810_node1.itcast.cn

5)上传文件到指定目录下(2)
  • 命令:hadoop fs -moveFromLocal <localsrc> ... <dst>

        和-put功能意义,只不过上传结束,源数据会被删除

hadoop fs -moveFromLocal caixukun.csv /tmp/

6)查看HDFS文件内容(1)
  • hadoop fs -cat <src> ...

        读取指定文件全部内容,显示在标准输出控制台。     

        注意:对于大文件内容读取,慎重。

hadoop fs -cat /source/weibo/star/comment_log/20190810_node1.itcast.cn/caixukun.csv

7)查看HDFS文件内容(2)
  • hadoop fs -head <file>     

        查看文件前1KB的内容。

hadoop fs -head /source/weibo/star/comment_log/20190810_node1.itcast.cn/caixukun.csv

8)查看HDFS文件内容(3)
  • hadoop fs -tail [-f] <file>

        查看文件最后1KB的内容     

        -f选择可以动态显示文件中追加的内容。

hadoop fs -tail /source/weibo/star/comment_log/20190810_node1.itcast.cn/caixukun.csv

 9)下载HDFS文件(1)
  • hadoop fs -get [-f] [-p] <src> ... <localdst>

        下载文件到本地文件系统指定目录,localdst必须是目录     

        -f 覆盖目标文件(已存在下)   

        -p 保留访问和修改时间,所有权和权限

hadoop fs -get /source/weibo/star/comment_log/20190810_node1.itcast.cn/caixukun.csv ./ 

10)合并下载HDFS文件(2)
  • hadoop fs -getmerge [-nl] [-skip-empty-file] <src> <localdst>

        下载多个文件合并到本地文件系统的一个文件中。     

        -nl选项表示在每个文件末尾添加换行符

11)拷贝HDFS文件
  • 命令:hadoop fs -cp [-f] <src> ... <dst>

        -f 覆盖目标文件(已存在下)

hadoop fs -mkdir -p /source/weibo/star/comment_log/20190811_node1.itcast.cn/

hadoop fs -cp /source/weibo/star/comment_log/20190810_node1.itcast.cn/caixukun.csv   /source/weibo/star/comment_log/20190811_node1.itcast.cn/

12)追加数据到HDFS文件中
  • hadoop fs -appendToFile <localsrc> ... <dst>

        将所有给定本地文件的内容追加到给定dst文件。     

        dst如果文件不存在,将创建该文件。     

        如果<localSrc>为-,则输入为从标准输入中读取。

hadoop fs -appendToFile caixukun_new.csv  /source/weibo/star/comment_log/20190811_node1.itcast.cn/caixukun.csv

 

13)查看HDFS磁盘空间
  • hadoop fs -df [-h] [<path> ...]

        显示文件系统的容量,可用空间和已用空间

14)查看HDFS文件使用的空间量
  • hadoop fs -du [-s] [-h] <path> ...

        -s:表示显示指定路径文件长度的汇总摘要,而不是单个文件的摘要。     

        -h:选项将以“人类可读”的方式格式化文件大小

hadoop fs -du -s -h -v /source/weibo/

 

15)HDFS数据移动操作
  • hadoop fs -mv <src> ... <dst>

        移动文件到指定文件夹下     

        可以使用该命令移动数据,重命名文件的名称

hadoop fs -mv /source/weibo/star/comment_log/20190810_node1.itcast.cn/caixukun.csv  /tmp/caixukun_dirtydata.csv

16)修改HDFS文件副本个数
  • hadoop fs -setrep [-R] [-w] <rep> <path> ...

        修改指定文件的副本个数。     

        -R表示递归 修改文件夹下及其所有     

        -w 客户端是否等待副本修改完毕。

hadoop fs -setrep -w 2 /tmp/caixukun_dirtydata.csv

3. HDFS其他Shell命令操作

  • 命令官方指导文档

Apache Hadoop 3.1.4 – Overview

  • 友情提示

常见的操作自己最好能够记住,其他操作可以根据需要查询文档使用。

命令属于多用多会,孰能生巧,不用就忘。


http://www.kler.cn/a/561120.html

相关文章:

  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_cpuinfo 函数
  • Terser 与 Esbuild 比较
  • 如何在本地和服务器新建Redis用户和密码
  • 大数据开发平台的框架
  • 【python】提取word\pdf格式内容到txt文件
  • 自动驾驶中planning为什么要把横纵向分开优化?
  • Unity Shader 学习13:屏幕后处理 - 使用高斯模糊的Bloom辉光效果
  • Spring Boot 整合原生的 mybatis
  • C++与Python实现LiDAR点云投影对比:关键差异与易错点详解
  • TVS管学习记录
  • 趣解http和https各自的原理以及它们的区别
  • Unity Mixamo模型更好的适配角色模型
  • 设计模式觉醒系列(01)设计模式的基石 | 六大原则的核心是什么?
  • 二级公共基础之数据库设计基础(一) 数据库系统的基本概念
  • 基于数据可视化学习的卡路里消耗预测分析
  • 计算机毕业设计SpringBoot+Vue.js古典舞在线交流平台(源码+文档+PPT+讲解)
  • 在Spring Boot+Vue前后端分离的项目中使用JWT实现基本的权限校验
  • 2步本地安装部署国产之光大模型DeepSeek,附Mac安装教程和安装包!
  • Oracle Fusion Middleware更改weblogic密码
  • AI手机的技术细节