- 博客(102)
- 收藏
- 关注
原创 自动类型转换导致join结果错误-问题记录
当表A或表B中存在id较长的值,在转换为double类型时会因精度原因改变原本的值,造成无法正确join的结果。因此当类型不同时建议手动在sql中显示将bigint类型转换成string类型,从而避免隐式类型产生意料之外的问题.假设在如下表A和B的join场景中id字段业务含义相同,但该字段在两个表中类型不同(A表中为bigint,B表中为String)。在底层执行join时,由于二者类型不同会自动将二者强转成double类型后在进行连接比较。
2024-07-10 21:07:33
398
原创 Hive/Spark窗口函数
结果中,对于每一行的last_value的结果都是当前值,并不分区中按salary升序的最后一个值。前面在提到last_value时,特意强调了该函数的结果并不是分区中的最后一个值,结合上述介绍的window specification再来看下该函数的结果值。注意,默认情况下last_value取的是第一行截止到当前行的最后一个值(当前行的值),并不是整个分区中排序后的最后一个值。注意,如果order by的结果相同,则rank得到的结果都相同,在这里的语义是排序结果相同,因此等级编号也相同。
2024-07-09 21:02:55
937
原创 Flink作业执行之 4.JobGraph
前文了解了由Transformation到StreamGraph的过程,StreamGraph即作业的逻辑拓扑结构。生成逻辑结构后,接下来的操作往往是对逻辑结构的优化。在很多组件中都是这样的处理,如hive、spark等都会执行“逻辑计划->优化计划->物理计划”的处理过程。从StreamGraph到JobGraph的过程中很重要的事情是将节点组成节点链。在方法中调用方法完成JobGraph实例的生成。接口根据提供的配置执行管道。接口内只有一个execute方法。
2024-06-29 13:32:12
1377
原创 Flink作业执行之 3.StreamGraph
在前文了解Transformation和StreamOperator后。接下来Transformation将转换成StreamGraph,即作业的逻辑拓扑结构。在方法中调用方法生成实例。由负责生成。实例中封装了前面生成的Transformation集合。方法核心逻辑如下,首先创建一个空的StreamGraph实例。然后通过遍历transformations集合,依次调用transform方法完成StreamGraph中节点和边实例的创建,并将节点和边加入到StreamGraph中。
2024-06-14 13:09:48
1262
1
原创 Flink作业执行之 2.算子 StreamOperator
前文介绍了Transformation创建过程,大多数情况下通过UDF完成DataStream转换中,生成的Transformation实例中,核心逻辑是封装了SimpleOperatorFactory实例。UDF场景下,DataStream到Transformationg过程中,SimpleOperatorFactory实例的创建过程大致如下伪代码所示。这里的UDF可以简单理解为需要我们自己传入对应Function实现类的操作,如map、filter等。问题:StreamOperator是什么?
2024-06-12 09:35:10
1599
原创 Flink作业执行之 1.DataStream和Transformation
在使用Flink完成业务功能之余,有必要了解下我们的任务是如何跑起来的。知其然,知其所以然。既然重点是学习应用程序如何跑起来,那么应用程序的内容不重要,越简单越好。WordCount示例作为学习数据引擎时hello word程序,再合适不过。接下来便以任务执行顺序为线索开启对源码逐步学习。为了使示例代码足够纯粹(直接复制粘贴后即可跑起来的那种),因此在示例中直接使用List数据作为Source。最后,计划将自己学习的过程以系列文档的形式作为记录。
2024-06-06 20:45:17
1265
1
原创 FlinkSql使用ES sink并指定主键,为什么数据还是会被覆盖?
源码基于flink 1.14.4根据官方文档中对自定义sink的描述,connector sink的的工作原理如下元数据的内容由create table语句所定义,通过的实例表示,该实例表示Catalog中未解析的元数据,包含可以在create table语句中表示的所有特征,框架将其解析为实例(一个经过验证的CatalogTable),然后再将其传递给,最终传入到,用于insert into语句的写入。负责提供connector的具体实现逻辑。用于将的元数据转化为。其接口中仅有一个方法,返回实例。
2024-05-05 22:17:24
1425
2
原创 Spark pivot数据透视详解
上述sql中根据subject和name进行旋转,并对score字段聚合计算,表中全部字段都参与了旋转和聚合,相当于是对全表进行分组。上述sql中指定按subject列进行旋转并对socre聚合,将按照原表中剩下的name字段进行分组。cube方法将得到字段全部组合结果进行分组分组,分别得到(A,B,C),(A,B),(A,C),(B,C),(A),(B),©以及全表的分组。rollup方法将按照从左到右的依次忽略最右侧字段结果进行分组,分别得到(A,B,C),(A,B),(A)以及全表的分组。
2024-04-24 20:12:39
871
1
原创 事件时间+时间窗口,最后一个窗口不执行问题踩坑与源码分析
举例说明,在按小时的滚动窗口中,假设当前时间是12:05点,按照正常预想13:00时窗口会触发执行,但是在12:00到13:00的时间段内,最后一个事件的时间是12:50,之后再未产生新的事件,那么在13:00的时候,窗口并不会触发执行,只有当后续再产生新的事件,并且事件时间大于13:00时,12-13的窗口才会执行。在实际开发过程中可能会带来一些问题,当事件不是源源不断的产生时,最后一个窗口不执行,影响结果。示例代码见末尾。
2024-04-07 09:46:14
709
1
原创 HiveSQL如何生成连续日期剖析
情景假设:有一结果表,表中有start_dt和end_dt两个字段,,想要根据开始和结束时间生成连续日期的多条数据,应该怎么做?直接上结果sql。(为了便于演示和测试这里通过模拟一个结果表数据)如果对涉及到的函数和语法不是特别了解,直接看到上述结果可能有点懵,接下来换个形式理解下,即如下sql如上sql结构比较简单,即t1表和t2表进行笛卡尔集,t1是原始表只有1行数据,但是结果是6行数据,因此关键点是t2的结果。
2024-04-07 09:42:12
1244
原创 kafka-consumer-groups.sh
通过kafka-consumer-groups.sh 脚本查看或变更消费组的信息。消费组一共有 Dead 、Empty 、PreparingRebalance 、CompletingRebalance 、Stable 这几种状态,正常情况下, 一个具有消费者成员的消费组的状态为Stable 。可以通过 state 参数来查看消费组当前的状态, 示例如下:./kafka-consumer-groups.sh --bootstrap-server 169.163.100.10.208.180.222.
2023-10-31 16:38:00
1654
原创 Hive分位数函数percentile和percentile_approx区别
分位数函数percentile和percentile_approx区别
2022-10-24 16:56:48
4463
原创 Hive group by或partition by中null值处理
在group by或partition by中如果字段列中包含null,null会被正常分组。
2022-08-21 10:54:39
2110
原创 hadoop dfs、hadoop fs和hdfs dfs的区别
执行 hdfs 命令后可以看到如下帮助信息:Usage: hdfs [--config confdir] [--loglevel loglevel] COMMAND where COMMAND is one of: dfs run a filesystem command on the file systems supported in Hadoop. classpath prints the classpath nam
2022-04-14 10:56:11
4076
原创 5步完成IDEA自定义TODO和快捷键设置
文章目录5步完成IDEA自定义TODO和快捷键设置5步完成IDEA自定义TODO和快捷键设置在setting中选择TODO,先设置Pattrens设置Filters,选择第一步新增的Patterns完成以上两步骤后,自定义的TODO已经设置完成,但是还无法通过像默认的todo一样,输入todo+tab键快捷输入,需要设置以下步骤选择Live Templates,并增加Live Template如下图所示进行设置设置Template生效的文件类型以上步骤设置完
2022-01-24 11:11:16
5387
原创 Hadoop Configuration 类加载属性解析
文章目录Hadoop Configuration 类加载属性解析1. 疑问1.1. 结论2. 从源码中一探究竟2.1. `new Configuration()`时发生了什么2.2. `configuration.get("fs.defaultFS")`时发生了什么Hadoop Configuration 类加载属性解析以下过程在3.2.2版本的源码上分析1. 疑问当我们创建HDFS client时,最简单的做法如下:Configuration configuration = new Conf
2021-12-25 16:16:25
2640
原创 基于MeteStore查看hive磁盘占用
文章目录1. 相关元数据表介绍2. 示例关于hive中Statistics特性请查看Statistics in Hive1. 相关元数据表介绍DBS 表用于存储hive数据库信息, 包含数据库名、文件系统路径等。通过DB_ID字段与其他表相关联。TBLS 表用于存储Hive表、视图、索引表的基本信息,包含表名、表类型(外部表等)、所属数据库id、创建时间等信息。该表中有全部hive表信息TABLE_PARAMS 表存储全部hive表的一些额外信息(表属性以及其他统计信息)。该表只有3个
2021-12-05 21:46:26
483
原创 Git 使用小结
文章目录GIT1. 仓库1.1. 创建本地仓库2. 暂存区2.1. 得到上一次commit后的所有改动详情2.2. 提交修改2.3. 查看commit历史记录3. 关于远程仓库3.1. 位置3.2. 创建远程仓库3.3. origin3.4. 连接一个远程仓库3.5. 整合远程分支中的内容到本地分支3.6. 将本地分支推送到远程仓库4. GIT分支4.1. 本地创建新分支4.2. 暂时保存更改4.3. checkout到指定分支4.4. 分支的模式4.4.1. release分支4.4.2. hotfix分
2021-11-21 15:01:18
767
原创 Process
在编写Java程序时,有时候需要在Java程序中执行另外一个程序。Java提供了两种方法用来启动其它程序:1. 使用Runtime的exec()方法2. 使用ProcessBuilder的start()方法不管在哪种操作系统下,程序具有基本类似的一些属性。一个程序启动后就是程序操作系统的一个进程,进程在执行的时候有自己的环境变量、工作目录。能够在Java中执行的外部程序,必须是一个实...
2021-01-26 00:39:55
1144
原创 Java Timer使用
Timer类是一种线程设施,可以用来实现某一个时间或某一段时间后安排某一个任务执行一次或定期重复执行。该功能和TimerTask抽象类配合使用。TimerTask抽象类实现了Runnable接口,用于实现由Timer安排的一次或重复执行的某个任务。每一个Timer对象对应的是一个线程,因此计时器所执行的任务应该迅速完成,否则会延迟后续的任务执行。java.util.Timer类1、vo...
2021-01-18 10:47:35
325
原创 YARN基本架构
文章目录1. YARN基本架构1.1. YARN基本组成结构1.2. YARN工作流程1. YARN基本架构YARN是Hadoop2.0中的资源管理系统,基本设计思想是将MRv1中的JobTracker拆分成两个独立的服务:一个全局的资源管理器ResourceManager和每个应用程序持有的ApplicationMaster。ResourceManager:负责整个系统的资源管理和分配ApplicationMaster:负责单个应用程序的管理1.1. YARN基本组成结构YARN总体上仍然
2020-10-30 00:00:45
3326
原创 Post 方式请求 Nginx 返回413状态码
Syntax client_max_body_size size; Default client_max_body_size 1m; Context http, server, location 设置客户端请求主体的最大允许大小,在“Content-Length”请求头字段中指定。如果请求中的大小超过配置的值,则将413(请求实体太大)错误返回给客户机。请注意浏览器无...
2020-10-24 21:38:11
1995
原创 查看 hdfs 上文件的文件状态、所属块信息等
执行 hdfs fsck 可以得到如下帮助信息:Usage: hdfs fsck <path> [-list-corruptfileblocks | [-move | -delete | -openforwrite] [-files [-blocks [-locations | -racks]]]] [-includeSnapshots] [-storagepolicies] [-blockId <blk_Id>] <path> start che
2020-10-24 21:35:38
2643
原创 HBase Compaction
文章目录1. Compaction1.1. 基本原理1.2. Compaction 的核心作用1.3. Compaction 基本流程1.3.1. Compaction 触发时机1.3.2. 待合并 HFile 集合选择策略1. CompactionCompaction是以Store为单位进行的Compaction使读取延迟更加稳定,但是读取时间产生了很大的毛刺Compaction 操作的主要源头来自flush操作根据待合并HFile文件的选择策略可以得知,正在进行Compaction的HFi
2020-10-21 23:59:12
2429
1
原创 RegionServer 宕机恢复流程
根据上节的基本原理,本节介绍HBase故障恢复的具体流程,重点讨论RegionServer的宕机恢复。Master检测RegionServer宕机HBase使用ZooKeeper协助Master检测RegionServer宕机。所有RegionServer在启动之后都会在ZooKeeper节点/rs上注册一个子节点,这种子节点的类型为临时节点(ephemeral)。临时节点的意义是,一旦连...
2020-10-21 23:55:47
1340
1
原创 HBase故障恢复基本原理
Master故障恢复原理在HBase体系结构中,Master主要负责实现集群的负载均衡和读写调度,并没有直接参与用户的请求,所以整体负载并不很高。HBase采用基本的热备方式来实现Master高可用。通常情况下要求集群中至少启动两个Master进程,进程启动之后会到ZooKeeper上的Master节点进行注册,注册成功后会成为ActiveMaster,其他在Master节点未注册成功的进...
2020-10-21 23:54:56
1121
1
原创 SparkSession 相关类
文章目录1. SparkSession相关类1.1. DataType1.2. Metadata1.3. StructType与StructField1.3.1. StructField类定义1.3.2. StructType类定义1.4. 数据源DataSource1.4.1. DataSource详解1.4.2. DataSourceRegister详解1.5. 数据集合DataSet1.5.1. 属性和方法1.6. DataFrameReader详解1.6.1. 属性和方法1.7. SparkSess
2020-10-15 00:14:45
940
原创 Spark 配置
文章目录1. Spark 配置1.1. Spark 属性1.1.1. 动态加载Spark属性1.1.2. 查看Spark属性1.2. 环境变量1. Spark 配置Spark提供了三个位置来配置系统:Spark属性控制大多数应用程序参数,可以通过使用SparkConf对象、bin/spark-submit脚本选项、conf/Spark-default.conf文件或通过Java系统属性进行设置。环境变量可用于通过每个节点上的conf/spark-env.sh脚本设置每台机器的设置,例如IP地址。
2020-10-14 22:17:11
1301
原创 Spark 核心原理
文章目录1. Spark核心原理2. 消息通信原理2.1. Spark运行时消息通信1. Spark核心原理Application(应用程序):是指用户编写的spark应用程序,包含驱动程序(driver)和分布在集群中多个节点上运行的Executor代码,在执行过程中有一个或多个作业组成。Driver(驱动程序):Spark中的Driver,即运行上述Application的main函数并且创建SparkContext,其中创建SparkContext的目的是为了准备Spark应用程序的运
2020-10-13 23:14:21
1956
1
原创 Broker 和 Controller
文章目录1. Broker 和 Controller1.1. 集群管理1.2. Controller1.2.1. Controller 选举原理1.2.2. 手动触发 Controller 开启新一轮选举1.2.3. Partition 的 leader 选举2. broker 端配置2.1. 最基本的配置2.2. 主要的参数配置1. Broker 和 Controller对用户而言,broker的主要功能就是持久化消息以及将消息队列中的消息从发送端传输到消费端。Kafka的broker负责持久化pro
2020-10-09 22:58:09
679
1
原创 Kafka Producer
文章目录1. Kafka Producer1.1. Producer概览1.2. ProducerRecord1.3. RecordMetadata1.4. 发送消息1.4.1. 工作流程2. 参数配置2.1. 必填参数2.2. 其他参数1. Kafka Producer在0.9.0.0版本中,社区正式使用Java版本的producer替换了原Scala版本的producer。新版本的producer的主要入口类是org.apache.kafka.clients.producer.KafkaProduc
2020-10-09 22:27:32
441
原创 Linux 中的硬盘
硬盘概念硬盘设备是由大量的“扇区”组成的,单个扇区容量为512字节,第一个扇区保存着主引导记录和分区信息,主引导记录需要占用446字节,分区表占用64字节,结束标记占用2字节。当我们拿到一张大白纸,首先为了使用方便要裁剪,然后为了书写工整要划格。“白纸”表示原始的硬盘,“裁剪”意味着分区,“画格”意味着格式化,最后写入数据,即新安装一块硬盘设备后,为了更充分、安全的利用硬盘空间首先要进行分区,然后格式化,最后挂载使用。硬盘被划分为:主分区(必须有一个)、扩展分区(可以没有,但最多一个)和逻辑分
2020-09-21 11:55:37
1304
原创 HBase MemStore
文章目录MemStore设计MemStore的原因Memstore Flush触发条件MemStoreHBase中,Region是集群节点上最小的数据服务单元,用户数据表由一个或多个Region组成。在Region中每个ColumnFamily的数据组成一个Store。每个Store由一个Memstore和多个HFile组成(如果一次flush都还没有发生的话,就是0个HFile)。HFile是由Memstore flush产生的,每一次的flush都会产生一个全新的HFile文件。设计MemSto
2020-09-16 09:10:47
1777
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人