自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(191)
  • 收藏
  • 关注

原创 Flink Graph演变

Flink 集群中运行的 Job,最终归根到底:还是构建一个高效能分布式并行执行的DAG执行图。StreamGraph ==> JobGraph ==> ExecutionGraph ==> 物理执行图。根据用户通过Stream API 编写的代码生成最初的图,用来表示程序的拓扑结构。StreamGraph 经过优化之后生成了 JobGraph,提交给 JobManager 的数据结构。

2024-04-19 00:09:02 429

原创 Jackson解析Json数据

Jackson和 FastJson 一样,是一个 Java 语言编写的,可以进行 JSON 处理的开源工具库,Jackson 的使用非常广泛,Spring 框架默认使用 Jackson 进行 JSON 处理。Jackson 有三个核包,分别是,通过这些包可以方便的对 JSON 进行操作。Streaming在模块。定义了一些流处理相关的 API 以及特定的 JSON 实现。在模块,包含了 Jackson 中的注解。Databind在模块, 在Streaming包的基础上实现了数据绑定,依赖于。

2024-04-10 14:32:48 355

原创 初识Java中的NIO

Java NIO 全称java non-blocking IO ,是指 JDK 提供的新 API。从 JDK1.4 开始,Java 提供了一系列改进的输入/输出新特性,被统称为 NIO(即 New IO),是同步非阻塞的。NIO采用内存映射文件的方式来处理输入输出,NIO将文件或文件的一段区域映射到内存中,这样就可以像访问内存一样访问文件。NIO与原来的IO有同样的作用,但是使用的方式完全不同, NIO支持面向缓冲区的、基于通道的IO操作。NIO将以更加高效的方式进行文件的读写操作。

2024-04-07 17:04:13 1091

原创 Flink集群从节点TaskManager启动分析(standalone)

TaskManager 是 Flink 集群的工作进程,执行数据流的具体计算,称之为"Worker"。Flink集群必须至少有一个TaskManager;每一个TaskManager都包含了一定数量的任务槽(task slots)。Slot是资源调度的最小单位,slot的数量限制了TaskManager能够并行处理的任务数量。启动之后,TaskManager会向资源管理器注册它的slots;

2024-04-01 22:52:25 1169 1

原创 Flink集群启动脚本分析(standalone模式)

1.概述  Flink 集群的启动脚本在:flink-dist 子项目中,位于 flink-bin 下的 bin 目录:启动脚本为:start-cluster.sh。flink-bin 目录管理的是集群运维需要的shell脚本。2.启动脚本2.1 start-cluster.sh调用 config.sh 来获取 masters 和 workers,masters 的信息(从 conf/masters 配置文件中获取)通过 jobmanager.sh 来启动 JobManager

2024-03-28 17:04:37 504 1

原创 Flink RPC初探

RPC( Remote Procedure Call ) 的主要功能目标是让构建分布式计算(应用)更容易,在提供强大的远程调用能力时不损失本地调用的语义简洁性。为实现该目标,RPC 框架需提供一种透明调用机制让使用者不必显式的区分本地调用和远程调用。总而言之:RPC是为了解决分布式系统中,各个服务中的调用问题,在进行远程调用时,也像本地调用一样方便,让调用者感知不到远程调用的逻辑。技术组件RPC实现HDFSNettyHBase。

2024-03-28 16:30:30 1507

转载 Hive中count(distinct)优化

hive.groupby.skewindata 对 count(distinct) 的优化是有限制的,当 hive.groupby.skewindata = true 时,SQL只能对一个列进行 count(distinct)其实这很容易理解,在刚刚的手动优化过程中,能够很容易发现,这个方法不能同时对多个列进行 去重+计数 得出各自的 count(distinct) 值主要原因:无法在某一个维度里,同时对多个列进行去重。

2024-03-15 23:35:11 97

原创 Hive中的explode函数、posexplode函数与later view函数

在离线数仓处理通过HQL业务数据时,经常会遇到行转列或者列转行之类的操作,就像concat_ws之类的函数被广泛使用,今天这个也是经常要使用的拓展方法。

2024-03-15 22:54:27 1184

原创 MapReduce的原理分析

MapReduce的思想核心是“分而治之,先分再合”,适用于大量复杂任务处理场景(大规模数据处理场景)。map阶段(分):如果任何可以拆分并且没有依赖,那么就把复杂的任务拆分成小任务,拆分成小任务之后,可以并行计算,提高处理效率。reduce阶段(合):把map阶段的各个局部结果进行全局汇总,得到最终的结果生活中的MapReduce案例:统计图书馆的书籍总数“Map”:你数1号书架,我数2号书架。我们人越多,数书就更快。“Reduce”:我们到一起,把所有人的统计数加在一起。

2024-03-15 15:14:29 1068 1

原创 Hive中的CONCAT、CONCAT_WS与COLLECT_SET函数

concat用于连接字符串。concat_ws用于按照指定的分隔符连接字符串。与group by和concat_ws一起使用可以实现"列转行。

2024-03-14 17:43:34 525

原创 Hive中的NVL函数与COALESCE函数

说明: COALESCE是一个函数, (v1, v2, …,vn)依次参考各参数表达式,遇到非null值即停止并返回该值。如果所有的表达式都是空值,最终将返回一个空值。Hive SQL 中的一种聚合函数,它可以返回第一个非空值。功能:如果value为NULL,则NVL函数返回。如果两个参数都为NULL ,则返回NULL。的数据赋值,它的格式是。

2024-03-14 12:56:05 664

原创 Hive中UNION ALL和UNION的区别

Hive官方提供了一种联合查询的语法,原名为Union Syntax,用于联合两个表的记录进行查询,此处的联合和join是不同的,join是将两个表的字段拼接到一起,而union是将两个表的记录拼接在一起。换言之, join是用于左右拼接,而union是用于上下拼接。联合查询方式UNIONUNION ALL对重复结果的处理筛选掉重复的结果不会去除重复记录对排序的处理将两个结果合并后并返回会按照字段的顺序进行排序效率快慢总述不去重不排序去重并排序。

2024-03-08 13:24:46 626

原创 Hive的性能优化

Hive 作为大数据领域常用的数据仓库组件,在设计和查询时要特别注意效率。影响Hive效率的几乎从不是数据量过大,而是数据倾斜、数据冗余、Job或I/O过多、MapReduce分配不合理等等。对 Hive 的调优既包含 Hive 的建表设计方面,对HQL 语句本身的优化,也包含 Hive 配置参数和底层引擎 MapReduce 方面的调整。总之,Hive调优的作用:在保证业务结果不变的前提下,降低资源的使用量,减少任务的执行时间。

2024-03-07 22:34:26 925

原创 Flink的状态

有状态的计算是流处理框架要实现的重要功能,因为稍复杂的流处理场景都需要记录状态,然后在新流入数据的基础上不断更新状态。数据流中的数据有重复,想对重复数据去重,需要记录哪些数据已经流入过应用,当新数据流入时,根据已流入过的数据来判断去重。检查输入流是否符合某个特定的模式,需要将之前流入的元素以状态的形式缓存下来。比如,判断一个温度传感器数据流中的温度是否在持续上升。对一个时间窗口内的数据进行聚合分析,分析一个小时内某项指标的75分位或99分位的数值。

2023-10-04 20:51:29 1369

原创 Flink中的状态一致性

系统要求source端可重设数据的读取位置Flink内部依赖checkpointsink端从故障恢复时,数据不会重复写入外部系统Flink内部通过checkpoint机制, 把状态存盘,发生故障的时候可以恢复,保证内部的状态一致性。输入端输入数据源端的Kafka可以对数据进行持久化保存,并可以重置偏移量(offset)。在Source任务(FlinkKafkaConsumer)中将当前读取的偏移量保存为算子状态,写入到检查点中;

2023-09-30 13:50:50 879

原创 Kakfa高效读写数据

无论 kafka 作为 MQ 也好,作为存储层也罢,无非就是两个功能:一是 Producer 生产的数据存到 broker,二是 Consumer 从 broker 读取数据。那 Kafka 的快也就体现在读写两个方面了,本文也是从这两个方面去剖析Kafka为什么能那么快。kafka高效读写的原因:利用partition 并行处理顺序写磁盘,充分利用磁盘特性利用了现代操作系统分页存储 Page Cache 来利用内存提高 I/O 效率采用了零拷贝技术。

2023-09-27 22:15:04 398

原创 kafka-consumer-groups.sh消费者组管理

拿到所有在线Broker列表 再给每个Broker发送。请求获取 消费者组数据。

2023-09-27 16:03:19 1232

原创 消费者提交已消费的偏移量

消费者而在消费了消息之后会把消费的offset提交到的内置Topic中;每个消费者组都有维护一个当前消费者组的offset。那么问题来了:消费组什么时候把offset更新到broker中的分区中呢?Kafka消费者的配置信息Name描述default如果为true,消费者的offset将在后台周期性的提交true如果enable.auto.commit设置为true,则消费者偏移量自动提交给Kafka的频率(以毫秒为单位)5000。

2023-09-27 15:28:49 458

原创 消费者偏移量_consumer_offsets相关解析

是 kafka 自行创建的,和普通的 topic 相同。它存在的目的之一就是保存 consumer 提交的位移。的每条消息格式大致如图所示:group.id+topic+分区号,而 value 就是 offset 的值。考虑到一个 kafka 集群中可能有很多consumer和,如果这些 consumer 同时提交位移,则必将加重 __consumer_offsets 的写入负载,因此 kafka 默认为该 topic 创建了50个分区,并且对每个group.id做哈希求模运算。

2023-09-27 14:48:31 216

原创 Kafka Log存储解析以及索引机制

在Kafka架构,不管是生产者Producer还是消费者Consumer面向的都是Topic。Topic是逻辑上的概念,而Partition是物理上的概念。每个Partition逻辑上对应一个log文件,该log文件存储是Producer生产的数据。Producer生产的数据被不断追加到该log文件末端,且每条数据都有自己的offset。Kafka对于log文件是采取分片和索引机制。

2023-09-27 13:58:26 1305

原创 Kafka数据可靠性保证

为保证producer发送的数据,能可靠的发送到指定的topic,topic的每个partition收到producer发送的数据后,都需要向producer发送ack(acknowledgement确认收到),如果producer收到ack,就会进行下一轮的发送,否则重新发送数据。leader收到数据,所有follower都开始同步数据,但有一个follower,因为某种故障,迟迟不能与leader进行同步,那leader就要一直等下去,直到它完成同步,才能发送ack。这个问题怎么解决呢?

2023-09-27 00:24:23 354

原创 Java中时间处理函数

Date代表一个特定的瞬间,毫秒级别精度。Date类的构造函数可以把毫秒值转换成日期对象。Calendar类是一个抽象类,它为特定瞬间与一组诸如YEARMONTHHOUR等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。与其他语言环境敏感类一样,Calendar提供了一个类方法,以获得此类型的一个通用的对象。

2023-09-25 15:13:22 194

原创 Java中的数组

内存是计算机中重要的部件之一,它是与CPU进行沟通的桥梁。其作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。计算机在运行中,CPU就会把需要运算的数据调到内存中进行运算,当运算完成后CPU再将结果传送出来。我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运行的,必须放进内存中才能运行,运行完毕后会清空内存。Java虚拟机要运行程序,必须要对内存进行空间的分配和管理。数组的定义:相同数据类型、固定长度数组的初始化:静态初始化、动态初始化。

2023-09-25 12:22:17 61

原创 zookeeper

ZooKeeper是一个开放源码的分布式应用程序协调服务,主要为了解决分布式架构下数据一致性问题,典型的应用场景有分布式配置中心、分布式注册中心、分布式锁、分布式队列、集群选举、分布式屏障、发布/订阅等场景。一次性:一个Watch事件是一个一次性的触发器。一次性触发,客户端只会收到一次这样的信息。异步的: Zookeeper服务器发送watcher的通知事件到客户端是异步的,不能期望能够监控到节点每次的变化,Zookeeper只能保证最终的一致性,而无法保证强一致性。

2023-08-24 13:15:42 1022

原创 行式存储与列式存储

数据处理大致可分为两大类,联机事务处理OLTP(on-line transaction processing) 和联机分析处理OLAP(on-line analytical processing)。OLTP是传统关系型数据库的主要应用,用来执行一些基本的、日常的事务处理,比如数据库记录的增、删、改、查等。而OLAP则是分布式数据库的主要应用,它对实时性要求不高,但处理的数据量大,通常应用于复杂的动态报表系统上。

2023-08-24 11:54:59 618

原创 HQL解决连续三天登陆问题

如何判断连续?通过对user_id分组排序后,使用登陆日期减去序号rn。如果连续,则得到的这个日期会相同。

2023-08-24 10:54:55 762 1

原创 HiveDDL数据操作

【代码】HiveDDL数据操作。

2023-07-07 20:57:08 396

原创 shell中的单双引号

单引号不取变量值双引号取变量值反引号`,执行引号中命令双引号内部嵌套单引号,取出变量值单引号内部嵌套双引号,不取出变量值。

2023-07-07 18:27:41 299

原创 Hadoop面试题

第二个阶段是由 ApplicationMaster 创建应用程序,为它申请资源,并监控它的整个运行过程,直到运行完成。(1)客户端通过Distributed FileSystem向NameNode请求下载文件,NameNode通过查询元数据,找到文件块所在的DataNode地址。(3)DataNode开始传输数据给客户端(从磁盘里面读取数据输入流,以Packet为单位来做校验)。(2)挑选一台DataNode(就近原则,然后随机)服务器,请求读取数据。

2023-07-07 18:19:04 1920

原创 Hive数据类型

Hive的基本数据类型:TINYINT、SMALLINT、INT、BIGINT、BOOLEAN、STRING、TIMESTAMP、BINARY。Hive的集合数据类型:STRUCT、MAP、ARRAY。

2023-07-01 18:17:28 353

原创 Hive基础知识

Hive是由Facebook开源用于解决海量结构化日志的数据统计工具。Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能。Hive是基于hadoop的数据仓库工具,提供了类SQL语言便于查询计算。Hive本质:将HQL转换MapReduce程序。Hive与数据库的比较在于四个方面:查询语言、数据规模、数据更新、执行延迟。

2023-06-28 23:52:39 477

原创 python argparse 模块命令行参数解析

argparse 是 python 的一个命令行解析包,可根据需要编写高可读性的程序。本文针对项目中对 argparse 的用法,用实例对各个参数进行讲解,力求达到让读者秒懂的目的。创建一个新的 ArgumentParser对象。所有的参数都应当作为关键字参数传入。progusage- 描述程序用途的字符串(默认值:从添加到解析器的参数生成)- 在参数帮助文档之前显示的文本(默认值:无)epilog- 在参数帮助文档之后显示的文本(默认值:无)parents- 一个 ArgumentParser。

2023-05-15 17:08:49 702 2

原创 LightGBM面试题

xgboost是属于boosting家族,是GBDT算法的一个工程实现在模型的训练过程中是聚焦残差,在目标函数中使用了二阶泰勒展开并加入了正则,在决策树的生成过程中采用了精确贪心的思路,寻找最佳分裂点的时候,使用了预排序算法, 对所有特征都按照特征的数值进行预排序, 然后遍历所有特征上的所有分裂点位,计算按照这些候选分裂点位分裂后的全部样本的目标函数增益,找到最大的那个增益对应的特征和候选分裂点位,从而进行分裂。这样一层一层的完成建树过程。

2023-04-24 16:56:51 598

原创 LightGBM模型详解

1.背景  LightGBM 是微软开发的 boosting 集成模型,和 XGBoost 一样是对 GBDT 的优化和高效实现,原理有一些相似之处,但它很多方面比 XGBoost 有着更为优秀的表现。官方给出的这个工具库模型的优势如下:更快的训练效率低内存使用更高的准确率支持并行化学习可处理大规模数据支持直接使用 category 特征  下图是一组实验数据,LightGBM比XGBoost快将近 101010 倍,内存占用率大约为XGBoost的 1/61/61/6,并且准确率也有提

2023-04-24 16:48:36 2559 1

原创 XGBoost模型详解

1.什么是XGBoost?  GBDT,它是一种基于boosting增强策略的加法模型,训练的时候采用前向分布算法进行贪婪的学习,每次迭代都学习一棵CART树来拟合之前 t−1t-1t−1 棵树的预测结果与训练样本真实值的残差。XGBoost对GBDT进行了一系列优化,比如损失函数进行了二阶泰勒展开、目标函数加入正则项、支持并行和默认缺失值处理等,在可扩展性和训练速度上有了巨大的提升,但其核心思想没有大的变化。2.XGBoost的核心原理2.1 如何构造目标函数?  对于一个给定有 nnn 个样本和

2023-04-24 16:35:26 3691

原创 GBDT算法原理及实战

GBDT(Gradient Boosting Decision Tree),全名叫梯度提升决策树,是一种迭代的决策树算法,又叫 MART(Multiple Additive Regression Tree),它通过构造一组弱的学习器(树),并把多棵决策树的结果累加起来作为最终的预测输出。该算法将决策树与集成思想进行了有效的结合。

2023-04-19 19:48:17 7011

原创 Faiss

构建训练数据以矩阵的形式表示,比如现在经常使用的embedding,embedding出来的向量就是矩阵的一行。为数据集选择合适的index,index是整个faiss的核心部分,将第一步得到的训练数据add到index当中。search,或者说query,搜索到最终结果。Faiss的工作,就是把我们自己的候选向量集封装成一个index数据库,它可以加速我们检索相似向量TopK的过程,其中有些索引还支持GPU构建,可谓是强上加强。Faiss的使用流程:构建索引,训练数据,寻找相似搜索。

2023-04-19 11:28:17 580

原创 链表基础知识

所以链表中的节点在内存中不是连续分布的 ,而是散乱分布在内存中的某地址上,分配机制取决于操作系统的内存管理。数组在定义的时候,长度就是固定的,如果想改动数组的长度,就需要重新定义一个新的数组。链表的长度可以是不固定的,并且可以动态增删, 适合数据量不固定,频繁增删,较少查询的场景。这个链表起始节点为2, 终止节点为7, 各个节点分布在内存个不同地址空间上,通过指针串联在一起。双链表:每一个节点有两个指针域,一个指向下一个节点,一个指向上一个节点。单链表中的节点只能指向节点的下一个节点。

2023-04-18 20:54:22 619

原创 二叉树基础概念

满二叉树:如果一棵二叉树只有度为 000 的结点和度为 222 的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。如图所示:这棵二叉树为满二叉树,也可以说深度为 kkk,有 2k−12^k-12k−1 个节点的二叉树。什么是完全二叉树?完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 hhh 层,则该层包含 111~ 2(h−1)2^{(h-1)}2(h−1) 个节点。优先级队列其实是

2023-04-18 20:41:13 629

原创 k-d Tree算法

本文介绍一种用于高维空间中的快速最近邻和近似最近邻查找技术——Kd- Tree(Kd树)。Kd-Tree,即K-dimensional tree,是一种高维索引树形数据结构,常用于在大规模的高维数据空间进行最近邻查找(Nearest Neighbor)和近似最近邻查找(Approximate Nearest Neighbor),例如图像检索和识别中的高维图像特征向量的K近邻查找与匹配。Kd树在维度较小时(比如203020、302030K≥100K≥100K≥100。

2023-04-18 15:21:41 1865

空空如也

空空如也

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

TA关注的人

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