大数据 - Hadoop系列《五》- HDFS文件块大小及小文件问题

news/2024/5/20 5:30:38 标签: 大数据, hadoop, hdfs

系列文章:

大数据- Hadoop入门-CSDN博客

大数据 - Hadoop系列《二》- Hadoop组成-CSDN博客

大数据 - Hadoop系列《三》- HDFS(分布式文件系统)概述_大量小文件的存储使用什么分布式文件系统-CSDN博客

大数据 - Hadoop系列《三》- MapReduce(分布式计算引擎)概述-CSDN博客

大数据 - Hadoop系列《四》- MapReduce(分布式计算引擎)的核心思想-CSDN博客

目录

5.1 HDFS文件块大小(面试题)

问题:能不能将块设置的小一些?

问题:不能过小,那能不能过大?

5.2 小文件问题

2. 小文件过多会造成的问题

3. 小文件的解决办法

🥙3.1 使用Hadoop Archive(HAR)将小文件进行归档

🥙3.2 使用SequenceFile合并小文件

🥙3.3 使用CombineFileInputFormat合并小文件:


5.1 HDFS文件块大小(面试题)

HDFS中的文件在物理上是分块存储(Block), 块的大小可以通过配置参数(dfs blocksize)来规定,默认大小在Hadoop2x/3x版本中是128M,1x版本中是64M.

问题:能不能将块设置的小一些?

理论上是可以的,但是如果设置的块大小过小,会占用大量的namenode的元数据空间,而且在读写操作时,加大了寻址时间,所以不建议设置的过小

问题:不能过小,那能不能过大?

不建议,因为设置的过大,传输时间会远远大于寻址时间,增加了网络资源的消耗,而且如果在读写的过程中出现故障,恢复起来也很麻烦,所以不建议

总结:HDFS块的大小设置主要取决于磁盘传输速率

5.2 小文件问题

1. 小文件是指文件大小明显小于hdfs上块大小的文件

2. 小文件过多会造成的问题

  1. HDFS上每个文件都要在NameNode上面创建对应的元数据,这个元数据的大小约为150byte,这样当小文件比较多的时候,就会产生很多的元数据文件,一方面会大量占用NameNode的内存空间,另一方面就是元数据文件过多,使得寻址索引速度变慢。

  2. 小文件过多,在进行MR计算时,需要启动过多的MapTask,每个MapTask处理的数据量很小,导致MapTask的处理时间比启动时间还小,白白消耗资源。

3. 小文件的解决办法

  解决小文件问题的本质就是将小文件进行合并,可以通过以下几种方式解决小文件问题:

注意:和HAR不同的是,这种方式还支持压缩,可以减少减少存储空间的占用。但SequenceFile文件不能追加写入,也不能修改, 适用于一次性写入大量小文件的操作。

🥙3.1 使用Hadoop Archive(HAR)将小文件进行归档

        使用Hadoop自带的HAR将小文件进行归档,将多个小文件打包成一个HAR文件,这样NameNode中的元数据也就存储一份。在减少namenode内存使用的同时,仍然可以对文件进行透明的访问。

🥙3.2 使用SequenceFile合并小文件

可以使用SequenceFile格式将大批的小文件合并成一个大文件,再使用MapReduce程序进行操作,从而提高系统性能。

🥙3.3 使用CombineFileInputFormat合并小文件:

在MR读取数据时将多个小文件合并成一个文件进行处理,只开启一个MapTask,提高了任务的执行效率。

 


http://www.niftyadmin.cn/n/5462492.html

相关文章

【Java | 多线程】概述

多线程基础 多任务 现代操作系统(如 Windows,macOS,Linux)都支持多任务处理,即它们能够同时运行多个任务。尽管CPU一次只能执行一条指令,但通过操作系统的任务调度机制,CPU可以在多个任务之间…

程序数据模型由OS还是硬件架构决定?

文章目录 前言硬件架构的作用OS的作用编译器的角色OS的数据模型参考 前言 在文章 1>>32的结果是1还是0 中提到了数据模型 L P 64 LP64 LP64 ,并提出这个数据模型主要是由 U n i x Unix Unix 以及类 U n i x Unix Unix 的操作系统使用居多,例如…

23种设计模式之创建型模式 - 单例模式

文章目录 一、单例模式1.1单例模式定义1.2 单例模式的特点 二、实现单例模式的方式2.1 饿汉式2.2 懒汉式2.3 双重检查锁:2.4 静态内部类2.5 枚举实现(防止反射攻击): 一、单例模式 1.1单例模式定义 单例模式确保系统中某个类只有…

ubuntu 18.04 LTS 安装多个CPU平台GCC交叉编译器工具链

目标平台; aarch64 amd64 armv7l s390x mipsel powerpc64le riscv64 apt-get update -y apt-get install git build-essential lrzsz zip unzip libkrb5-dev libicu-dev screen iftop openssl libssl-dev libunwind8 iftop net-tools gcc-multilib gdb clang …

selenium 4 自动化~~~操作浏览器

前言 无意中将selenium版本更新了,原先的脚本跑不起来,报错一直是浏览器驱动版本不对,尝试了几种启动浏览器的方法,一直无法解决,直到看到了一篇selenium版本更新的文章才意识到可能是版本升级后的差异,于…

53 v-bind 和 v-model 的实现和区别

前言 这个主要的来源是 偶尔的情况下 出现的问题 就比如是 el-select 中选择组件之后, 视图不回显, 然后 model 不更新等等 这个 其实就是 vue 中 视图 -> 模型 的数据同步, 我们通常意义上的处理一般是通过 模型 -> 数据 的数据同步, 比如 我们代码里面更新了 model.…

ADB(Android Debug Bridge)操作命令详解及示例

ADB(Android Debug Bridge)是一个强大的命令行工具,它是Android SDK的一部分,主要用于Android设备(包括真实手机和平板电脑以及模拟器)的调试、系统控制和应用程序部署。 下面是一些ADB的常用命令&#xff…

状态模式详解:管理对象状态的利器

在软件设计中,我们经常会遇到需要根据对象的不同状态来执行不同行为的情况。为了优雅地管理这些状态及其对应的行为,状态模式(State Pattern)应运而生。本文将深入探讨状态模式的使用条件、Java代码实现,并结合现实社会…