Hadoop(6) HDFS

本文详细介绍了Hadoop分布式文件系统(HDFS)的各个方面,包括HDFS的定义、优缺点、应用场景、系统组成、开发环境配置、Shell命令、API操作、上传和下载流程、元数据管理、DataNode工作流程、黑名单和白名单机制,以及节点扩展和退役策略。此外,还讨论了HDFS处理小文件的挑战和解决方案。
摘要由CSDN通过智能技术生成

Hadoop(6)
HDFS

HDFS


HDFS介绍

HDFS的定义

HDFS(Hadoop Distributed File System),即Hadoop分布式文件系统

HDFS由多台主机搭建服务器集群来实现,集群中的服务器分别负责不同的功能

HDFS通过目录树来定位文件

HDFS的优缺点

优点

  1. 采用多副本机制,如果一个副本丢失,可以自动恢复,容错性高
  2. 适合处理大数据
  3. 可以构建在廉价的机器上,随时航向扩展,通过多副本机制提高可靠性

缺点

  1. 不适合低延迟访问数据
  2. 无法高效的对大量小文件进行存储
    1. 存储大量的小文件会占用大量的NameNode内存
    2. 小文件的寻址时间会浪费大量的时间,从而降低效率(一般来说寻址时间<传输时间的 1%比较合适)
  3. 不支持并发写入和文件的修改
    1. 一个文件只能单线程写入,不允许多线程操作
    2. 仅支持数据的追加,不支持文件的修改
HDFS的应用场景

HDFS适合一次写入,多次读取,并且不支持文件的修改,适合做数据分析


HDFS的组成

在这里插入图片描述

HDFS由NameNode,DataNode,ClientSecondaryNameNode组成,在
HDFS中,文件以切块的形式存在,即一个大文件分成多个部分来存储,每个块大小为128MB(1.x版本中是64MB)

一个块(block)如果太小,会增加寻址时间,如果一个block太大,会导致MapReduce处理这块数据时会非常慢

注意

HDFS的块大小主要取决与磁盘的传输速率

  • NameNode 可以理解为结群的主管
    • 管理HDFS的名称空间
    • 配置副本策略
    • 管理数据块的信息(不是数据块)
    • 处理客户端的读写请求(只是处理请求,不处理读写过程)
  • DataNode 负责具体的任务执行
    • 存储实际的数据块
    • 执行数据块的读写操作
  • Client 客户端
    • 与NameNode交互,获取数据块信息
    • 与DataNode交互,负责向DataNode读写数据
    • 上传文件时负责文件的切块
    • 通过指令管理和操作HDFS
  • .SecondaryNameNode
    • 只是对NameNode起辅助作用,注意不是NameNode的热备


配置Hadoop开发环境

由于加使用的操作系统,开发软件可能都不一样,就比如我使用的是基于Linux的Deepin15.11桌面版,开发软件使用的是idea,相比大多数人使用的是Windows系统下Eclipse开发,所以操作不太一样

虽然操作不同,但是配置的思路给大家列举一下,如果大家不会配置,就根据下面的步骤百度一下:

  1. 在开发软件中配置Maven
  2. 将Hadoop的软件包(zip或者tar.gz)解压到自己的磁盘中,不能有中文路径
  3. 配置Hadoop的环境变量
  4. 配置完之后重启一下电脑

HDFS的Shell命令

注意

1. 在执行命令时,使用bin/hadoop fsbin/hdfs dfs的效果是一样的,这是因为dfs是fs的实现类,它们底层调用的jar包都是一样的

2. HDFS的命令和Linux的命令很像,如果熟悉Linux指令,HDFS的Shell操作可以很快上手

3. 下面所有的命令演示,涉及到HDFS文件(夹)的变更,都可以通过浏览器访问NameNode50070端口查看HDFS的文件系统详情来查看命令执行的结果

  • 查看fs的所有命令
hadoop fs

也可以通过下面的指令查看

hadoop fs --help

注意

1. 同样的hadoop dfshadoop dfs --help也一样,下面我们就不把fsdfs一一做列举了,我们统一使用fs

2. 通过以上指令可以查看HDFS的所有指令,下面我们只列举最常用的几个指令,如果大家感兴趣可以把HDFS所有的命令自己测试一遍

HDFS操作
  • 查看指定目录的内容
hadoop fs -ls <目录路径>
  • 查看文本文件内容
hadoop fs -cat <文件路径>
  • 复制
hadoop fs -cp <文件(夹)路径> <拷贝后的文件夹路径>
  • 删除
hadoop fs -rm -r <要删除的文件夹路径>
  • 查看分区情况
Hadoop fs -df [选项]

选项:

选项 说明
-h 存储单位以比较友好的方式展现,说白了就是把单位转换成GB,MB等
  • 查看文件夹的使用情况
hadoop fs -du [选项] <路径>

选项:

选项 说明
-h 同df,存储单位以比较友好的方式展现,说白了就是把单位转换成GB,MB等
  • 设置文件副本数量
hadoop fs -setrep <副本数量n> <HDFS中文件路径>

注意

设置的数量一定要小于DataNode的数量,否则只能创建DataNode个数的副本

HDFS上传操作
  • 上传文件到HDFS(复制本地文件到HDFS)
hadoop fs -copyFromLocal <本地文件路径> <HDFS文件路径>

或者

hadoop fs -put <本地文件路径> <HDFS文件路径> 

注意

-copyFromLocal-put的作用是一样的,在底层copyFromLocal其实是put的一个子类,但是这个子类什么其他的功能都没有实现,只是换了一个名字而已

  • 剪切本地的文件到HDFS

其实moveFromLocalcopyFromLocal唯一的区别就是一个是剪切,一个是复制

hadoop fs -moveFromLocal <本地文件路径> <HDFS文件路径>
  • 追加内容到HDFS中的文件中
hadoop -appendToFile <本地文件路径> <要追加到的文件路径>
HDFS下载操作
  • 下载文件(复制HDFS文件到本地)

下载同上传一样,有两个方法

hadoop fs -copyToLocal <HDFS中的文件路径> <下载到本地的文件路径>

或者

hadoop fs -get <HDFS中的文件路径> <下载到本地的文件路径>
  • 下载多个文件到本地,并合并成一个文件
hadoop fs -getmerge <HDFS中的文件路径1> <HDFS中的文件路径2> ... <HDFS中的文件路径n> <本地合并后的文件路径>

HDFS的API操作

开发软件中开发环境的搭建
  1. 首先,新建一个Maven项目(不需要官方模板,直接新建简单项目即可)

  2. 然后引入依赖

<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.apache.logging.log4j</groupId>
			<artifactId>log4j-core</artifactId>
			<version>2.8.2</version>
		</dependency>
		<dependency>
			<groupId>org.apache.hadoop</groupId>
			<artifactId>hadoop-common</artifactId>
			<version>2.7.7</version>
		</dependency>
		<dependency>
			<groupId>org.apache.hadoop</groupId>
			
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HDFSHadoop分布式文件系统)是一个高可靠性、高容错性的分布式文件系统,可以将大量数据存储在集群中的多个节点上。然而,由于各种原因,HDFS中的块可能会损坏或变得不可用,产生坏块。以下是导致HDFS坏块产生的几个常见原因。 1. 硬件故障: HDFS运行在由多个节点组成的集群上,节点上的硬件有可能出现故障,如磁盘故障、电源故障等。当发生硬件故障,存储在块中的数据可能会损坏或丢失,导致坏块的产生。 2. 网络故障: HDFS在集群中的节点之间进行数据传输,如果网络出现故障,数据传输可能会被中断或延迟。这可能导致某些块未能正确地写入或读取,从而导致坏块的生成。 3. 软件错误: HDFS在设计和实现过程中可能存在程序错误或缺陷,这些错误可能导致HDFS无法正确地管理块和数据,从而产生坏块。 4. 不正确的关闭操作: 当HDFS进行写操作时,如果不正确地关闭节点或集群,可能会导致部分块未被正确地写入。在读取时,这些块将被视为坏块。 5. 数据损坏: 如果数据在写入到HDFS之前已经损坏或发生变化,那么在读取时这些块可能会被识别为坏块。 坏块的产生可能会对数据的完整性和可用性造成负面影响,因此,HDFS提供了坏块检测和自动修复的机制,以确保数据的可靠性和一致性。当发现坏块时,HDFS会尝试从数据备份中恢复该块或将其复制到其他可用节点上。这种机制可以减少坏块对数据的影响,并提高整个文件系统的可用性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值