利用fsimage分析HDFS小文件

news/2024/5/20 4:29:24 标签: hdfs, hadoop, 大数据

一、Hive 小文件概述

在Hive中,所谓的小文件是指文件大小远小于HDFS块大小的文件,通常小于128 MB,甚至更少。这些小文件可能是Hive表的一部分,每个小文件都包含一个或几个表的记录,它们以文本格式存储。

Hive通常用于分析大量数据,但它在处理小文件方面表现不佳,Hive中存在大量小文件会引起以下问题:

  • 存储空间占用过多:在Hadoop生态系统中,每个小文件都将占用一定的存储空间,而且每个小文件也需要一个块来存储。如果存在大量的小文件,将浪费大量的存储空间。

  • 处理延迟:小文件数量过多,会引起大量IO操作,导致处理延迟。

  • 查询性能下降:小文件用于分区和表划分,可能导致查询延迟并降低查询性能。此外,小文件还会增加元数据的数量,使得Hive在查询元数据时变得更加缓慢。

  • 数据倾斜:如果数据分布不均匀,会导致一些Reduce任务处理了完全不同的分区,这会使某些Reduce任务的运行速度与其他Reduce任务相比非常慢。

因此,为了避免这些问题,我们需要对Hive中小文件的处理进行优化,减少小文件数量和大小,以提高数据处理效率和准确性。

二、如何排查小文件

1)获取fsimage信息

hdfs dfsadmin -fetchImage ./

2)格式化fsimage为可读文本 

 hdfs oiv -i ./fsimage_0000000007979236585 -t ./tmp/ -o ./fsimage.csv -p Delimited  -delimiter ","

注意:需要创建tmp临时目录缓存中间结果,缓解内存的压力,否则将oom

3)建立存储fsimage的表

CREATE TABLE `tmp.fsimage_info_csv`(
  `path` string, 
  `replication` int, 
  `modificationtime` string, 
  `accesstime` string, 
  `preferredblocksize` bigint, 
  `blockscount` int, 
  `filesize` bigint, 
  `nsquota` string, 
  `dsquota` string, 
  `permission` string, 
  `username` string, 
  `groupname` string)
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' 
WITH SERDEPROPERTIES ( 
  'field.delim'=',', 
  'serialization.format'=',') 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
    'hdfs://nameservice1/user/hive/warehouse/fsimage_info_csv';

4)上传数据到hdfs

hdfs dfs -put /data/fsimage.csv /user/hive/warehouse/fsimage_info_csv/

5) 逐级目录统计文件数量

以查找三级目录下的小文件数量为例,如下:

SELECT
    dir_path ,
    COUNT(*) AS small_file_num 
FROM
    (    SELECT
            relative_size,
            dir_path 
        FROM
            (    SELECT
                    (
                    CASE filesize < 4194304 
                        WHEN TRUE 
                        THEN 'small' 
                        ELSE 'large' 
                    END)  AS relative_size,
                    concat('/',split(PATH,'\/')[1], '/',split(PATH,'\/')[2], '/',split(PATH,'\/')[3], '/',split(PATH,'\/')[4], '/', split(PATH,'\/')[5], split(PATH,'\/')[6]) AS dir_path 
                FROM
                    tmp.fsimage_info_csv 
                WHERE
                    replication = 0 and path like '/hive/warehouse/%') t1
        WHERE
            relative_size='small') t2 
GROUP BY
    dir_path 
ORDER BY
    small_file_num desc

6 ) 小文件处理

  • 根据涉及目录,反向找到涉及程序,尝试优化避免小文件的产生
  • 及时合并归档小文件
  • 及时清理历史小文件


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

相关文章

Mongodb常见操作命令

一、登录相关以及启动 启动服务mongodb&#xff1a; cd /usr/local/mongodb/bin ./mongod -f /data/mongodb/mongodb1.conf./mongod -f /data/mongodb/mongodb2.conf./mongod -f /data/mongodb/mongodb3.conf 登录mongodb数据库&#xff08;mongodb默认端口:27017&#xff0…

5V升压充电16.8V芯片充电管理IC

航誉微HU5912四节锂电池升压充电IC 概要 HU5912是一款 5V输入&#xff0c;支持四节锂电池的升压充电管理 IC。 HU5912 &#xff0c;采用异步开关架构&#xff0c;使其在应用时仅需 要极少的外围器件&#xff0c;可有效减少整体方案尺寸&#xff0c;降低 BOM 成本。 HU5912…

赢得明星代言:邀请明星成为品牌代言人的步骤与注意事项

在品牌推广和营销中&#xff0c;与明星合作做代言人是一种常见的策略&#xff0c;可以有效地提升品牌知名度和形象。然而&#xff0c;找明星做代言人并不是一件轻松的事情&#xff0c;需要慎重考虑和策划。媒介易拥有3000多位一二线明星合作资源&#xff0c;为您提供专业的明星…

Spring Boot(Vue3+ElementPlus+Axios+MyBatisPlus+Spring Boot 前后端分离)【六】

&#x1f600;前言 本篇博文是关于Spring Boot(Vue3ElementPlusAxiosMyBatisPlusSpring Boot 前后端分离)【六】&#xff0c;希望你能够喜欢 &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章…

12.6V三节锂电池升压充电管理IC

HU5810C是5V输入升压充电12.6V1.2A给三节锂电池充电芯片 输入小电流不会拉死&#xff0c;温度60建议1000-1100MA带NTC热敏温度电流保护。HU5810C是一款5V输入,1.2A充电电流,支持三节锂电池串联应用 ,锂离子电池的升压充电管理IC。HU4059C集成功率MOS&#xff0c;采用异步开关架…

typescript基础之unknown

TypeScript 的 unknown 类型是一种特殊的类型&#xff0c;它表示的是那些类型不确定的值的类型。unknown 类型和 any 类型的主要区别是&#xff0c;unknown 类型更加安全&#xff0c;因为在对 unknown 类型的值进行任何操作之前&#xff0c;我们必须进行某种形式的类型检查或断…

基于微服务、Java、Springcloud、Vue、MySQL开发的智慧工地管理系统源码

智慧工地聚焦施工现场岗位一线&#xff0c;围绕“人、机、料、法、环”五大要素&#xff0c;数字化工地平台与现场多个子系统的互联实现了工地业务间的互联互通和协同共享。数字化工地管理平台能够盘活工地各大项目之间孤立的信息系统&#xff0c;实现数据的统一接入、处理与维…

PCL | Ubuntu18安装CloudCompare

文章目录 操作教程 操作教程 CloudCompare下载官网&#xff1a;https://www.danielgm.net/cc/release/ 安装flatpak插件 sudo apt install flatpak添加库路径 flatpak remote-add flathub https://flathub.org/repo/flathub.flatpakrepo安装CC flatpak install flathub or…