
大数据学习之路
文章平均质量分 82
这个系列是大数据相关知识,大致包含五个方面,第一个个阶段是linux和高并发基本知识;第二个是hadoop体系的离线计算;第三个阶段是spark体系的分布式计算;第四个阶段是机器学习和数据挖掘相关部分,最后第 五阶段是大数据项目实战
敲代码的乔帮主
走在梦想的大道上,跌跌撞撞,时而悲伤,时而难过失落,是什么又让我扬起头继续向前呢?是心中的那一朵彼岸之花,牵使着你我之间的约定,成为我心中那一股永不可灭的骨气,终究是信仰。
展开
-
大数据学习之路
这个系列是大数据相关知识,大致包含五个方面,第一个阶段是linux和高并发基本知识;第二个是hadoop体系的离线计算;第三个阶段是spark体系的分布式计算;第四个阶段是机器学习和数据挖掘相关部分;最后第五阶段是大数据项目实战。原创 2020-02-22 17:42:14 · 2411 阅读 · 3 评论 -
4.1.28 Flink-流处理框架-Flink使用Lambda表达式引发了泛型擦除问题
1.写在前面 最近在重温Flink相关知识点的时候,发现了一个以前没有注意的点,当我们利用Flink的lambda表达式的时候,返回值要类型要给定,不给定的话,就会报错。如下:could not be determined automatically, due to type erasure. You can give type information hints by using the returns(...) method on the result of the tran...原创 2022-04-07 21:46:59 · 3707 阅读 · 3 评论 -
2.3.12 hadoop体系之离线计算-Hive数据仓库-HIVE的严格模式
目录1.写在前面2.参数设置3.分别解释1.写在前面最近在写一个sql,碰见一个报错,内容如下:Error while compiling statement: FAILED: SemanticException Cartesian products are disabled for safety reasons. If you know what you are doing, please sethive.strict.checks.cartesian.prod...原创 2022-03-21 18:51:46 · 726 阅读 · 0 评论 -
4.3.4 Flink-流处理框架-Flink CDC数据实时数据同步-Flink CDC实操-DataStream方式-自定义反序列化器实现
目录1.写在前面2.Maven依赖3.代码实现3.1 自定义反序列化器 CustomerDeserialization3.2 主函数 FlinkCDCWithCustomerDeserialization4.集群测试4.1 环境准备4.2 查看任务结果1.写在前面Flink CDC有两种实现方式,一种是DataStream,另一种是FlinkSQL方式。DataStream方式:优点是可以应用于多库多表,缺点是需要自定义反序列化器(灵活) FlinkSQL方式.原创 2022-03-16 19:26:14 · 3936 阅读 · 0 评论 -
4.3.5 Flink-流处理框架-Flink CDC数据实时数据同步-Flink CDC实操-FlinkSQL方式
目录1.写在前面2.Maven依赖3.代码实现-普通实现4.集群测试4.1 环境准备4.2 查看任务结果1.写在前面Flink CDC有两种实现方式,一种是DataStream,另一种是FlinkSQL方式。DataStream方式:优点是可以应用于多库多表,缺点是需要自定义反序列化器(灵活) FlinkSQL方式:优点是不需要自定义反序列化器,缺点是只能应用于单表查询2.Maven依赖<dependencies> &...原创 2022-03-16 19:17:04 · 3468 阅读 · 1 评论 -
4.3.3 Flink-流处理框架-Flink CDC数据实时数据同步-Flink CDC实操-DataStream方式
目录1.写在前面2.相关依赖3.代码实现4.运行效果1.写在前面 Flink CDC有两种实现方式,一种是DataStream方式,一种是FlinkSQL方式。2.相关依赖<dependencies> <dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-ja...原创 2022-03-16 18:59:43 · 3757 阅读 · 0 评论 -
4.3.2 Flink-流处理框架-Flink CDC数据实时数据同步-何为Flink CDC?
目录1.写在前面2.Flink CDC出现的动机3.基于传统的CDC的ETL分析4.基于Flink CDC的ETL分析5.支持的版本和连接器1.写在前面CDC是一种可以捕获数据库变更的技术,用于数据同步、数据分发和数据采集等多个现实场景。像我们比较熟知的DataX、Canal、Sqoop等多个框架就是常见的CDC开源工具。Flink CDC一开始只是阿里-云邪个人的一个兴趣孵化项目,于2020年7月提交了第一个commit,2020 年...原创 2022-03-16 18:49:38 · 3314 阅读 · 1 评论 -
4.3.1 Flink-流处理框架-Flink CDC数据实时数据同步-何为CDC?
目录1.写在前面2.实现机制3.开源CDC方案对比1.写在前面CDC 的全称是 Change Data Capture((变更数据获取),在广义的概念上,只要是能捕获数据变更的技术,我们都可以称之为 CDC 。目前通常描述的 CDC 技术主要面向数据库的变更,是一种用于捕获数据库中数据变更的技术。核心思想是,监测并捕获数据库的 变动(包括数据或数据表的插入、更新以及删除等),将这些变更按发生的顺序完整记录下 来,写入到消息中间件中以供其他服务进行订...原创 2022-03-16 18:14:28 · 3484 阅读 · 1 评论 -
2.1.9 hadoop体系之离线计算-hdfs分布式文件系统-Hadoop数据压缩
目录1.写在前面2.MR支持的压缩编码3.压缩配置参数总结1.写在前面最近项目中用到了LZO压缩方式,这种压缩方式在hadoop文件中压缩效率非常高,想着hadoop本身也自带了包括default/gzip等压缩方式,这篇文章做一下对比学习,看一下每个压缩方式的使用场景,便于后面选型。压缩本身是为了减轻磁盘IO压力,节省存储资源,但是运用不当的话可能会适得其反,降低性能。那什么时候才应该使用压缩文件这个优化技巧呢?一般我们将job分为运算密集型job和...转载 2022-01-10 19:38:10 · 238 阅读 · 0 评论 -
1.2.6 linux和高并发-linux基本命令-linux环境变量配置说明
Linux 的环境变量可在多个文件中配置,如 /etc/profile,/etc/profile.d/*.sh,~/.bashrc, ~/.bash_profile 等,那么配置在不同的位置,都有哪些区别呢?我之前也没有太在意过这个问题,一般我喜欢配置在/etc/profile下面,也没有出过什么问题。最近在看一些文章的时候,发现大家配置环境的位置各式各样,搜集了一些相关信息,总结一下区别。1.交互式shell和非交互式shell首先我们要弄明白两个概念,bash的运...原创 2022-01-04 19:59:53 · 715 阅读 · 0 评论 -
阿里云DataWorks数据集成(DataX)架构&实践分享
阿里云DataWorks数据集成(DataX)架构&实践分享分享嘉宾:罗海伟阿里云编辑整理:约理中国科学院大学目录阿里云DataWorks数据集成(DataX)架构&实践分享▌为什么需要数据集成数据集成的应用场景数据集成的角色和地位▌阿里云数据集成大事记▌阿里云数据集成产品定位和业务支撑情况阿里云数据集成产品定位阿里云数据集成业务支撑情况▌阿里云数据集成DataX设计核心思路离线数据同步原理实时数据同步原理▌阿里云数据集成Dat..原创 2021-09-29 16:18:30 · 7068 阅读 · 0 评论 -
2.3.11 hadoop体系之离线计算-Hive数据仓库-MaxCompute SQL多维聚合求PV和UV
1.写在前面 最近遇到一个问题,需要对多个维度的多个组合聚合查询。比如我们的日志流量中有用户id,商铺id,用户和商铺又可以属于不同的类别,当需要统计,不同类别人群在不同类别商铺中的消费情况的时候,就需要用到这个知识。2.数据构造 我们模拟构造一个cube_demo表,表中有三个字段,id,国家,性别,我们想要统计不同国家,不同性别的PV和UV。CREATE TABLE IF NOT EXISTS cube_demo LIFECYCLE 3 ASSELECT ...原创 2021-07-29 09:43:03 · 514 阅读 · 0 评论 -
2.3.10 hadoop体系之离线计算-Hive数据仓库-MaxCompute SQL调优
1.写在前面今天跟大家分享的内容是maxcompute的优化内容,希望能够起到抛砖引玉的作用。我将从三个方面开展这次的主题分享,第一个部分是max和hive的对比;第二部分是调优方法论,主要是想总结一下我们从代码提交到执行结束,都有哪些位置可能会出现问题,一般情况下又是怎么解决的;最后是结合具体案例,对长尾问题的一些思考。2. MaxCompute对比Hive首先,先对其简单做个介绍,MaxCompute主要是应用在批量结构化数据的存储和计算,主要是数据仓库的...原创 2021-07-13 17:51:46 · 1159 阅读 · 2 评论 -
2.3.9 hadoop体系之离线计算-Hive数据仓库-hql实现wordcount操作
1.写在前面类比hql理解,hive出现的目的就是因为MapReduce编程太不方便了,想写一个wordcount,需要写一个Mapper的子类+Reducer的子类,最后还要写一个主类用来描述job、提交job(mapreduce实现WordCount)。hql的出现大大简化了这一流程,直接分割文本,切出每个单词,利用行转列将每个单词作为一行统计次数即可。2.sql实现先直接上SQL语句,可以看出SQL实现确实比MapReduce实现要清爽得多。大概实现流程分为三步:分割本...原创 2021-06-30 20:45:09 · 346 阅读 · 0 评论 -
4.2.11 Flink-流处理框架-Table API 与 SQL-函数(Functions)之用户自定义函数 UDF
1.写在前面 用户定义函数(User-defined Functions,UDF)是一个重要的特性,因为它们显著地扩展了查询(Query)的表达能力。一些系统内置函数无法解决的需求,我们可以用 UDF 来自定义实现。 在大多数情况下,用户定义的函数必须先注册,然后才能在查询中使用。不需要专门为 Scala 的 Table API 注册函数。 函数通过调用 registerFunction()方法在 TableEnvironment 中注册。当用户定义的函数被注册时,...原创 2021-03-15 23:27:20 · 446 阅读 · 0 评论 -
4.2.10 Flink-流处理框架-Table API 与 SQL-函数(Functions)之内置函数
Flink Table API 和 SQL 为用户提供了一组用于数据转换的内置函数。SQL 中支持的很多函数,Table API 和 SQL 都已经做了实现,其它还在快速开发扩展中。 以下是一些典型函数的举例,全部的内置函数,可以参考官网介绍。...原创 2021-03-15 14:25:36 · 329 阅读 · 1 评论 -
4.2.9 Flink-流处理框架-Table API 与 SQL-流处理中的特殊概念之窗口(Windows)
目录1.写在前面2.窗口(Windows)2.1分组窗口(Group Windows)2.1.1滚动窗口2.1.2滑动窗口2.1.3 会话窗口2.2Over Windows2.2.1无界 Over Windows2.2.2有界的 over window2.3SQL 中窗口的定义2.3.1Group Windows2.3.2Over Windows3.代码总结4.代码练习(以分组滚动窗口为例)1.写在前面 时间语...原创 2021-03-15 00:43:56 · 655 阅读 · 0 评论 -
4.2.8 Flink-流处理框架-Table API 与 SQL-流处理中的特殊概念之时间特性
目录1.写在前面2.时间特性2.1 定义处理时间(Processing Time)2.1.1DataStream 转化成 Table 时指定2.1.2定义 Table Schema 时指定2.1.3创建表的 DDL 中指定2.2定义事件时间(Event Time)2.2.1DataStream 转化成 Table 时指定2.2.2定义 Table Schema 时指定2.2.3在创建表的 DDL 中定义1.写在前面 基于时间的操作(...原创 2021-03-14 12:43:28 · 319 阅读 · 0 评论 -
4.2.7 Flink-流处理框架-Table API 与 SQL-流处理中的特殊概念之动态表+持续查询
目录1.写在前面2.流处理和关系代数(表,及 SQL)的区别3.动态表(Dynamic Tables)4.流式持续查询的过程4.1将流转换成动态表(Dynamic Tables)4.2 持续查询(Continuous Query)4.3将动态表转换成流1.写在前面 Table API 和 SQL,本质上还是基于关系型表的操作方式;而关系型表、关系代数,以及 SQL 本身,一般是有界的,更适合批处理的场景。这就导致在进行流处理的过程中,理解会稍微复杂一些...原创 2021-03-14 10:54:20 · 315 阅读 · 0 评论 -
4.2.6 Flink-流处理框架-Table API 与 SQL-查看表的执行计划
Table API 提供了一种机制来解释(Explain)计算表的逻辑和优化查询计划。这是通过 TableEnvironment.explain(table)方法或 TableEnvironment.explain()方法完成的。 explain 方法会返回一个字符串,描述三个计划: 我们可以在代码中查看执行计划:String explaination = tableEnv.explain(resultTable);System.out.pri...原创 2021-03-12 19:49:12 · 473 阅读 · 1 评论 -
4.2.5 Flink-流处理框架-Table API 与 SQL-表的输出
1.写在前面 表的输出,是通过将数据写入 TableSink 来实现的。TableSink 是一个通用接口,可以 支持不同的文件格式、存储数据库和消息队列。具体实现,输出表最直接的方法,就是通过 Table.insertInto() 方法将一个 Table 写入注册过的 TableSink 中。2.输出到文件 注册输出表 insertInto(只实现了追加模式 append mode)不支持,数据聚合有更新操作的数据输出到文件。flin...原创 2021-03-12 18:45:50 · 886 阅读 · 0 评论 -
4.2.3 Flink-流处理框架-Table API 与 SQL-流转表+表转流+创建临时视图(Temporary View)
目录1.写在前面2.代码表达3.数据类型与Table schema 的对应4.创建临时视图(Temporary View)1.写在前面 Flink 允许我们把 Table 和 DataStream 做转换:我们可以基于一个 DataStream,先流式 地读取数据源,然后 map 成 POJO,再把它转成 Table。Table 的列字段(column fields),就是 POJO 里的字段,这样就不用再麻烦地定义 schema 了。2.代码表达 ...原创 2021-03-12 10:36:55 · 4527 阅读 · 1 评论 -
4.2.4 Flink-流处理框架-Table API 与 SQL-表的查询
目录1.写在前面2.Table API 的调用3.SQL 查询4.代码总结1.写在前面 利用外部系统的连接器 connector,我们可以读写数据,并在环境的 Catalog 中注册表。 接下来就可以对表做查询转换了。Flink 给我们提供了两种查询方式:Table API 和 SQL。2.Table API 的调用 Table API 是集成在 Scala 和 Java 语言内的查询 API。与 SQL 不同,Table API 的查询不会 用字...原创 2021-03-12 09:15:14 · 400 阅读 · 0 评论 -
4.2.2 Flink-流处理框架-Table API 与 SQL-基本程序结构(创建表环境+在 Catalog 中注册表)
目录1.基本程序结构2.创建表环境2.1配置老版本 planner2.2配置 blink planner3.在 Catalog 中注册表3.1 表的概念3.2连接到文件系统(Csv 格式)3.3连接到 Kafka4.代码示例1.基本程序结构 Table API 和 SQL 的程序结构,与流式处理的程序结构类似;也可以近似地认为有这么 几步:首先创建执行环境,然后定义 source、transform 和 sink。具体操作流程如下:St...原创 2021-03-11 21:16:03 · 870 阅读 · 1 评论 -
4.2.1 Flink-流处理框架-Table API 与 SQL-基本概念和简单实例程序
目录1.Table API 与 SQL的基本概念2.Table API 与 SQL的实例程序2.1 需要引入pom的依赖2.2 实例程序1.Table API 与 SQL的基本概念 Table API 是流处理和批处理通用的关系型 API,Table API 可以基于流输入或者批输入来运行而不需要进行任何修改。Table API 是 SQL 语言的超集并专门为 Apache Flink 设计的,Table API 是 Scala 和 Java 语言集成式的 API。与...原创 2021-03-11 19:39:18 · 400 阅读 · 0 评论 -
4.1.27 Flink-流处理框架-检查点恢复+flink检查点算法+保存点
目录1.从检查点恢复状态2.Flink的检查点的实现算法2.1 检查点分界线2.2Flink的检查点的实现算法举例3.保存点(Savepoints)1.从检查点恢复状态 在执行流应用程序期间,Flink 会定期保存状态的一致检查点,如果发生故障, Flink 将会使用最近的检查点来一致恢复应用程序的状态,并重新启动处理流程。 遇到故障之后,第一步就是重启应用 第二步是从 checkpoint 中读取状态,将状态重置。从检...原创 2021-03-11 17:21:55 · 457 阅读 · 2 评论 -
4.1.25 Flink-流处理框架-Flink中的容错机制之Flink+Kafka 端到端状态一致性的保证
目录1.写在前面2.保证端到端状态一致性3.Exactly-once 两阶段提交过程Exactly-once 两阶段提交步骤总结:1.写在前面 kafka是消息队列,跟flink天生是一对,他们的组合方式就是处理流式数据最佳的一个方案。 假设我们的方案架构师flink从kafka中读取数据,经过flink算子处理之后,sink输出到kafka中。flink的两端都是kafka消息队列的数据管道,这样的一个数据处理系统我们怎么保证数据的一致性呢?2....原创 2021-03-11 14:37:54 · 343 阅读 · 1 评论 -
4.1.26 Flink-流处理框架-Flink中的容错机制之一致性检查点(checkpoint)
Flink 具体如何保证 exactly-once 呢? 它使用一种被称为"检查点"(checkpoint) 的特性,在出现故障时将系统重置回正确状态。下面通过简单的类比来解释检查点的作用。 假设你和两位朋友正在数项链上有多少颗珠子,如下图所示。你捏住珠子,边 数边拨,每拨过一颗珠子就给总数加一。你的朋友也这样数他们手中的珠子。当你 分神忘记数到哪里时,怎么办呢? 如果项链上有很多珠子,你显然不想从头再数一 遍,尤其是当三人的速度不一样却又试图合作的时候,更是如此(比如想记...原创 2021-03-11 00:11:36 · 308 阅读 · 0 评论 -
4.1.24 Flink-流处理框架-Flink中的容错机制之状态一致性级别和端到端的状态一致性
目录1.写在前面2.一致性级别3.端到端(end-to-end)状态一致性1.写在前面 当在分布式系统中引入状态时,自然也引入了一致性问题。一致性实际上是" 正确性级别"的另一种说法,也就是说在成功处理故障并恢复之后得到的结果,与没 有发生任何故障时得到的结果相比,前者到底有多正确?举例来说,假设要对最近 一小时登录的用户计数。在系统经历故障之后,计数结果是多少?如果有偏差,是 有漏掉的计数还是重复计数?2.一致性级别 在流处理中,一致性可以分为 3 ...原创 2021-03-11 00:04:10 · 267 阅读 · 2 评论 -
4.1.20 Flink-流处理框架-ProcessFunction API(底层 API)
1.写在前面 我们之前了解过,flink有分层API,最底层级的抽象仅仅提供了有状态流,它将通过过程函数(Process Function) 被嵌入到 DataStream API 中。底层过程函数(Process Function) 与 DataStream API 相集成,使其可以对某些特定的操作进行底层的抽象,它允许用户可以自由地处理来自一个或多个数据流的事件,并使用一致的容错的状态。除此之外,用户可以注册事件时间并处理时间回调,从而使程序可以处理复杂的计算。 ...原创 2021-03-10 23:29:46 · 264 阅读 · 0 评论 -
4.1.23 Flink-流处理框架-Flink中的状态管理之状态后端
目录1.状态后端是什么?2.状态后端的类型3.配置状态后端3.1 配置文件3.2 代码中针对单独job,设置状态后端1.状态后端是什么? 每传入一条数据,有状态的算子任务都会读取和更新状态,由于有效的状态访问对于处理数据的低延迟至关重要,因此每个并行任务都会在本地维护其状态,以确保快速的状态访问。状态的存储、访问以及维护,由一个可插入的组件决定,这个组件就叫做状态后端(state backend)。 状态后端主要负责两件事:1)本地的状态管理;2)...原创 2021-03-10 11:58:43 · 393 阅读 · 0 评论 -
4.1.22 Flink-流处理框架-Flink中的状态管理之状态编程-温度跳变报警
1.需求利用 Keyed State,实现这样一个需求:检测传感器的温度值,如果连续的两个温度差值超过 10 度,就输出报警。原创 2021-03-07 16:52:26 · 497 阅读 · 1 评论 -
4.1.21 Flink-流处理框架-Flink中的状态管理之算子状态+键控状态
目录1.写在前面2.有状态的算子和应用程序2.1算子状态(operator state)2.2键控状态(keyed state)1.写在前面 流式计算分为无状态和有状态两种情况。无状态的计算观察每个独立事件,并根据最后一个事件输出结果。例如,流处理应用程序从传感器接收温度读数,并在温度超过 90 度时发出警告。有状态的计算则会基于多个事件输出结果。以下是有状态计算的一些例子。所有类型的窗口。例如,计算过去一小时的平均温度,就是有状态的计算。 所有用于复杂事件处...原创 2021-03-04 16:48:40 · 764 阅读 · 1 评论 -
4.1.19 Flink-流处理框架-Flink中的时间语义和watermark水位线
1.Flink中的时间语义 在 Flink 的流式处理中,会涉及到时间的不同概念,如下图所示:Event Time事件创建时间:是事件创建的时间。它通常由事件中的时间戳描述,例如采集的日志数据中,每一条日志都会记录自己的生成时间,Flink 通过时间戳分配器访问事件时间戳。绝大部分的业务都会使用 eventTime Ingestion Time进入时间:是数据进入 Flink 的时间。 Processing Time处理时间:是每一个执行基于时间操作的算子的本地系统时间...原创 2021-03-04 15:24:10 · 615 阅读 · 1 评论 -
4.1.18 Flink-流处理框架-Window API之窗口函数window function
目录1.window function-窗口函数2.其他可选API3.代码演示3.1TimeWindow3.2CountWindow3.3EventTimeWindow1.window function-窗口函数 window function 定义了要对窗口中收集的数据做的计算操作,主要可以分为两类:增量聚合函数(incremental aggregation functions) 每条数据到来就进行计算,保持一个简单的状态。典型的增量聚合函数有 ...原创 2021-03-03 17:08:41 · 408 阅读 · 1 评论 -
4.1.17 Flink-流处理框架-Window API之窗口分配器
目录0.写在前面1.TimeWindow-时间窗口1.1滚动时间窗口(Tumbling Windows)1.2滑动时间窗口(SlidingEventTimeWindows)1.3 三个时间窗口总结2.CountWindow-计数窗口2.1滚动窗口2.2滑动窗口2.3 两个计数窗口总结0.写在前面 我们可以用 .window() 来定义一个窗口,然后基于这个 window 去做一些聚 合或者其它处理操作。注意 window () 方法必须在 k...原创 2021-03-03 15:22:57 · 237 阅读 · 0 评论 -
4.1.16 Flink-流处理框架-Window API之Windows概述
目录1.写在前面2.Window的类型3.时间窗口(TimeWindow)3.1滚动窗口(Tumbling Windows)3.2滑动窗口(Sliding Windows)3.3会话窗口(Session Windows)1.写在前面 streaming 流式计算是一种被设计用于处理无限数据集的数据处理引擎,而无限 数据集是指一种不断增长的本质上无限的数据集,而 window 是一种切割无限数据 为有限块进行处理的手段。 Window 是无限数据流处理的核...原创 2021-03-03 14:06:24 · 205 阅读 · 0 评论 -
4.1.15 Flink-流处理框架-Flink流处理API之sink输出操作
目录1.写在前面2.输出到Kafka(source/sink)3.输出到Redis(sink)4.输出到Elasticsearch(sink)5.JDBC 自定义 sink1.写在前面Flink 没有类似于 spark 中 foreach 方法,让用户进行迭代的操作。所有对外的输出操作都要利用 Sink 完成。最后通过类似如下方式完成整个任务最终输出操作。stream.addSink(new MySink(xxxx))官方提供了一部分的框架的 sink。除此以外,需要用原创 2021-03-02 16:35:11 · 636 阅读 · 0 评论 -
4.1.14 Flink-流处理框架-Flink流处理API之数据重分区操作
1.写在前面原创 2021-03-02 14:29:18 · 544 阅读 · 0 评论 -
4.1.13 Flink-流处理框架-Flink流处理API之实现 UDF 函数(更细粒度的控制流)
目录1.函数类(Function Classes) 补充小知识:静态内部类2.匿名函数(Lambda Functions)3.富函数(Rich Functions)1.函数类(Function Classes) Flink 暴露了所有 udf 函数的接口(实现方式为接口或者抽象类)。例如 MapFunction, FilterFunction, ProcessFunction 等等。 下面例子实现了 FilterFunction 接口:...原创 2021-03-02 10:46:04 · 420 阅读 · 0 评论