- 博客(122)
- 收藏
- 关注
原创 SparkSQL源码分析系列03-Antlr4分析测试
SparkSQL主要通过Antlr4定义SQL的语法规则,完成SQL词法,语法解析,最后将SQL转化为抽象语法树。所以有必要先了解下Antlr4的工作流程。
2023-08-18 18:20:14
389
原创 SparkSQL源码分析系列01-Catalyst作用
与 RDD 不同,SparkSQL 可以获知数据的 Schema 来进行优化,SparkSQL 的 DSL 和 SQL 并不是直接生成计划交给集群执行,而是经过了一个叫做 Catalyst 的优化器,这个优化器能够自动帮助开发者优化代码。SparkSQL 中正是由于 Catalyst 优化器存在,使得无论基于SQL还是DSL分析数据,性能都是一样的,并且底层做了很多优化。首先,RDD大致运行步骤:先将 RDD 解析为由 Stage 组成的 DAG,后将 Stage 转为 Task 直接运行。
2022-12-29 17:17:07
567
2
原创 Flink系列-背压(反压)
在流式处理系统中,如果出现下游消费的速度跟不上上游生产数据的速度,就种现象就叫做背压(backpressure,也叫反压)
2022-09-02 19:26:26
1552
原创 FlinkSQL系列08-自定义函数
典型的标量函数如:upper(str), lower(str), abs(salary)特点:对输入的数据行(一组)进行持续的聚合,最终对每组数据输出一行或多行(多列)结果。特点:对输入的数据行(一组)进行持续的聚合,最终对每组数据输出一行(多列)结果。特点:运行时每接收一行数据(一个或多个字段),能产出多行、 多列的结果。特点:每次只接收一行的数据,输出结果也是 1 行 1 列。典型的如:explode( ), unnest ( )典型的如:sum( ), max( )...
2022-09-01 00:03:18
952
原创 FlinkSQL系列05-表与流
在动态表的概念中,其输出结果不是一个简单的“结果记录”不断追加的状态,而是一个需要对“前序”结果进行修正的状态;为了能向下游传递其输出结果的动态信息,flink 设计了一种 DataStream,叫做changelogStream(改变日志流)changelogStream 的本质。...
2022-08-31 22:16:43
1313
原创 FlinkSQL系列04-CDC连接器
CDC,Change Data Capture,变更数据获取的简称,使用 CDC 我们可以从数据库中获取已提交的更改,并将这些更改发送到下游,供下游使用。flink 的 cdc connector,在核心包中是没有集成的, 需要额外引入依赖。在 flinksql 中,cdc 数据几乎等价于 changelog,核心就在对 record 的 rowkind(+I/-U/+U/-D)进行适配。示例:用 flink-mysql-cdc 连接器,映射源表,并进行查询计算写回mysql表。...
2022-08-31 21:16:20
848
1
原创 FlinkSQL系列02-Table表对象和SQL表视图
Table 对象获取方式解析:从已注册的表// 通过已经在 env 的 catalog 中注册的表名, 获得 Table 对象从 TableDescriptor(连接器/format/schema/options)
2022-08-27 19:47:47
1749
原创 FlinkSQL系列01-编程入门
FlinkSQL 是架构在 flink core 之上用 sql 语言方便快捷地进行结构化数据处理的上层库。API 和 SQL 也可以很容易地混合,因为 Table 对象可以和 sql 表进行方便地互转。创建方式二:(便于 sql 和 core 结合编程)创建方式一:(纯粹表环境)...
2022-08-27 16:38:45
675
原创 Flink入门系列08-State
算子状态提供的数据结构ListStateunionListState 的快照存储数据,在系统重启后,list数据的重分配模式为: 广播模式;在每个subtask上都拥有一份完整的数据。ListState 的快照存储数据,在系统重启后,list数据的重分配模式为: round-robin;轮询平均分配。键控状态提供的数据结构ValueStateListStateMapState。.........
2022-08-26 20:11:01
412
原创 Flink入门系列06-window
在 keyby 后数据分流,window是把不同的key分开聚合成窗口,而 windowall 则把所有的 key 都聚合起来,所以 windowall 的并行度只能为1,而 window 可以有多个并行度。Keyedwindow 重要特性:任何一个窗口,都绑定在自己所属的 key 上,不同 key 的数据肯定不会划分到相同的窗口中去。窗口,就是把无界的数据流,依据一定的规则划分成一段一段的有界数据流。既然划分为有界数据流,通常都是为了”聚合“。window 和 windowAll 区别。.........
2022-08-26 17:04:53
301
原创 Flink入门系列05-时间语义
watermark的核心是在数据中周期性地插入一种时间戳单调递增的特殊数据(watermark),是 flink 内部自动产生并插入到数据流的,来不可逆转地在整个数据流中进行时间的推进。在需要指定时间语义的相关操作(如时间窗口)时,可以通过显式的api来使用特定的时间语义。数据在接收处理过程中,数据时间可能存在乱序,所以引入 watermark,就是在事件时间语义中,用于单调递增向前推进时间的一种标记。不从最源头算子开始生成watermark,而是从中间环节的某个算子开始生成watermark。...
2022-08-26 14:33:22
1101
原创 Flink入门系列04-process function
process function 相对于前文所述的map、flatmap、filter算子来说,最大的区别是开发人员对数据的处理逻辑拥有更大的自由度。同时,ProcessFunction 继承了 RichFunction,因而具备了 open、close、getRuntimeContext等方法。不同类型的datastream上,应用 process function 时,flink 提供了大量不同类型的 process function,让其针对不同的datastrean 拥有更具有针对性的功能。
2022-08-25 15:12:41
786
原创 Flink入门系列03-多流操作API
需求: 将行为事件流进行分流。A事件分到一个流,B事件分到另一个流,其他事件保留在主流。可实现两个流的数据进行窗口关联(包含inner ,left, right, outer)只能得到关联上的数据,即 inner join,其他类型join需要使用 coGroup。场景:事实表流数据 和 维度表流数据做关联,此时,一般把维度表流数据转换为广播流。参与 union 的流,必须数据类型一致。
2022-08-25 12:56:29
619
原创 Flink入门系列01-概述
Flink是一个分布式、有状态的实时流式处理系统(编程框架)flink 主要是 Java 语言开发而成,但对用户提供了 java、scala、python 编程 API。flink 以流处理方式作为基础,并通过有界流来实现批计算,从而实现批流一体。
2022-08-23 17:06:01
1057
原创 centos7安装docker后安装mysql
安装MySQL查询mysql:查看镜像:拉取mysql5.7版本:方式一:直接运行镜像:方式二:持久化运行镜像:进入mysql容器,并登陆mysql开启远程访问权限:关闭docker中mysql容器查看docker日志:
2022-06-15 22:20:48
161
原创 Java反射之获取Class实例的4种方式
已知具体的类,通过类的 class 属性获取Class clazz = Person.class;已知某个类的实例,调用该实例的 getclass() 方法获取 Class 对象Person p1 = new Person();Class clazz = p1.getclass();已知一个类的全类名,且该类在类路径下,可通过 Class 类的静态方法 forName() 获取,可能抛出 ClassNotFoundException(比较常用)Class clazz = Clas..
2022-05-06 17:45:38
1869
原创 ambari-2.7.3 + HDP-3.1.0安装步骤
目录1.关闭防火墙2.配置/etc/hosts文件3.时间同步4.免密登录5.安装jdk6.安装httpd并配置本地源7.mysql8.启动ambari-server的配置程序(主节点)1.关闭防火墙systemctl stop firewalld systemctl disable firewalld2.配置/etc/hosts文件配置前修改主机名:hostnamectl set-hostname bigdataserver-1192.168.2.10 bigdataserver-1
2022-04-27 15:56:40
637
原创 YARN配置调优
yarn资源管理在YARN中,资源管理由RescoueceManager和NodeManager共同完成,其中,Resourcemanager中的调度器负责资源分配,而NodeManager则负责资源的供给和隔离。容器是内存和CPU的抽象概念。容器运行在NodeManager节点。实际生产环境中,每台机器节点的硬件配置不可能完全一样,所以经常需要手动配置调优yarn在每台节点上的资源情况,以便高效利用集群资源。YARN允许用户配置每台节点上可用的物理资源,注意,这里是“可用的”,因为一个节点上的资源会被
2021-06-19 12:43:28
1769
原创 HiveSQL优化点之多次insert单次扫描表
比如将一张表的数据多次查询出来装载到另外一张表中。如表table1是一个分区表,分区字段为dt,如果需要在表中查询多个特定的分区日期数据,并将数据装载到多个不同的表中或同一张表的不同分区中。一般会写成如下:INSERT INTO table2 SELECT * FROM table1 WHERE dt ='2020-12-25';INSERT INTO table3 SELECT * FROM table1 WHERE dt ='2020-12-26';INSERT INTO table4 SELEC
2021-03-10 15:12:10
1003
1
原创 Spark之五种join策略
Spark源码中关于join策略的描述/*** Select the proper physical plan for join based on join strategy hints, the availability of* equi-join keys and the sizes of joining relations. Below are the existing join strategies,* their characteristics and their limitations.
2020-12-31 16:07:21
748
原创 Hive的Metastore和hiveServer2
1.Metastore作用客户端连接metastore服务,metastore再去连接MySQL数据库来存取元数据。有了metastore服务,就可以有多个客户端同时连接,而且这些客户端不需要知道MySQL数据库的用户名和密码,只需要连接metastore 服务即可。两种连接Hive客户端方式的流程如下:bin/hin --访问--> metaStore server --访问-->MySQLbeeline --访问-->hiveServer2 --访问--> metaSto
2020-12-19 15:45:08
2048
1
原创 Spark的宽依赖和窄依赖
RDD算子操作会使得RDD分区之间产生不同依赖,主要有两种依赖:宽依赖和窄依赖。宽依赖:是指一个父RDD的各个分区被一个子RDD的各个分区多次依赖,窄依赖:是指一个父RDD的各个分区被一个子RDD的各个分区一次依赖,或者多个父RDD的分区对应一个子RDD分区。如下图所示:注意:有一些特殊的RDD算子分两种情况,可能是窄依赖也可能是宽依赖,如join算子。...
2020-12-18 16:39:20
438
1
原创 Spark作业调度流程
Spark首先会对Job进行一系列的RDD转换操作,并通过RDD之间的依赖关系构建DAG(有向无环图)。然后根据RDD依赖关系将RDD划分到不同的stage中,每个stage按照partition的数量创建多个Task,最后将这些Task提交到集群的work节点上执行。具体流程如下图所示:构建DAG,将DAG提交到调度系统;DAGScheduler负责接收DAG,并将DAG划分成多个stage,最后将每个stage中的Task以任务集合(TaskSet)的形式提交个TaskScheduler做下一步
2020-12-18 15:42:06
287
原创 Spark的RDD弹性特性的几个方面
自动进行内存和磁盘数据存储的切换。spark会优先将数据放到内存,放不下时才放到磁盘,保障其高效运行。基于Lineage的高效容错机制。RDD每个操作只关联其父操作,各个分片数据之间互不影响。Task失败会进行特定次数的重试。默认4次。Stage失败会进行特定次数的重试。默认4次。checkpoint和persist(检查点和持久化),可主动或被动触发。数据调度弹性, DAGScheduler、 TASKScheduler和资源管理无关。数据分片的高度弹性,可以灵活伸缩分片数(coalesce.
2020-12-17 15:39:34
486
原创 Presto安装和使用避坑
Presto:使用SQL进行交互式的统计分析。当一个SQL操作需要20分钟以上时,建议不采用。官网:prestodb.io1.架构master:coordinator SQL解析,生成执行计划,分发任务到worker节点slaves:workers 执行查询任务一个presto集群包括一个coordinator和多个workers,查询是从如Presto CLI这样的客户端提交给coordinator。coordinator解析、分析和执行计划查询,然后将处理分配给workers。Pr
2020-12-08 19:44:27
1200
原创 HiveSQL如何判断一个字段中是否包含指定字符串
判断 name 字段中是否包含字符串 “aaa”:select * from temp where locate("aaa", name) > 0;locate(字符串,字段名),如果包含,返回大于0的index位置;否则,返回0;
2020-12-03 12:04:21
30778
3
原创 Linux如何查看服务器配置信息
型号:dmidecode | grep ‘Product’CPU:lscpu内存:free -g查看CentOS版本:cat /etc/redhst-release
2020-12-03 11:54:57
387
原创 Linux之sed使用
sed (Stream Editor):流编辑器。是一个文本编辑器,按行进行,不直接处理文本,而是将编辑的行读到内存中编辑。主要功能:追加、删除、替换、输出语法格式:sed [选项] address Command 修饰符 file选项:-n :只显示符合条件的行。-i :直接修改源文件。address:startnum, endnum如:/^root/ 表示正则匹配以root开头/root$/ 表示以root结尾Command:d 表示删除符合条件的行p 表示输出 打印
2020-12-03 11:47:02
131
原创 Linux查询指定进程的进程号并杀死
PID=`ps -ef | grep "xxx" | grep -v "grep" | awk '{print $2}'`kill -9 $PID
2020-12-01 16:22:20
1020
原创 SQL的left join注意点
1.left join会返回左边表的所有行,所以在on语句中,对左边表的约束是不会生效的,但是对右边表添加条件是生效的!反之,right join同理。2.on是对中间结果进行筛选,where是对最终结果筛选。
2020-12-01 15:57:00
322
原创 Hive的模糊匹配
% 表示任意多个字符_ 表示任意一个字符用法:select * from temp where dt like “2020%”;select * from temp where dt like “2020082_”;
2020-12-01 15:29:12
4348
原创 SQL中的where语句中,and和or的同时使用
select * from temp where sex='男' and (birth=1992 or birth=1995);一般or可以用in来替代:select * from temp where sex='男' and birth in (1992,1995);
2020-12-01 15:03:48
1018
原创 Hive Cli数据显示列名,且不带表名
> set hive.cli.print.header=true //显示列名,但带表名> set hive.resultset.use.unique.column.names=false //不显示表名在hue界面也可以做相同设置:query -> editors -> 右侧齿轮 -> setting 中,进行如上设置。...
2020-12-01 14:56:49
467
原创 HiveSQL字段内容为null的注意点
注意:字段内容为null和字段长度为0是两回事。如:length(name) = 0 和 name is null 是两种完全不同的情况。length(name) = 10 和 length(name) != 10 都不会包含 name is null 的情况。
2020-12-01 14:50:57
998
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人