【实例截图】


文件:590m.com/f/25127180-489511412-6fbb07(访问密码:551685)

以下内容无关:

-------------------------------------------分割线---------------------------------------------

  1. 引入
    Apache Hudi是一个流行的开源的数据湖框架,Hudi提供的一个非常重要的特性是自动管理文件大小,而不用用户干预。大量的小文件将会导致很差的查询分析性能,因为查询引擎执行查询时需要进行太多次文件的打开/读取/关闭。在流式场景中不断摄取数据,如果不进行处理,会产生很多小文件。

  2. 写入时 vs 写入后
    一种常见的处理方法先写入很多小文件,然后再合并成大文件以解决由小文件引起的系统扩展性问题,但由于暴露太多小文件可能导致不能保证查询的SLA。实际上对于Hudi表,通过Hudi提供的Clustering功能可以非常轻松的做到这一点,更多细节可参考之前一篇文章查询时间降低60%!Apache Hudi数据布局黑科技了解下。

本篇文章将介绍Hudi的文件大小优化策略,即在写入时处理。Hudi会自管理文件大小,避免向查询引擎暴露小文件,其中自动处理文件大小起很大作用。

在进行insert/upsert操作时,Hudi可以将文件大小维护在一个指定文件大小(注意:bulk_insert操作暂无此特性,其主要用于替换spark.write.parquet方式将数据快速写入Hudi)。

  1. 配置
    我们使用COPY_ON_WRITE表来演示Hudi如何自动处理文件大小特性。

关键配置项如下:

hoodie.parquet.max.file.size:数据文件最大大小,Hudi将试着维护文件大小到该指定值;

hoodie.parquet.small.file.limit:小于该大小的文件均被视为小文件;

hoodie.copyonwrite.insert.split.size:单文件中插入记录条数,此值应与单个文件中的记录数匹配(可以根据最大文件大小和每个记录大小来确定)

例如如果你第一个配置值设置为120MB,第二个配置值设置为100MB,则任何大小小于100MB的文件都将被视为一个小文件,如果要关闭此功能,可将hoodie.parquet.small.file.limit配置值设置为0。

  1. 示例
    假设一个指定分区下数据文件布局如下

假设配置的hoodie.parquet.max.file.size为120MB,hoodie.parquet.small.file.limit为100MB。File_1大小为40MB,File_2大小为80MB,File_3是90MB,File_4是130MB,File_5是105MB,当有新写入时其流程如下:

步骤一:将更新分配到指定文件,这一步将查找索引来找到相应的文件,假设更新会增加文件的大小,会导致文件变大。当更新减小文件大小时(例如使许多字段无效),则随后的写入将文件将越来越小。

步骤二:根据hoodie.parquet.small.file.limit决定每个分区下的小文件,我们的示例中该配置为100MB,所以小文件为File_1、File_2和File_3;

步骤三:确定小文件后,新插入的记录将分配给小文件以便使其达到120MB,File_1将会插入80MB大小的记录数,File_2将会插入40MB大小的记录数,File_3将插入30MB大小的记录数。

步骤四:当所有小文件都分配完了对应插入记录数后,如果还有剩余未分配的插入记录,这些记录将分配给新创建的FileGroup/数据文件。数据文件中的记录数由hoodie.copyonwrite.insert.split.size(或者由之前的写入自动推算每条记录大小,然后根据配置的最大文件大小计算出来可以插入的记录数)决定,假设最后得到的该值为120K(每条记录大小1K),如果还剩余300K的记录数,将会创建3个新文件(File_6,File_7,File_8),File_6和File_7都会分配120K的记录数,File_8会分配60K的记录数,共计60MB,后面再写入时,File_8会被认为小文件,可以插入更多数据。

Hudi利用诸如自定义分区之类的机制来优化记录分配到不同文件的能力,从而执行上述算法。在这轮写入完成之后,除File_8以外的所有文件均已调整为最佳大小,每次写入都会遵循此过程,以确保Hudi表中没有小文件。

  1. 总结
    本文介绍了Apache Hudi如何智能地管理小文件问题,即在写入时找出小文件并分配指定大小的记录数来规避小文件问题,基于该设计,用户再也不用担心Apache Hudi数据湖中的小文件问题了。

c#学习手册 (苏素芳等)相关推荐

  1. 复旦大学python教程_复旦大学大数据学院本科生课程学习手册.PDF

    复旦大学大数据学院本科生课程学习手册 目录 第一章 前言 2 第二章 大数据学院本科生培养模式3 2.1 培养理念 3 2.2 数据科学与大数据技术 "2+2"培养模式 4 第三章 ...

  2. 《ABAQUS 6.14超级学习手册》——1.2 ABAQUS分析模块

    本节书摘来自异步社区<ABAQUS 6.14超级学习手册>一书中的第1章,第1.2节,作者: 齐威 更多章节内容可以访问云栖社区"异步社区"公众号查看. 1.2 ABA ...

  3. 《ANSYS 14.0超级学习手册》一第2章 高级应用的基石——APDL

    本节书摘来自异步社区<ANSYS 14.0超级学习手册>一书中的第2章,作者 张建伟 , 白海波 , 李昕, 更多章节内容可以访问云栖社区"异步社区"公众号查看 第2章 ...

  4. 《Rhino3D 4.0产品造型设计学习手册》——导读

    本节书摘来自异步社区<Rhino3D 4.0产品造型设计学习手册>一书中的目录,作者[韩]崔成权,更多章节内容可以访问云栖社区"异步社区"公众号查看 目 录 Part. ...

  5. 转-Redis学习手册(目录)

    为什么自己当初要选择Redis作为数据存储解决方案中的一员呢?现在能想到的原因主要有三.其一,Redis不仅性能高效,而且完全免费.其二,是基于C/C++开发的服务器,这里应该有一定的感情因素吧.最后 ...

  6. 《ANSYS 14.0超级学习手册》一第1章 绪 论

    本节书摘来自异步社区<ANSYS 14.0超级学习手册>一书中的第1章,第1.1节,作者 张建伟 , 白海波 , 李昕, 更多章节内容可以访问云栖社区"异步社区"公众号 ...

  7. 网络安全体系 应用学习手册 下载

    网络安全体系应用学习手册系我从赛迪网上看到的一篇好文章,由于篇幅过长,特制作成CHM文件.此为本人第一次试做CHM文件,希望大家能够喜欢. 全手册共包括两大章,分别介绍了"网络应用的信息安全 ...

  8. php mysql 学习,php+mysql完全学习手册源码

    [实例简介] <php+mysql完全学习手册>(黄桂金.于永军)源码 [实例截图] [核心代码] b82c182d-8fbd-4888-854f-5dc80db47e47 └── php ...

  9. 一站式SpringBoot for NoSQL Study Tutorial 开发教程学习手册

    SpringBoot2.0 + NoSQL使用教程,项目名称:"SpringBoot2NoSQL" 项目地址: https://gitee.com/475660/SpringBoo ...

最新文章

  1. 任正非:5G独立组网全世界只有华为一家做好了 我们在等待高通进步
  2. 构建dubbo分布式平台-maven模块规划和平台功能导图
  3. cortex m0启动代码详解
  4. 数据结构和算法练习网站_视频和练习介绍了10种常见数据结构
  5. 工控软件IFIX加入WEB显示图表
  6. 计算机应用的问答题,计算机应用技术问答题(一)
  7. apache commons collections CollectionUtils工具类简单使用
  8. Java 开发者最困惑的四件事
  9. python处理pdf文档_pyPdf - 用Python方便的处理PDF文档
  10. Python中sort和sorted函数代码解析
  11. 2月第4周回顾:IT求职困惑不少 虚拟化热点不断
  12. (转) Playing FPS games with deep reinforcement learning
  13. IVF和VS安装——配置Fortran环境
  14. 基于vivoY97的Adb驱动程序的安装
  15. Java - 生成健康证图片,各种模板图片
  16. linux scp命令,linux中scp命令和scp命令用法大全
  17. 计算机系统如何禁止删除文件,如何彻底删除文件防止恢复【详细介绍】
  18. 亿级(无限级)并发,没那么难-科普文
  19. Mencoder安装编译手册
  20. 读取和讯博客数据可视化分析

热门文章

  1. 陌陌双11报告:近半的95后通过社交软件脱单
  2. centos7-启动tomcat
  3. 服务器芯片背后的故事:从理想到现实
  4. 异步电机直接转矩控制与模型预测转矩控制性能对比
  5. 加载datalodaer 调用 __getitem__方法验证
  6. Flutter Error: The method ‘inheritFromWidgetOfExactType‘ isn‘t defined for the class ‘BuildContext‘.
  7. linux安装豆瓣源文件
  8. river歌曲表达的意思_Lost Rivers这首歌究竟是想表达什么? 没有旋律,也没有歌词...
  9. hdu6740 MUV LUV EXTRA KMP算法
  10. 不明导弹袭击夏威夷!一场38分钟的惊魂