前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >湖仓一体电商项目(二十四):合并Iceberg小文件

湖仓一体电商项目(二十四):合并Iceberg小文件

原创
作者头像
Lansonli
发布于 2022-10-26 20:25:17
发布于 2022-10-26 20:25:17
2.2K00
代码可运行
举报
文章被收录于专栏:Lansonli技术博客Lansonli技术博客
运行总次数:0
代码可运行

​合并Iceberg小文件

Iceberg表每次commit都会生成一个parquet数据文件,有可能一张Iceberg表对应的数据文件非常多,那么我们通过Java Api 方式对Iceberg表可以进行数据文件合并,数据文件合并之后,会生成新的Snapshot且原有Snap快照数据并不会被删除,如果要删除对应的数据文件需要通过“Expire Snapshots来实现”。

​编辑我们可以通过Java Api 删除历史快照Snap-*.avro,可以通过指定时间戳,当前时间戳之前的所有快照都会被删除,如果指定时间比最后一个快照时间还大,会保留最新快照数据。

在删除快照时,数据data目录中过期的数据parquet文件也会被删除(例如:快照回滚后不再需要的文件),到底哪些parquet文件数据被删除决定于最后的“snap-xx.avro”中对应的manifest list数据对应的parquet数据。随着不断删除snapshot,在Iceberg表不再有manifest文件对应的parquet文件也会被删除。

每次Commit生成对应的Snapshot之外,还会有一份元数据文件“vX-metadata.json”文件产生,我们可以在创建Iceberg表时执行对应的属性决定Iceberg表保留几个元数据文件,属性如下:

Property

Description

write.metadata.delete-after-commit.enabled

每次表提交后是否删除旧的元数据文件

write.metadata.previous-versions-max

要保留旧的元数据文件数量

例如,在Spark中创建表 test ,指定以上两个属性,建表语句如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE ${CataLog名称}.${库名}.${表名} (
  id bigint, 
  name string
) using iceberg
PARTITIONED BY (
  loc string
) TBLPROPERTIES (
    'write.metadata.delete-after-commit.enabled'= true,
	'write.metadata.previous-versions-max' = 3
)

此项目中我们可以定期执行如下代码来删除Iceberg中过多的快照文件和数据文件,代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
object CombinSnapAndRemoveOldSnap {
  def main(args: Array[String]): Unit = {

    val conf = new Configuration()
    val catalog = new HadoopCatalog(conf,"hdfs://mycluster/lakehousedata")

    /**
      * 1.准备Iceberg表
      */
    val table1: Table = catalog.loadTable(TableIdentifier.of("icebergdb","ODS_BROWSELOG"))
    val table2: Table = catalog.loadTable(TableIdentifier.of("icebergdb","ODS_MEMBER_ADDRESS"))
    val table3: Table = catalog.loadTable(TableIdentifier.of("icebergdb","ODS_MEMBER_INFO"))
    val table4: Table = catalog.loadTable(TableIdentifier.of("icebergdb","ODS_PRODUCT_CATEGORY"))
    val table5: Table = catalog.loadTable(TableIdentifier.of("icebergdb","ODS_PRODUCT_INFO"))
    val table6: Table = catalog.loadTable(TableIdentifier.of("icebergdb","ODS_USER_LOGIN"))
    val table7: Table = catalog.loadTable(TableIdentifier.of("icebergdb","DWD_BROWSELOG"))
    val table8: Table = catalog.loadTable(TableIdentifier.of("icebergdb","DWD_USER_LOGIN"))
    val table9: Table = catalog.loadTable(TableIdentifier.of("icebergdb","DWS_BROWSE_INFO"))
    val table10: Table = catalog.loadTable(TableIdentifier.of("icebergdb","DWS_USER_LOGIN"))


    /**
      * 2.合并小文件数据,Iceberg合并小文件时并不会删除被合并的文件,Compact是将小文件合并成大文件并创建新的Snapshot。
      * 如果要删除文件需要通过Expire Snapshots来实现,targetSizeInBytes 指定合并后的每个文件大小
      */
    Actions.forTable(table1).rewriteDataFiles().execute()    
    Actions.forTable(table2).rewriteDataFiles().execute()  
    Actions.forTable(table3).rewriteDataFiles().execute()  
    Actions.forTable(table4).rewriteDataFiles().execute()  
    Actions.forTable(table5).rewriteDataFiles().execute()      
    Actions.forTable(table6).rewriteDataFiles().execute()      
    Actions.forTable(table7).rewriteDataFiles().execute()            
    Actions.forTable(table8).rewriteDataFiles().execute()  
    Actions.forTable(table9).rewriteDataFiles().execute()  
    Actions.forTable(table10).rewriteDataFiles().execute()  

    /**
      * 3.删除历史快照,历史快照是通过ExpireSnapshot来实现的,设置需要删除多久的历史快照 snap-*.avro文件
      */
    table1.expireSnapshots().expireOlderThan(System.currentTimeMillis()).commit()
    table2.expireSnapshots().expireOlderThan(System.currentTimeMillis()).commit()
    table3.expireSnapshots().expireOlderThan(System.currentTimeMillis()).commit()
    table4.expireSnapshots().expireOlderThan(System.currentTimeMillis()).commit()
    table5.expireSnapshots().expireOlderThan(System.currentTimeMillis()).commit()
    table6.expireSnapshots().expireOlderThan(System.currentTimeMillis()).commit()
    table7.expireSnapshots().expireOlderThan(System.currentTimeMillis()).commit()
    table8.expireSnapshots().expireOlderThan(System.currentTimeMillis()).commit()
    table9.expireSnapshots().expireOlderThan(System.currentTimeMillis()).commit()
    table10.expireSnapshots().expireOlderThan(System.currentTimeMillis()).commit()

  }

}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
1 条评论
热度
最新
阿里云官方镜像站:https://developer.aliyun.com/mirror/
阿里云官方镜像站:https://developer.aliyun.com/mirror/
回复回复点赞举报
推荐阅读
中国开源镜像
China    Alibaba Cloud Computing    http://mirrors.aliyun.com/centos/ 阿里巴巴         China    Beijing Institute of Technology    http://mirror.bit.edu.cn/centos/ 北京理工大学         China    Beijing Teletron Telecom Engineering    http://mirrors.btte.net/centos/     北京电子电信工程     China    BitComm Ltd.    http://mirrors.pubyun.com/centos/ 公云         China    CDS China    http://mirrors.yun-idc.com/centos/    ftp://mirrors.yun-idc.com/centos/    rsync://mirrors.yun-idc.com/centos/ 首都在线 China    China University of Geosciences    http://mirrors.cug.edu.cn/centos/         中国地质大学 China    Dalian Neusoft University of Information    http://mirrors.neusoft.edu.cn/centos/    ftp://mirrors.neusoft.edu.cn/centos/     东软 China    Grand Cloud    http://mirrors.grandcloud.cn/centos/     盛大云     China    Huazhong University of Science and Technology    http://mirrors.hust.edu.cn/centos/        rsync://mirrors.hust.edu.cn/centos/ 华中科技大学 China    NetEase    http://mirrors.163.com/centos/     网易     China    Northeastern University, Shenyang Liaoni    http://mirror.neu.edu.cn/centos/ 东北大学         China    Qiming College of Huazhong University of Science and Technology    http://mirrors.hustunique.com/centos/        rsync://mirrors.hustunique.com/centos/ 华中科技大学 China    Sohu Inc, Beijing P.R. China    http://mirrors.sohu.com/centos/         搜狐 China    The Linux open source community mirror    http://mirrors.skyshe.cn/centos/        rsync://mirrors.skyshe.cn/centos/ 中国linux开源社团 China    University of Science and Tech of China    http://centos.ustc.edu.cn/centos/ 中国科技大学         China - Hong Kong     Web Services Ltd.    http://mirror.vpshosting.com.hk/pub/linux/centos/    ftp://mirror.vpshosting.com.hk/pub/linux/centos/     Hong Kong    01LINK NETWORK SERVICES LIMITED    http://centos.01link.hk/    ftp://centos.01link.hk/    rsync://centos.01link.hk/centos/ Hong Kong    CommuniLink Internet Limited    http://centos.communilink.net/    ftp://centos.communilink.net/centos/     Hong Kong    i-System Technology Limited    http://centos.uhost.h
三杯水Plus
2018/11/14
3.9K1
2018国内优秀开源镜像站汇总 转
2018国内优秀开源镜像站汇总 一、站点版 企业站 1.网易:http://mirrors.163.com/ 2.阿里云:http://mirrors.aliyun.com/ 同步频率为每天一次,每天凌晨2:00-4:00为镜像的同步时间 3.搜狐:http://mirrors.sohu.com/
双面人
2019/04/10
2.5K0
android sdk manager设置国内镜像快速下载sdk
万恶的GFW,android sdk manager通过google的url下载sdk卡成翔了,在网上找了几个国内镜像,亲测可用。
全栈程序员站长
2022/09/09
10.5K0
android sdk manager设置国内镜像快速下载sdk
Android SDK下载太慢
打开Android SDK Manager, 打开Tools->Options,在「HTTP Proxy Server」和「HTTP Proxy Port」输入框内填入mirrors.dormforce.net(开源网站地址)和port号80,而且选中「Force https://… sources to be fetched using http://…」复选框。设置完毕后单击「Close」button关闭『Android SDK Manager – Settings』窗体返回到 Android SDK Manager主界面。
全栈程序员站长
2022/09/09
1.5K0
Android SDK下载太慢
下载地址记录
旧版:https://dl.bintray.com/fabioz/pydev/old/
流柯
2018/08/31
1.5K0
解决因“墙”无法下载谷歌等网站资料的镜像站
由于你懂得的原因,我们无法去官网下载androidSDK,后来QT下载也要翻墙。下面是解决因“墙”无法下载资料的镜像站网址:
极客人
2018/08/30
1.9K0
安卓SDK镜像
1 1,443 views A+ 所属分类:电脑 最近在下载安卓SDK遇到麻烦,那就是谷歌被QIANG了,导致下载不仅很慢而且可能是下载不了,国内许多学校提供镜像,但是速度不是很理想。于是无意
用户1127987
2018/06/05
2.7K0
Linux实用命令大全(附思维导图)
Linux全称GNU/Linux,于1991年10月5日发布,其创始人是林纳斯·托瓦兹(Linus Torvalds),是一种自由和开放源码的类UNIX操作系统。它继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
吾非同
2020/10/23
1.9K2
Linux实用命令大全(附思维导图)
下载Android SDK tools完成Android SDK 安装、配置环境变量
开发Android程序必需有Android SDK(Software Development Kit)软件开发工具包,现在的Android Studio安装好后会自带SDK等一些插件,比早期使用eclipse要方便许多。 Android SDK tools就是Android Studio中用来管理各种版本Android SDK的工具。
全栈程序员站长
2022/09/14
25.2K0
下载Android SDK tools完成Android SDK 安装、配置环境变量
国内源安装软件
1.1、浙江大学:http://mirrors.zju.edu.cn/postgresql/ 1.2、中国科技大学:http://mirrors.ustc.edu.cn/postgresql/ 参考链接:https://blog.csdn.net/qq_38978315/article/details/90349499
johnhuster的分享
2022/03/28
1K0
Android Sdk安装和环境变量配置[通俗易懂]
Google Android的官网上下载(http://developer.android.com/sdk/index.html),为了节省时间,我就选择了这个网址
全栈程序员站长
2022/09/13
12.4K0
Android Sdk安装和环境变量配置[通俗易懂]
突发!美商务部宣布封禁微信,TikTok——面对科技封锁,如何应对
刚刚美国商务部忽然发布了这则新闻,为了回应特朗普2020年8月6号的行政令,称这些应用程序存在安全威胁。
用户6070864
2020/09/27
4760
突发!美商务部宣布封禁微信,TikTok——面对科技封锁,如何应对
gradle配置多个代码仓库repositories
maven { url "http://maven.aliyun.com/nexus/content/groups/public/" }
JQ实验室
2022/02/11
6330
ubuntu16.04配置本地镜像源_修改ubuntu镜像源
前面搜集准备了那么多资源,是不是以为我要像其他教程那样在命令行里修改?NONONO!从Ubuntu16.10版本以后,Ubuntu已经内置了中国区内的软件源镜像,像Aliyun和清华大学的软件源等等,所以我们就可以直接在图形界面内设置,不需要再编辑系统文件了。
全栈程序员站长
2022/11/04
4.5K0
分享一些常用的更换各种“源”的经验
随着自己接触的领域越来越广,经常会遇到要配置和更换各种源的情况,比如更换 Linux 系统的系统源,使用 Python 的人需要配置 pip 源,使用 docker 的人需要配置 docker 源,使用 npm 的人也需要配置源,等等……这里我就整理了一些我用到的几个源的更换方式。
Hopetree
2022/09/26
1K0
ubuntu更换源
源就是用来apt-get下载软件的网址 不同的网络状况连接以下源的速度不同, 建议在添加前手动验证以下源的连接速度(ping下就行),选择最快的源可以节省大批下载时间。 首先备份源列表: sudo cp /etc/apt/sources.list /etc/apt/sources.list_backup 而后用gedit或其他编辑器打开: sudo gedit /etc/apt/sources.list 从下面列表中选择合适的源,替换掉文件中所有的内容,保存编辑好的文件: 注意:一定要选对版本 然后,刷新列表: sudo apt-get update 注意:一定要执行刷新 源列表
用户1148523
2019/05/27
6.5K0
Android SDK下载配置教程
https://blog.csdn.net/naipeng/article/details/72722682/
全栈程序员站长
2022/09/09
2K0
Android SDK下载配置教程
【香菇带你学Linux】yum源配置,这一篇就够了!(包括本地,网络,本地共享yum源)
yum(全称为 Yellow dog Updater, Modified)是一个在 Fedora ,centos,BClinux,RedHat 以及 CentOS 中的 Shell 前端软件包管理器。基于 RPM 包管理 , 能够从指定的服务器自动下载 RPM 包并且安装 , 可以自动处理依赖性关系 , 并且一次安装所有依赖的软件包 , 无须繁琐地一次次下载、安装。
炒香菇的书呆子
2024/08/09
10K0
pip pip3 替换国内镜像源
在采用默认 pip3 安装第三方库的时候,经常会出现超时的情况。 pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Read timed out.
Devops海洋的渔夫
2019/10/14
59K1
pip pip3 替换国内镜像源
VM中Ubuntu16.04的下载以及ROS—kinetic的版本下载
http://mirrors.ustc.edu.cn/ubuntu-releases/16.04/
用户10922923
2024/05/28
3950
VM中Ubuntu16.04的下载以及ROS—kinetic的版本下载
相关推荐
中国开源镜像
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档