• 博客(52)
  • 收藏
  • 关注

原创 创建Iceberg表的步骤——《DEEPNOVA开发者社区》

本文讲述了不同引擎,主要是Hive、Spark、Flink和Trino,在创建Iceberg表上存在的兼容性问题及其产生的原因,然后给出了解决办法。最后,通过抽象一种创建跟引擎无关的Iceberg表的表示方法及其创建步骤。该方法的重要作用是能够实现通用的元数据管理。

2022-09-09 15:26:10 1036 1

原创 使用Hive SQL查询Iceberg表的正确姿势——《DEEPNOVA开发者社区》

Iceberg作为一种表格式管理规范,其数据分为元数据和表数据。元数据和表数据独立存储,元数据目前支持存储在本地文件系统、HMS、Hadoop、JDBC数据库、AWS Glue和自定义存储。表数据支持本地文件系统、HDFS、S3、MinIO、OBS、OSS等。元数据存储基于HMS比较广泛,在这篇文章中,表数据存储基于MinIO、元数据存储主要基于HMS。......

2022-08-26 10:35:52 469

原创 报名中 | 滴普科技FastData2.0产品升级发布会

随着数字化的深入发展,企业内部数据呈现出大规模且多样性的增长态势,数据业务场景愈发复杂,需要面对海量大数据场景下的实时处理、非结构化数据治理等需求。滴普科技核心产品实时湖仓平台FastData,全面整合了从数据源、数据分析到数据价值实现的完整链路,帮助企业建立统一治理、流批一体、湖仓一体的云原生数据智能平台,实现海量数据实时分析。作为一种新兴的开放结构,湖仓一体平台既具备数据湖的灵活性,又具备数据仓库的易用性和规范性,同时拥有高性能的新型融合架构,有效解决企业建设数据平台过程中面临的挑战。.........

2022-08-17 10:57:08 250

原创 Spark Catalog深入理解与实战——《DEEPNOVA开发者社区》

CatalogManager维护了所有Catalog实例的键值对信息,能够根据catalog名称返回对应的Catalog实例,其中有一个固定的名字叫spark_catalog,用于当前默认的Catalog实例实现,该示例就是V2SessionCatalog,它代理了普通的SessionCatalog,因此,在使用时,即使什么Catalog都不注册,Spark也会根据默认的Catalog实例加载Hive数据源。上面介绍了Spark Iceberg对多类型Catalog的支持,下一步自然要问,这有什么用?...

2022-08-17 10:09:37 853

原创 fastjson的toJSONString()对于时间类的特殊处理源码分析——《DEEPNOVA开发者社区》

本篇文章是在项目迭代的过程中,发现了的一个有趣的bug所引发出来的源码分析,在这里以点破面,研究一下fastjson的源码

2022-07-08 16:58:13 869

原创 hudi中zorder采样分区流程分析——《DEEPNOVA开发者社区》

hudi在数据聚集方面,支持使用zorder对数据进行重排。做zorder排序主要流程分为三步:-对于用户指定的每个zorder字段,生成对应的z值。-把所有zorder字段生成的z值进行比特位的交叉组值,生成最终的z值。-根据最终z值,对所有数据进行排序。在上面第一步中,每个字段生成自己的z值方式主要有两种:-直接的值映射方式。该方式实现简单,容易理解,但也有缺陷:参与生成z值的字段理论上需要是从0开始的正整数,这样才能生成很好的z曲线,但真实的数据集中基本不可能出现,那么zorde...

2022-07-08 16:40:54 737

原创 数据湖常用查询优化技术——《DEEPNOVA开发者社区》

每个Iceberg文件的头部元数据信息中记录了当前文件每个列的最大最小值,比如下图中的parquet文件数据记录包含两列:year和uid,file1.parquet中列year的最大和最小值分别是2019和2018,列uid的最大和最小值分别是23000和12000。当我们进行查询select * from event where year=2019 and uid=20000因为这些元数据信息在数据写入文件时最终收集,因此在查询时候,很容易利用这些统计信息过滤掉不符合条件的数据文件。比如示...

2022-07-08 15:31:16 319

原创 利用jemalloc解决flink的内存溢出问题

遇到一个Linux系统 glibc内存分配导致的OOM问题,根源是内存回收出现问题,导致碎片太多,内存无法回收,系统认为内存不够用了。涉及到以下知识点:1、Linux中典型的64M内存区域问题2、glibc内存分配器ptmalloc2的底层原理3、glibc的内存分配原理(Arean、Chunk、bins等)4、malloc_trim对内存回收的影响......

2022-06-21 18:12:05 4886

原创 聊聊flink水位线

flink中比较重要的是时间和状态,学习flink的过程中对水位线的理解一直模糊,经过一段时间的消化,在此总结总结。本文主要把水位线是什么,怎么来的,有什么用描述清楚。

2022-06-21 18:06:54 1135

原创 分析Iceberg合并任务解决数据冲突

iceberg提供合并小文件功能,可以按照用户的配置文件,把多个符合配置的小文件合并成多个大文件。该流程主要是对源数据做了一次复制。但在实际生产环境中,数据是一直在变化的,有可能会出现这种情况:在还未完成数据合并任务时,对之前的数据做出了修改,这就导致正在合并的数据与新数据可能会产生冲突。那么iceberg是如何处理这种数据冲突的呢?...

2022-06-21 17:40:30 1728

原创 Hudi起源分析——DEEPNOVA开发者社区

1、概述Hudi(Hadoop Update Delete Incremental)官方介绍是为数据湖之上提供事务支持、行级别更新/删除(Row Level Update/deletes)和变更流(Change Stream)的一个数据湖框架,最早是由Uber开发于2016年,2017进入开源社区,并在2020年成为Apache 顶级项目。本文会从Hudi诞生背景条件出发,搞清楚Hudi最初是为了解决什么问题而出现的。2、近实时场景需求随着大数据技术的发展,逐渐发展出了两种比较成熟的计算模型:一种是

2022-04-25 16:18:01 431

原创 精彩回顾 | DEEPNOVA x Iceberg Meetup Online《基于Iceberg打造实时数据湖》

4月16日,由DEEPNOVA开发者社区与Iceberg社区共同推出的“DEEPNOVA MEETUP Online”活动顺利举行。以《基于 Iceberg 打造实时数据湖》为主题,本次活动邀请了来自阿里云、网易数帆、滴普科技等企业技术专家,共同探讨Iceberg技术发展史及在国产化数据中的应用与实践,展望湖仓一体技术未来发展趋势与行业前景。核心内容:Apache Iceberg过去、现状及未来网易湖仓管理系统ArcticFastData DLink基于Iceberg 构建实时数据湖的优化与实践

2022-04-21 18:29:18 446

原创 Fiber 调度机制

作者:温荣蛟上篇提到为了解决任务调度粒度控制不够的问题,React引入了Fiber架构。Fiber将一个DOM更新任务拆分为由多个原子化可调度的节点组成的集合,从而提供了细粒度的任务调度能力。Fiber这个名词并不是React的首创,和服务器端开发中的中纤程(Fiber)相同,后端开发中的纤程,也有着不同的名字,例如C/C++的协程、Java中的Loom(孵化中)、Go中的goroutine;这些不同名字的背后其实都是一个目的——通过线程复用降低线程的使用成本。操作系统提供了进程和线程供用户进行使用,

2022-04-08 18:30:07 1761

原创 【DEEPNOVA x Iceberg】基于 Iceberg 打造实时数据湖-线上meetup火热报名中

扫描上图二维码,可直接报名参与线上活动。转发分享直播间邀约参与者,邀约榜前三名还可获得DEEPNOVA专属周边礼盒。快来报名吧!4月16日,DEEPNOVA 开发者社区联合Iceberg社区共同推出的“DEEPNOVA MEETUP Online”将正式举行,活动主题为《基于 Iceberg 打造实时数据湖》。DEEPNOVA 开发者社区是面向技术开发者的交流学习、生态共创平台。滴普科技一直积极拥抱开源生态,为Iceberg社区做出突出贡献。作为此次活动召集人,滴普科技 FastData 产品线总裁.

2022-04-02 16:31:52 1931

原创 Flink中基于Operator State 的计算开发方法

文:王东阳前言在Flink中根据数据集是否根据Key进行分区,将状态分为Keyed State和Operator State(Non-keyed State)两种类型 ,在之前的文章《Flink中基于KeyedState的计算开发方法》已经详细介绍了Keyed State的概念和用法,本文将继续介绍Operator State。Operator State与Keyed State不同的是,Operator State只和并行的算子实例绑定,和数据元素中的key无关,每个算子实例中持有所有数据元素中的一

2022-03-22 09:44:38 408

原创 Flink中基于State的有状态计算开发方法

文:王东阳前言状态在Flink中叫作State,用来保存中间计算结果或者缓存数据。根据是否需要保存中间结果,分为无状态计算和有状态计算。对于流计算而言,事件持续不断地产生,如果每次计算都是相互独立的,不依赖于上下游的事件,则是无状态计算。如果计算需要依赖于之前或者后续的事件,则是有状态计算。在Flink中根据数据集是否根据Key进行分区,将状态分为Keyed State和Operator State(Non-keyed State)两种类型 ,本文主要介绍Keyed State,后续文章会介绍Oper

2022-03-16 16:22:53 2335

原创 Flink temporal table join研究

作者:王东阳前言ANSI-SQL 2011 中提出了Temporal 的概念,Oracle,SQLServer,DB2等大的数据库厂商也先后实现了这个标准。Temporal Table记录了历史上任何时间点所有的数据改动,Temporal Table具有普通table的特性,有具体独特的DDL/DML/QUERY语法,时间是其核心属性。历史意味着时间,意味着快照Snapshot。Apache Flink遵循ANSI-SQL标准,Apache Flink中Temporal Table的概念也源于ANSI

2022-03-07 10:19:09 2478

原创 Flink、Iceberg和Hive的Catalog比较研究

所谓Catalog即数据目录,简单讲,Catalog是企业用于管理数据资产的方式,Catalog借助元数据来管理数据,包括数据收集、组织、访问、发现和治理。可见,Catalog在数据资产管理中处于核心位置。元数据本身内容非常丰富,包括技术元数据、业务元数据和操作元数据,本文仅仅研究大数据计算存储框架本身的技术元数据,比如数据库、数据表、分区、视图、函数等。限于篇幅,参与比较的计算存储框架为Flink、Iceberg和Hive,比较维度为Catalog的定义、Catalog的实现和生态拓展几个方面。Cata

2022-02-28 10:43:47 2218

原创 Flink 流式写入Iceberg实现原理

Iceberg作为凌驾于HDFS和S3等存储系统之上的数据组织框架,提供了数据写入、读取、文件管理和元数据管理等基本功能,虽然Iceberg提供了丰富的API接口,但是面向API开发需要使用方比较了解其原理和实现细节,还是显得门槛过高。此外,在面向实时数据读写场景,需要有一个桥接框架来自动完成数据的读写,于是Iceberg和Flink成为天作之合,本文就来研究下Iceberg是如何跟Flink对接的。Flink写入Iceberg总体流程介绍Flink典型的数据处理链路是Source->Transf

2022-01-27 15:08:54 2728 1

原创 Go Rust 排序和二分搜索的对比

作者:王东阳前言在计算机科学中,排序和二分搜索是非常常见的一种算法,在上篇文章leveldb memdb源码分析(下)之Rust实现篇中,就可以看到里面很多方法都用到了二分搜索来实现。本文将会对比 Go 和 Rust 语言中排序和搜索方法中的一些特性和不同,对于Go主要使用数字切片 []int 作为例子, 对于 Rust 主要使用 Vec 作为例子 。排序在Go语言中,对于 []int 我们可以直接使用 sort.Ints 进行排序如下:func sort_simple() { a := []i

2022-01-14 10:49:38 381

原创 一种基于Flink Window的实时指标统计方法

需求背景假设有一种数据源(比如CDC binlog Events、Kafka 实时数据流等),需要实时展示时序数据的摄入数量趋势,并能查看任意时间范围内的数据分布质量(比如每个字段的数据密度、总取值数量、去重后的数据取值总量等),最小时间范围间隔为1分钟,最大范围不限制。展示样例见下图,如何在计算资源有限的情况下(不使用分布式MPP查询引擎等),在可接受的时间内给出响应。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A6zp0oAC-1640934270369)(/Use

2021-12-31 15:04:56 1567

原创 Flink Checkpoint是否支持Kafka 数据消费状态的维护?

作者:闻乃松使用Flink实时消费kafka数据时候,涉及到offset的状态维护,为了保证Flink作业重启或者运行时的Operator级别的失败重试,如果要做到“断点续跑”,需要Flink的Checkpoint的支持。问题是,如果简单的开启Flink的Checkpoint机制,而不需要额外的编码工作,是否能达到目的?为回答该问题,本文首先要研究Flink的Checkpoint的处理机制,然后再看Flink是否支持Kafka的状态存储,于是本文分以下四个部分:Flink Checkpoint 状态快

2021-12-23 14:48:04 1191

原创 leveldb sstable min max区间搜索源码分析(1)

作者:王东阳leveldb 中min_max搜索分析前言leveldb是一个写性能十分优秀的存储引擎,是典型的LSM树(Log Structured-Merge Tree)实现。LSM树的核心思想是将随机写转化为连续写,从而提升写操作的吞吐能力,整体架构如下:虽然在内存中,所有的数据都是按序排列的,但是当多个memetable数据持久化到磁盘后,对应的不同的sstable之间是存在交集的,在读操作时,需要对所有的sstable文件进行遍历,严重影响了读取效率。因此leveldb后台会“定期“整合

2021-12-23 14:40:41 420

原创 React Fiber 系列(一)

作者:温荣蛟Fiber背景React Fiber是react核心算法的重新实现,跟随react v16大版本发布,解决了上一版复杂节点更新掉帧的现象,同时优化了内部任务的调度逻辑,让任务更加可控。本文将分析fiber的设计背景。1.旧时代的ReactFacebook 在13年开源了react框架,其革命性的设计和友好的开发体验使得它迅速得到一大波开发者的拥护,成为主流开发框架。其特点如下:声明式设计:开发者只需要面向数据,不需要关心视图层,数据将驱动视图的更新。使创建交互式的UI变得轻而易举。组

2021-12-13 11:34:08 850

原创 实时作业转离线作业的几种场景及方案

作者:闻乃松将Flink流式计算引擎作为实时计算作业的标配带来的重大挑战之一是资源占用问题,因为大量的Flink作业一旦启动,将一直占用分配的CPU和内存资源,而不会自动释放(除非是批处理模式),并且不会随着处理负载自动伸缩。本文探讨如何在计算资源有限的情况下,如何最大化利用计算资源。基本思路是将流式计算任务中基于时间触发的子过程转化为离线定时调度计算任务。下面列举几种常见的场景,权且当做验证。一、Kafka数据入湖(仓)作业比如这样一个kafka topic数据导入示例,将拉取的数据不加处理地写入到

2021-12-13 11:22:05 179

原创 DLink 流批一体技术架构及优势 | 滴普科技FastData系列解读

一、引言在上期的两篇连载文章中,我们分析了Lambda 和 Kappa 架构固有的一些问题,同时也引出了流批一体架构的优势,本文就 FastData流批一体大数据平台DLink ,如何基于 Flink + Iceberg 流批一体技术及其实践进行初步探讨。二、需求背景传统的基于离线(比如 Hive)数仓有很高的成熟度和稳定性,但在一些时延要求比较高的场景,则需要借助实时数仓 Flink 的帮助,将延时降低到秒级(或分钟级),但两套并存的数仓架构,势必带来双倍的资源消耗和开发维护工作量。那么,是否存在.

2021-12-07 17:25:22 4459

原创 Hive小文件问题及处理

作者:张建第一章 小文件过多带来的三个影响Hive是一个建立在Apache Hadoop之上建立的一个数仓系统,Hive使用Hadoop中的HDFS组件存储数据文件。在使用hive时通常会遇到小文件问题,即存储在HDFS上的数据文件是明显小于HDFS文件块大小的。小文件问题通常会带来以下影响。1.1 HDFS内存资源消耗过大,并限制了数据存储规模在HDFS中,具体的文件保存在datanode节点中,在namenode节点中会有一个内存对象与之对应,用于存储文件的元信息,如位置、大小、分块等,每个对象

2021-11-29 10:41:44 5667

原创 消失的var

相信大部分有接触前端开发的朋友对var关键字非常的熟悉,但是到现代工程中你会发现var关键字正在舍弃,有的甚至使用lint(eslint no-var)工具明确禁用var,var关键字正在消失。1.var的定义MDN文档对var的描述是:变量声明,无论发生在何处,都在执行任何代码之前进行处理。用 var声明的变量的作用域是它当前的执行上下文,它可以是嵌套的函数,或者对于声明在任何函数外的变量来说是全局。如果你重新声明一个 JavaScript 变量,它将不会丢失其值。描述的第一句话提到的就是va

2021-11-29 10:28:22 516

原创 Rust之美迭代器在算法中的应用

我们定义,在以下情况时,单词的大写用法是正确的:全部字母都是大写,比如 "USA" 。单词中所有字母都不是大写,比如 "leetcode" 。如果单词不只含有一个字母,只有首字母大写, 比如 "Google" 。给你一个字符串 word 。如果大写用法正确,返回 true ;否则,返回 false 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/detect-capital著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明

2021-11-22 15:22:35 366

原创 大数据流处理架构 | 滴普科技FastData系列解读

在大数据技术发展早期,离线计算(批处理)作为唯一的大数据处理技术,很快在各个场景下取得了惊人成果,吸引了一大批优秀的科学家和工程师,这些因素的叠加使大数据技术快速成熟,形成了以HDFS+YARN+Spark为格局的Hadoop生态体系。同时,离线计算也成为了大数据的主流技术,但在由Hadoop构筑的离线计算大厦上空,却也飘着几朵乌云,其中一朵就是高延迟。1. 流处理架构产生的背景Hadoop在设计之初便确定了架构目标:高吞吐、高容错、易扩展。而高吞吐和低延迟又在一定程度上对立,因此早期Hadoop在.

2021-11-16 16:21:10 2472

原创 greenplum 数据分布策略分析

greenplum 数据分布策略分析greenplum 是一个 MPP 架构的数据库,由一个 master 和多个 segment 组成(还可选配置一个 standby master),其数据会根据设置的分布策略分布到在不同的 segment 上。在 6 版本中,gp 提供了 3 个策略:随机分布、复制分布、hash 分布。随机分布在创建表的时候,使用 “DISTRIBUTED RANDOMLY” 子句。该策略会使数据随机分布到各个 segment,即使是完全一样的两行数据,也可能会被分散至不同的

2021-11-16 16:07:54 2373

原创 leveldb memdb源码分析(下)之Rust实现篇

前言leveldb中memdb模块使用skiplist作为一个kv的内存存储,相关代码实现非常漂亮。在上文介绍了下面内容:对比c++和golang版本中查询、插入、删除的实现分析golang版本中可以优化的地方,然后对rust版本进行优化然后在本文中将会介绍如何参考goleveldb的版本使用rust重写memdb(arena版本)使用rust重写一个非arena版本的memdb,也就是经典的链表结构实现方式arena实现参考 goleveldb DB 的代码,同时考虑到并发安全,所

2021-11-15 11:18:39 381

原创 leveldb memdb源码分析(上)

前言最近在研究学习leveldb的源码,并且尝试用Rust进行重写leveldb-rs,leveldb中memdb模块是使用skiplist作为一个kv的内存存储,相关代码实现非常漂亮,所以有了这篇文章。 leveldb通过使用Arena模式来实现skiplist。简单来说,就是利用线性数组来模拟节点之间的关系,可以有效避免循环引用。c++版本的leveldb虽然也是使用的arena模式,但是节点数据内存的申请和访问进行了封装,skiplist的结构定义和实现跟传统意义上的skiplist的代码实现非

2021-11-02 12:23:41 783

原创 Let‘s Go Rust 系列之for对比

前言在golang中提供了for range 语法糖帮助我们方便的遍历数据或切片,也可以遍历map和channel;在rust中则提供了 for in 语法糖帮助我们方便的遍历Array,Vector或切片,也可以遍历map。本文将会通过多种类型的例子介绍两种语言中这些语法糖背后的机制以及使用不当可能遇到的陷阱。遍历方式对比Golang我们先来看Golang中的三种遍历方式:arr := []int{2, 4, 6} // 只要索引 for i := range arr {

2021-11-02 11:39:31 298

原创 Let‘s Go Rust 系列之定时器 Ticker Timer

前言在实际项目开发中,经常会有定时任务的功能开发需求,定时任务主要分为两种,1,在固定的时刻执行某个任务,也就是 Timer2,基于固定的时间间隔,周期的执行某个任务,也就是Ticker​很多基于时间的调度任务框架都离不开这两种类型。本文将会分别介绍在Golang和Rust语言中这两种定时器类型以及它们的使用方法。GolangGolang的标准库 time 中就包含了 Ticker 和 Timer 这两种定时器类型,在package中添加引用就可,如下: ​import ( "ti

2021-10-26 16:10:12 2232

原创 Rust开发postgres扩展

前言Rust 语言是一门通用系统级编程语言,无GC且能保证内存安全、并发安全和高性能而著称。自2008年开始由 Graydon Hoare 私人研发,2009年得到 Mozilla 赞助,2010年首次发布 0.1.0 版本,用于Servo 引擎的研发,于 2015年5月15号发布 1.0 版本。 自发布以来,截止到2021 年的今天,经历六年的发展,Rust 得到稳步上升,已逐渐趋于成熟稳定。 至 2016 年开始,截止到 2021年,Rust 连续五年成为 StackOverflow 语言榜上最受欢迎

2021-10-26 11:23:35 557

原创 基于channel的通信模型实践

前言channel 作为 Go 核心的数据结构和 Goroutine 之间的通信方式,Channel 是支撑 Go 语言高性能并发编程模型的重要结构本节会介绍管道 Channel 的设计原理、数据结构和常见操作,例如 Channel 的创建、发送、接收和关闭。 ​在进入主题内容之前,读者需要先掌握下表中的不同状态下的channel执行Read、Write、close操作所会产生的结果。图来自 曹大 https://github.com/cch123 ​Go 语言中最常见的、也是经常被人提及的设计模

2021-10-25 17:02:14 339

原创 sarama的消费者组分析、使用

kafka的go客户端,使用最多的应该是sarama,但以前老的sarama版本不支持消费者组的消费方式,所以大多数人都用sarama-cluster。后来sarama支持了消费者组的消费方式,sarama-cluster也停止维护了,但网上关于sarama的消费者组的解析很少,且官方的样例很简单,所以这里分析一下。一、官方样例官方样例比较简单:1、通过 sarama.NewConfig 创建一个配置2、通过 NewConsumerGroup 创建一个消费者组3、通过 Consume 创建消费者

2021-10-22 15:20:24 3091 1

原创 Clickhouse存储引擎的存储模型及工作机制

Clickhouse存储引擎的存储模型及工作机制本章将向读者完整地介绍clickhouse存储引擎的存储模型及工作机制)文件组织在大部分的DBMS中,数据库本质上就是一个由各种子目录和文件组成的文件目录,clickhouse当然也不例外。clickhouse默认数据目录在/var/lib/clickhouse/data目录中。所有的数据库都会在该目录中创建一个子文件夹。下图展示了clickhouse对数据文件的组织。每一个数据库都会在clickhouse的data目录中创建一个子目录,clickh

2021-10-22 11:55:55 636

原创 滴普技术荟:OpenKube重塑企业统一管控平台

作者: 崔渡康滴普科技 2048事业部 解决方案架构师近10年企业数字化转型、上云咨询、架构设计曾就职于HP、华为云一、统一管控平台建设背景传统工业企业的管控平台采用的是Vmware虚拟化架构。某企业用户将业务系统部署在物理机、传统虚拟化环境,各个业务模块会深度耦合,资源不能灵活的水平扩展。因此客户希望统一云管平台的建设实现数据中心资源统一部署管理、高效协同以及资源充分利用。需要针对工厂现有资源和新建业务系统资源,部署一套基于云原生架构的混合云管理平台,构建混合云管理能力,支撑业务系统一致性部署.

2020-12-29 14:53:44 514 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除