- 博客(2357)
- 资源 (69)
- 问答 (17)
- 收藏
- 关注
转载 货拉拉大数据对Bitmap的探索与实践(下)
bitmap 索引广泛应用于很多大数据OLAP引擎中,如Druid、Kylin、Doris等,是一种高效的索引技术。货拉拉大数据使用Apache Druid OLAP引擎支持罗盘、AB test等多个分析场景,所以本篇将介绍在Druid中如何构建bitmap索引实现高效查询。同时也介绍了如何利用bitmap的去重能力实现高效的精确去重功能,以及为了支撑更多场景我们做的一些改造优化。希望大家读后都能有所收获。
2023-02-05 18:04:30 251
转载 货拉拉大数据对BitMap的探索与实践(上)
本文首先通过对于BitMap的简单实现以及对于Java中BitSet源码的分析,提升读者对于其底层原理的理解,然后分析了BitMap的特点,并针对其存储优化的方案,讲解了RoaringBitmap技术的原理,最后列举了对于BitMap的常见实用场景。希望大家读后都能有所收获。货拉拉大数据对BitMap的探索与实践(上)
2023-02-05 17:32:44 373
转载 爱奇艺数据仓库平台和服务建设实践
首先介绍一下爱奇艺公司整体的业务情况以及数据仓库1.0的设计和出现的问题,针对数仓 1.0 的缺陷,是如何演进到数仓2.0架构以及数仓2.0需要解决的问题和需要达成的目标。
2023-02-04 21:38:00 602
转载 大数据分析常用去重算法分析之Bitmap
去重分析在企业日常分析中的使用频率非常高,如何在大数据场景下快速地进行去重分析一直是一大难点。在 Apache Kylin Meetup 北京站上,我们邀请到 Kyligence 大数据研发工程师陶加涛为大家揭开了大数据分析常用去重算法的神秘面纱。Apache Kylin 作为目前唯一一个同时支持精确与非精确去重查询的 OLAP 引擎,非常好地覆盖了大数据上的去重需求。本次分享讲解了 Kylin 这两种去重方式背后用到的算法,希望能让大家从源头上理解为什么 Kylin 的去重查询有着如此优异的性能。
2023-02-04 16:39:48 316
原创 Hive 源码解读 Driver 语义分析器 SemanticAnalyzer
我们可以看到 AST 抽象语法树还是很抽象,不够结构化,并且也不携带表、字段相关的信息。为了方便翻译为 MapReduce 程序,AST 需要进一步的抽象和结构化转化为 QueryBlock,在这个过程中语义分析器 SemanticAnalyzer 起到了重要的作用。
2023-01-15 16:40:47 246
原创 Hive 如何实现钩子 Hooks
业界有许多开源的数据治理和元数据管理框架,可以在复杂的场景下满足元数据管理的需求。其中比较出名的 Apache Atlas 就是利用 Hive 的 Hooks 实现 Hive 的元数据管理。Hooks 是一种事件和消息机制,与插件机制比较类似,可以将事件绑定在 Hive 的执行流程中,而无需重新编译 Hive。根据不同的 Hook 类型,可以在不同的阶段触发运行。
2023-01-13 22:21:20 253
原创 Hive 源码解读 Driver 将 HQL 语句转换为 AST
Hive 使用 ANTLR3 实现 HQL 的词法和语法解析。ANTLR 是一种语言识别的工具,可以用来构造领域语言。这里不详细介绍 ANTLR,具体可以查阅ANTLR4 初识语法分析器生成工具 ANTLR。在这只需要了解使用 ANTLR 构造特定的语言只需要编写一个语法文件,定义词法和语法规则即可。ANTLR 通过词法分析器 (Lexer)、语法分析器 (Parser) 以及树分析器 (Tree Parser)等实现了词法分析、语法分析、语义分析、中间代码生成的过程。
2023-01-12 23:35:53 272
原创 Hive 源码解读 CliDriver HQL 命令处理
Hive 将 HQL 语句拆分为不同的 HQL 命令,最终交由 processCmd 方法来处理
2023-01-09 23:37:10 213
原创 Java 解决 ERROR StatusLogger No log4j2 configuration file found 异常
ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.
2023-01-08 17:12:35 1385
翻译 ANTLR4 如何编写语法文件之语法解析器规则
有许多与动作action相关的语法元素与规则相关联。规则可以像编程语言中的函数一样使用,可以有参数、返回值以及局部变量(规则可以在规则元素中嵌入动作)。ANTLR 收集定义的所有变量并将它们存储在规则上下文对象中。这些变量通常称为属性。定义在[…]中的属性可以像其他变量一样使用。// 将参数值与 INT 词条对应值相加并返回结果args, locals 和 return 的[…]通常都是目标语言,但有一些限制。[…]字符串是一个逗号分隔的声明列表,其中包含前缀或后缀类型符号或无类型符合。
2023-01-07 17:56:55 688
翻译 ANTLR4 如何编写语法文件之语法词汇
ANTLR 中的词汇大多数程序员可能都熟悉,因为它遵循 C 语言及其派生语言的语法,此外还对语法进行了一些扩展。
2023-01-03 23:33:34 285
转载 如何实现一个SQL解析器
在选择SQL解析器应用到我们实际的业务场景之前,我们先来了解一下SQL解析器的核心知识点。如何理解语法解析呢?语法解析我们可以这么来进行理解,在启动语法解析任务时,语法分析的任务会在词法分析的结果上将词条序列组合成不同语法短句,组成的语法短句将与相应的语法规则进行适配,若适配成功则生成对应的抽象语法树,否则报会抛出语法错误异常。比如如下SQL语句:SQL示例约定规则如下:上表中,红色的内容通常表示终结符,它们一般是大写的关键字或者符号等,小写的内容是非终结符,一般用作规则的命名,比如字段、表名等。
2022-12-31 15:25:04 1115 1
转载 关于 SQL 解析,为何编程语言解析器 ANTLR 更胜一筹?
ANTLR 是的简写,是一个用 Java 语言编写的识别器工具。它能够自动生成解析器,并将用户编写的 ANTLR 语法规则直接生成目标语言的解析器,它能够生成Java、Go、C等语言的解析器客户端。ANTLR 所生成的解析器客户端将输入的文本生成抽象语法树,并提供遍历树的接口,以访问文本的各个部分。ANTLR 的实现与前文所讲述的词法分析与语法分析是一致的。词法分析器根据语法规则做词法单元的拆分;语法分析器对词法单元做语义分析,并对规则进行优化以及消除左递归等操作。
2022-12-30 22:33:14 1095
原创 ANTLR4 初识语法分析器生成工具 ANTLR
Antlr 是一款强大的语法分析器生成工具,可用于读取、处理、执行以及翻译结构化的文本或二进制文件。被广泛应用于学术领域和工业生产实践,是众多语言、工具和框架的基石。Twitter 搜索使用 Antlr 进行语法分析,每天处理超过20亿次查询;Hadoop 生态系统中的 Hive、Pig、数据仓库和分析系统所使用的语言都用到了 Antlr;Lex Machina 将 Antlr 用于分析法律文本;Oracle 公司在 SQL 开发者 IDE 和迁移工具中使用了 Antlr;
2022-12-30 21:30:01 905
原创 Antlr4 Can‘t load Hello as lexer or parser
Can't load Hello as lexer or parser
2022-12-30 20:58:16 628
原创 Antlr4 xxx has been compiled by a more recent version of the Java Runtime
如果低版本的 Java 却安装高版本的 Antlr4 就会报错
2022-12-30 19:57:37 1999
转载 顺丰 基于 Hook 机制实现数据血缘系统
目前已经实现了对 Hive 和 DataX 的 Hook 模块开发,能够满足对基于 Hive 的离线数据计算任务和基于DataX 的离线数据集成任务进行血缘采集,基本满足了大多数场景下的离线任务血缘采集的需求。Hook 模块采取插件式开发模式,实现多种大数据执行引擎各自的 Hook 函数,对其任务配置参数进行解析,获取当前任务的集群信息、数据流向信息,操作规则等,并进行相应的血缘解析工作,生成TableLineageInfo 对象,最后通过 Http 请求的方式将结果发送到 Collector 端。
2022-12-29 23:54:48 1396
转载 搜狐 Hive SQL 血缘关系解析与应用
在数据仓库构建的过程中,SQL 血缘关系体现了各个数据表以及相关属性的依赖关系。SQL 血缘关系即是对业务流程涉及到的模型表进行梳理,包含了集群血缘关系、系统血缘关系、表级血缘关系和字段血缘关系,其指向数据的上游来源,向上游追根溯源。通过简单的 SQL 语句展现各个表之间的数据关系。
2022-12-29 10:39:30 1049
原创 Apache Common CLI 如何实现命令行解析
Apache Commons CLI 提供了一个解析传递给程序的命令行选项的 API 类库。此外它还能够打印帮助消息,详细说明命令行工具的可用选项。
2022-12-25 23:14:29 663
原创 Hive 源码解读 CLI 命令解读
Hive 变量内部是以 Java 字符串的方式存储的,用户可以在查询中引用变量。命令在 hivevar 命名空间自定义变量,两者是等价的,都可以让用户在命令行中自定义用户变量以便在 Hive 脚本中引用。变量和属性是在不同的上下文中使用的术语,但是在大多数情况下它们的功能是相同的。通过上面语句可以发现 dt 属性是定义在 hiveconf 命名空间下的,而不是定义在 hivevar 命名空间下。通过 SET 查看 dt 的值可以发现变量 dt 是定义在 hivevar 命名空间下的。
2022-12-23 20:21:50 664
原创 Hive 通过 Jdbc 连接 HiveServer2
如果想通过 JDBC 来访问 HiveServer2,需要开启 HiveServer2 服务
2022-12-21 21:12:40 839
原创 Hive 源码解读 准备篇 Debug 讲解
使用 Hive 执行 HQL 查询时遇到 bug,解决办法无非几种,explain HQL、查看日志、远程 Debug,本文就将详细讲解如何使用 Idea 远程 Debug。
2022-12-21 09:38:37 503 1
原创 Hive 3.1.3 编译出错 ldap-client-api:jar:0.1-SNAPSHOT 获取不到
顶层中存在一个 org.apache.directory.client.ldap:ldap-client-api,使用的是 0.1 版本,但 org.apache.directory.server:apacheds-server-integ 中也存在一个 org.apache.directory.client.ldap:ldap-client-api,版本为 0.1-SNAPSHOT,并且因为编译时找不到而失败。这个问题在 4.0.0-alpha-1 得到解决,具体可以查看。
2022-12-18 21:04:28 432
转载 Hive 3.1.2 编译出现 Unknown host snapshots.maven.codehaus.org
错误的原因是 codehaus 服务器关闭,网页 http://snapshots.maven.codehaus.org/maven2/ 打不开。Hive 可以编译了。
2022-12-18 10:39:36 228
转载 转转用户画像平台实践
用户画像是指根据用户的属性、用户偏好、生活习惯、用户行为等信息而抽象出来的标签化用户模型。通俗说就是给用户打标签,而标签是通过对用户信息分析而来的高度精炼的特征标识。通过打标签可以利用一些高度概括、容易理解的特征来描述用户,可以让人更容易理解用户,并且可以方便计算处理。简单说,就是对用户的某个维度特征的描述。对一群用户而言,我们为了能让业务做的更好,就想知道他们的很多特征。比如说,我现在有个10万块钱的活动预算,那这个钱应该集中花在哪里呢?
2022-12-16 11:36:12 347
转载 使用 Range-Encoded 实现 Bitmap 范围查询
在一些标签系统中,经常需要通过标签进行筛选,例如电商里的圈人,圈货都是根据预先打上的标签进行运算,得到最终的结果,由于用户和商品的量级往往非常大,常见的解决方案是使用bitmap存储,每个标签对应一个bitmap,通过对bitmap的压缩(数据往往非常稀疏)既可以降低存储压力,同时又能支持高效的标签运算。然而,在某些查询场景下,例如所有低于99元的男士T恤这样的圈货条件,使用bitmap处理起来就比较费劲,因为价格低于99是一个范围查询,bitmap如何支持呢?
2022-11-27 22:12:42 636 4
原创 深入理解 Hive UDAF
用户自定义聚合函数(UDAF)支持用户自行开发聚合函数完成业务逻辑。从实现上来看 Hive 有两种创建 UDAF 的方式,第一种是 Simple 方式,第二种是 Generic 方式。} }AbstractGenericUDAFResolver 提供了一种简单的方法将以前实现 GenericUDAFResolver 接口的 UDAF 迁移到 GenericUDAFResolver2 接口上。
2022-11-21 14:35:49 1332
原创 Roaring Bitmap 更好的位图压缩算法
Bitsets(也称为Bitmaps)通常用作快速数据结构。不幸的是,他们可能会占用太多内存。为了降低内存的使用,我们经常会使用压缩的位图。Roaring Bitmaps 是一种压缩的位图,要优于常规的压缩位图,例如 WAH,EWAH 或者 Concise。在某些情况下,可以比它们快几百倍,并且通常提供更好的压缩。几乎所有流行的编程语言(Java,C,C ++,Go,C#,Rust,Python …)都提供了 Roaring Bitmaps。
2022-11-13 16:08:28 1362
翻译 Flink 使用 Broadcast State 的4个注意事项
广播状态模式指的是将低吞吐量的事件流(例如,包含一组规则)广播到某个算子所有并发实例上的一种流应用程序,然后与来自另一条事件流的原始数据进行计算。动态规则:假如我们有这样一条规则,当交易值超过100万美元时需要发警报,并将这一规则广播到算子所有并发实例上。数据丰富:对只包含用户ID的交易数据流进行数据丰富,可以将广播数据与用户ID进行关联。为了实现这样的应用,广播状态是关键组件,我们将在下文详细描述。广播状态是 Flink 中支持的第三种类型的 Operator State。
2022-11-13 15:58:10 652
原创 Flink Broadcast State 实战指南
广播状态可以以某种方式组合处理两个事件流。第一个流的事件被广播到算子所有并行实例上,并存储在状态中。另一个流的事件不会被广播,但是会被发送到同一算子的各个实例上,并与广播流的事件一起处理。这种新的广播状态非常适合低吞吐量和高吞吐量流 Join 或需要动态更新处理逻辑的应用程序。我们将使用一个具体示例来演示如何使用广播状态,并展示具体的API。
2022-11-13 14:39:35 951
转载 Flink Unaligned Checkpoint 在 Shopee 的优化和实践
反压严重时,Aligned Checkpoint(下文简称 AC)超时主要在于 Barrier 在数据流中排队。反压严重时,数据流动很慢导致 Barrier 流动很慢,最终导致 AC 超时。UC 的核心思路是:当数据流动很慢时,Barrier 通过某些机制超越数据,从而使得 Barrier 可以快速地从 Source 一路超车到 Sink。
2022-11-12 22:50:09 848
翻译 深入了解 Flink 如何实现端到端的 Exactly-Once 处理语义
Flink 检查点是支持两阶段提交协议并提供端到端的 Exactly-Once 语义的基础。这个方案的一个优点是: Flink 不像其他一些系统那样,通过网络传输存储(materialize)数据 - 不需要像大多数批处理程序那样将计算的每个阶段写入磁盘。Flink 新的 TwoPhaseCommitSinkFunction 提取了两阶段提交协议的通用逻辑,并使构建端到端的 Exactly-Once 语义的应用程序(使用 Flink 和支持事务的外部系统)成为可能。
2022-11-12 15:01:36 607
原创 Flink 数据交换策略 Partitioner
我们可以看到所有的 Partitioner 都继承了 StreamPartitioner 类。StreamPartitioner 继承自 ChannelSelector 接口。这里的 Channel 概念与 Netty 不同,只是 Flink 对于数据写入实例的简单抽象,我们可以直接认为它就是下游算子的并发实例(即物理分区)。所有 StreamPartitioner 的子类都要实现 selectChannel() 方法,用来选择发送到哪个实例。
2022-11-12 10:18:37 1375
转载 Hive Count Distinct 优化
我们利用 Hive 对嵌套语句的支持,将原来一个 MapReduce 作业转换为两个作业,在第一阶段选出全部的非重复 id,在第二阶段再对这些已去重的 id 进行计数。本文我们就来分析一个简单语句的优化过程。我们看到作业运行时的 Reduce Task 个数为1,对于统计大数据量时,这会导致最终 Map 的全部输出由单个的 Reduce Task 处理。从上述优化过程我们可以看出,一个简单的统计需求,如果不理解 Hive 和 MapReduce 的工作原理,它可能会比优化后的执行过程多四、五倍的时间。
2022-11-11 22:33:14 1190
原创 Hive 分桶 Bucket
通常 Hive 中的分区功能提供了一种将 Hive 表数据分隔成多个文件/目录的方法。当只有有限个分区,分区大小差不多大情况下,分区会产生不错的效果。但在有些情况下并不能如我们所愿,比如,当我们根据国家对表进行分区时,一些较大的国家会有较大的分区(例如:4-5个国家就占总数据的70-80%),然而一些小国家分区会比较小(剩余的所有国家可能只占全部数据的20-30%)。Hive 中的分区提供了一个隔离数据和优化查询的便利方式,不过并非所有的数据都可形成合理的分区,例如,上面的情形。
2022-11-11 08:17:15 1072
转载 Bitmap用户分群方法在贝壳DMP的实践和应用
DMP数据管理平台是实现用户精细化运营和和全生命周期运营的的基础平台之一。贝壳找房从2018年5月开始建设自己的DMP平台,提供了用户分群、消息推送、人群洞察等能力。DMP平台在贝壳的实践和应用。目前,贝壳 DMP 数据覆盖了贝壳和链家的数亿用户,用户偏好和行为数据量达到数十亿,拥有上千维画像标签。在海量用户画像数据基础上实现用户分群,同时满足业务方越来越复杂的标签组合需求,提高人群包构建速度同时保证数据准确性,为此,我们对DMP平台进行了持续的迭代优化。
2022-11-08 08:36:30 972
Android应用开发揭秘
2015-12-17
Android开发秘籍
2015-12-17
Android开发精要
2015-12-17
Android技术内幕.系统卷
2015-12-17
Android高级编程
2015-12-17
JavaEE企业应用实战-Struts2+Spring3+Hibernate整合开发
2015-12-17
Mahout算法解析与案例实战
2015-12-16
LINUX内核设计与实现
2015-12-14
重构-改善即有代码的设计
2015-12-14
算法艺术和信息学竞赛
2015-12-14
apache-mahout-distribution-0.11.1-src
2015-11-30
log4j-1.2.17
2015-11-30
apache-maven-3.3.9-bin
2015-11-30
Better bitmap performance with Roaring bitmaps
2023-03-06
美团外卖离线数仓建设实践
2023-02-19
Redis 入门指南
2017-06-02
Apache Spark源码剖析
2016-11-12
Shell脚本学习指南
2016-05-28
精通Spring
2016-02-07
Spring-Jar-4.2.4
2016-01-28
log4j所需jar包
2016-01-20
Hadoop实战中文版
2015-12-25
大型网站技术核心原理与案例分析
2015-12-25
Hive Range Between 结果错误问题
2023-02-28
Storm Trident 抛异常不重发
2018-11-23
hive SERDEPROPERTIES 实现正则过滤
2018-06-05
Flink 关于窗口Window的问题
2018-01-17
Hive 运行SQL 重定向文件 输出WARN日志
2017-06-13
Hadoop Distcp报错 队列问题
2017-01-17
Hive Join 失败
2016-11-28
Hive 查询问题
2016-09-07
Hive LOAD DATA 错误
2016-07-23
[ElasticSearch] 中文字符串精确搜索 term 搜不到结果
2016-07-05
mysql group by 统计问题
2016-06-17
大型分布式网站架构的演进
2016-05-16
ubuntu IntelliJ Idea设置快捷方式问题
2016-03-08
罗技键盘 k380 连接上 没有任何的反应?
2016-03-06
Maven archetype:generate报错
2016-01-25
Log4j问题
2016-01-16
Java Stringbuilder调用append()方法报错
2015-12-20
nosql开放性问题
2015-12-18
TA创建的收藏夹 TA关注的收藏夹
TA关注的人