- 博客(49)
- 收藏
- 关注
原创 Hive组成架构和工作原理
Apache Hive 是一个基于 Hadoop 的数据仓库工具,主要用于处理和分析大规模结构化数据。它将 SQL 查询转换为 MapReduce 任务,使得用户可以通过熟悉的 SQL 语法来操作 Hadoop 分布式文件系统(HDFS)中的数据。
2025-03-03 23:35:28
582
原创 Hadoop--NameSpace(名称空间)
HDFS 的名称空间是一个逻辑上的文件系统目录树,用于组织文件和目录,并维护元数据信息。名称空间的元数据存储在 NameNode 的内存中,并持久化到磁盘的 fsimage 和 edits 日志 文件中。
2025-02-22 22:31:33
1113
原创 Hadoop--Secondary NameNode工作机制,作用及与NameNode HA的区别
Secondary NameNode 主要用于辅助 NameNode 进行元数据的管理和检查点(Checkpoint)的生成。
2025-02-22 21:23:10
1361
原创 Doris--分桶,压缩,副本,TTL,建表模式,压缩策略
Apache Doris是一个基于MPP架构(Massively Parallel Processing,大规模并行处理)的高性能、实时的分析型数据库,以极速易用的特点被人们所熟知,仅需亚秒级响应时间即可返回海量数据下的查询结果,不仅可以支持高并发的点查询场景,也能支持高吞吐的复杂分析场景。基于此,Apache Doris 在多维报表、即席查询、用户画像、实时大屏、日志分析、数据湖查询加速等诸多业务领域都能得到很好应用。
2025-02-22 19:31:50
1817
1
原创 clickhouse--本地表和分布式表,副本机制,分片集群
副本虽然能够提高数据的可用性,降低丢失风险,但是每台服务器实际上必须容纳全量数据,对数据的横向扩容没有解决。要解决数据水平切分的问题,需要引入分片的概念。通过分片把一份完整的数据进行切分,不同的分片分布到不同的节点上,再通过 Distributed 表引擎把数据拼接起来一同使用。Distributed 表引擎本身不存储数据,有点类似于 MyCat 之于 MySql,成为一种中间件,通过分布式逻辑表来写入、分发、路由来操作多台节点不同分片的分布式数据。
2025-02-21 19:32:31
1522
原创 clickhouse--表引擎的使用
表引擎是 ClickHouse 的一大特色。可以说,表引擎决定了如何存储表的数据。包括:特别注意:引擎的名称大小写敏感, 驼峰命名 以列文件的形式保存在磁盘上,不支持索引,没有并发控制。一般保存少量数据的小表,生产环境上作用有限。可以用于平时练习测试用。如:②Memory 内存引擎,数据以未压缩的原始形式直接保存在内存当中,服务器重启数据就会消失。读写操作不会相互阻塞,不支持索引。简单查询下有非常非常高的性能表现(超过 10G/s)。 一般用到它的地方不多,除了用来测试,就是在需要非常高的性
2025-02-21 18:16:07
1210
原创 flink UDF使用
Flink UDF(User-Defined Function)是用户自定义函数,用于扩展 Flink SQL 或 Table API 的内置函数功能。
2025-02-20 19:31:41
1313
原创 设计模式理解与总结
设计模式是一种在软件开发中常见的解决方案,用于解决特定类型的问题。它们是经过实践验证的最佳实践,提供了一些设计方案,以提高代码的可重用性、可维护性和可扩展性。
2025-02-20 18:57:07
686
原创 JVM--内存泄漏
内存泄露:指程序中动态分配内存给一些临时对象,但对象不会被GC回收,它始终占用内存,被分配的对象可达但已无用。即无用对象持续占有内存或无用对象的内存得不到及时释放,从而造成的内存空间浪费。
2025-02-11 16:00:58
798
原创 Spark性能调优方法总结
Spark的分配资源主要就是 executor、cpu per executor、memory per executor、driver memory 等的调节,我们在生产环境中,提交spark作业时,用的spark-submit shell脚本,里面调整对应的参数:/usr/local/spark/bin/spark-submit –conf spark.default.parallelism=12 –num-executors 3 –executor-cores 2 –executor-me
2025-02-11 01:09:47
3345
1
原创 Spark--FIFO,Fair调度器
Spark 中的调度模式主要有两种:FIFO 和 FAIR。使用哪种调度器由参数 spark.scheduler.mode 来设置,可选的参数有 FAIR 和 FIFO,默认是FIFO。在 Scheduler 模块中,当 stage 划分好,然后提交 Task 的过程中,会进入 TaskSchedulerlmpl 的submitTasks 方法。
2025-02-10 16:28:10
641
原创 Hadoop--FIFO、Capacity、Fair资源调度器
目前,Hadoop作业调度器主要有三种:FIFO、Capacity Scheduler、Fair Scheduler。Hadoop3.1.3默认的资源调度器是Capacity Scheduler。
2025-02-10 01:07:11
741
原创 Spark通信框架rpc源码篇
接下来,我们看一个具体的案例:在standalone模式中,worker会定时发心跳消息(SendHeartbeat)给master,那心跳消息是怎么从worker发送到master的呢,master又是怎么接收消息的?
2025-02-09 20:35:18
980
原创 spark通信框架rpc原理篇
(Remote Procedure Call)是的缩写,是一种通信协议,。RPC在分布式系统中非常常用,因为它可以让程序员像调用本地函数一样来调用远程服务。在Apache Spark中,RPC是用于在节点之间进行通信的机制Spark使用Netty作为RPC框架,它可以让节点之间的通信更快、更可靠。在Spark中,RPC主要用于在Executor和Driver之间传输数据和调用方法。例如,当Executor需要将数据传输到Driver时,它会使用RPC机制将数据发送到Driver。
2025-02-09 17:44:27
1947
原创 spark运行架构
Spark集群Cluster Manager目前支持如下三种模式:Standalone模式、YARN模式和Mesos模式。这里重要介绍前两种。
2025-02-08 14:20:56
1622
原创 Spark--Shuffle Read流程源码解析
显然,这个方法才是核心所在。所以很显然,我们想知道的shuffle读取数据的具体逻辑就藏在ShuffleBlockFetcherIterator中。
2025-02-07 18:02:14
939
原创 Spark--Shuffle Write流程源码解析
7、TaskRunner在调用run方法时,会调用Task的run方法,然后调用子类的runTask方法,Task有两个子类,分别是ShuffleMapTask和ResultTask,ResultTask无需shuffle,对数据进行相应的逻辑处理(func)后返回。6、executor端实例化一个线程池来准备task的计算,创建的threadPool中以多线程并发执行和线程复用的方式来高效执行task,接收到task执行的命令后,会首先把task封装在TaskRunner中,然后交给线程池中的线程处理。
2025-02-07 10:31:43
492
原创 Spark--Shuffle机制理解及优化
DAGScheduler调度时会根据是否需要经过Shuffle过程将]ob划分为多个Stage。Shuffle就这么重要?正是由于Shufie的计算几乎需要消耗所有类型的硬件资源,比如CPU、内存、磁盘与网络,在绝大多数的Spark作业中,Shufie往往是作业执行性能的瓶颈。Shuffle的本质就是数据重组分发的过程。有了上图的形状分类的直观对比,我们现在就可以直接给 Shuffle 下一个正式的定义了。集群范围内跨节点、跨进程的数据分发。
2025-02-07 01:14:32
1525
原创 Spark--执行器后端和调度器后端扮演什么角色
负责资源管理,与集群管理器交互,协调任务调度:负责在Executor中执行任务,并与Driver进行任务状态的反馈。
2025-02-06 17:51:28
305
原创 Spark--Driver与Executor间的通信--源码解读
1、接下来先看Excutor端向Driver注册,看ExecutorBackend进程做了什么,上次最后一步为,但是实际的命令为:所以首先double shift找到org.apache.spark.executor.CoarseGrainedExecutorBackend这个类继承了lsolatedRpcEndpoint,所以这个类也是一个Endpoint。
2025-02-06 17:37:16
840
原创 Spark--Task切分源码分析
说到任务的划分,就不得不提到RDD,我们知道在spark中,算子只有在遇到行动算子才会执行(如colect()),转换算子都是懒加载,所以要想知道Task任务怎么划分的,得先从行动算子看起,我们下面以WordCount项目为例:12.再往下滑,定义了这个tasks,并且根据stage的依赖情况赋值13.再往下滑,把任务由DAGScheduler交由TaskScheduler处理。
2025-02-06 13:47:12
576
原创 Spark--任务执行流程
8、DAGScheduler根据shuffle依赖从后往前划分stage,将每个stage的tasks信息(包括最优先的资源位置)封装成一个taskSet,从前往后提交给TaskScheduler。10、driver端进行资源画像,决定如何将task分配给可用的executor,将task信息和其资源信息封装成LunchExecutor,发送给executor端。6、executor端构建rpcEnv,与driver端建立通信,创建executor,并将executor信息发送给driver端。
2025-02-06 11:51:45
562
原创 Spark--分区数的确定
1.如果textFile指定分区数量为0或者1的话,defaultMinPartitions值为1,则有多少个文件,就会有多少个分区。2.如果不指定默认分区数量,则默认分区数量为2,则会根据所有文件字节大小totalSize除以分区数量partitons的值goalSize,然后比较goalSize和hdfs指定分块大小(这里是32M)作比较,以较小的最为goalSize作为切分大小,对每个文件进行切分,若文件大于大于goalSize,则会生成该文件大小/goalSize + 1个分区。
2025-02-06 00:40:12
947
原创 Spark--算子执行原理
SortByKey是一个transformation算子,但是会触发action,因为在sortByKey方法内部,会对每个分区进行采样,构建分区规则(RangePartitioner)。
2025-02-05 19:51:57
781
原创 Spark--如何理解RDD
rdd是对数据集的逻辑表示,本身并不存储数据,只是封装了计算逻辑,并构建执行计划,通过保存血缘关系来记录rdd的执行过程和历史(当一个rdd需要重算时,系统会根据血缘关系追溯到最初的数据源,重建丢失的数据),调用行动算子时,会从数据源读取数据并进行计算。
2025-02-05 15:32:14
2126
原创 MySQL--为什么有了redo log还需要double write buffer机制?
我们都知道,数据页被加载到内存中,经过增删改操作后,并不会直接落盘,而是由后台线程择机统一刷盘。在数据页尚未落盘时,如果这时MySQL突然崩溃或者断电,内存中的数据将全部丢失。这时,redo log就可以发挥其作用了,只要重放redo log就可以恢复事务。但是,MySQL的buffer一页的大小是16K,底层文件系统一页的大小是4K,换句话说,MySQL将一页buffer数据刷入磁盘,需要写到4个文件系统里的页。
2025-01-20 22:39:34
459
原创 Java中的装箱和拆箱是什么
要了解这一机制,首先得知道Java的八大基本数据类型:byte,short,int,long,float,double,char,boolean。比如,将字符串转换为整型int,可以使用Integer.parseInt()方法,转换为浮点型Double,可以使用Double.parseDouble()方法。因此,如果要将基本数据类型的数据存储在集合中,就必须使用其对应的包装类。另一种是在方法调用的时候,比如一个Integer类型的方法,参数列表为Integer类型,但是传入了一个int类型的变量。
2025-01-17 22:23:53
458
原创 MySQL一行记录是怎么存储的
MySQL默认的存储引擎是InnoDB,InnoDB存储的数据放在哪里呢?所以,数据默认会被存放在目录下。我们每创建一个 database(数据库)都会在目录里面创建一个以database为名的目录,然后保存表结构和表数据的文件都会存放在这个目录里。假如,我这里有一个名为 my_test 的 database,该 database 里有一张名为 t_order 数据库表。那么,在目录下有什么文件呢?.frm.ibd所以,MySQL 的数据存放在目录下的.ibd文件中。
2025-01-17 13:55:27
1037
原创 Spark源码编译流程
如果我们配置了此项,那么打包时会忽略很多依赖项,很容易造成编译失败的问题。即使编译成功了,目标环境的这些依赖项,与编译好的Spark运行所需要的依赖项也很容易发生冲突,产生运行时报错的问题。因为编译源码需要导入提前编译好的Spark文件中的所有jar包,所有spark-3.0.3.tgz (Spark源码)和spark-3.0.3-bin-hadoop3.2.tgz(编译好的Spark)都要下载。解决方法:打开报错信息中对应的scala文件,找到如下代码,至此,关于spark源码的编译与打包已完成。
2025-01-17 13:54:18
1135
原创 Namenode is on safe mode
在这个过程中,Namenode会将元数据加载到内存中,并且收集datanode汇报过来的block块信息,Namenode的元数据中记录了文件系统中所有文件的元数据(这个文件多大,有几块,副本数是多少?),如果这时datanode挂掉或者磁盘出现损坏导致块丢失,Namenode就会进入安全模式。这时,如果datanode恢复正常,或者通过其他副本复制至原本应有的副本数(默认是3个),Namenode就会退出安全模式。Namenode如果发现,集群中文件block数丢失达到0.001%,则会进入安全模式。
2025-01-17 13:48:27
361
原创 大数据常用端口号
spark 的master与worker进行通讯的端口 ,standalone集群提交Application的端口 7077。查看当前Spark-shell 运行情况端口号,Driver的WEB UI 端口 4040。CDH的regionServer的WEB UI 管理端口 60030。HDFS Web UI端口(查看集群文件及目录) 9870。Apache的master的WEB UI端口 16010。CDH的master的WEB UI端口 60010。
2025-01-17 13:44:30
283
原创 MySQL--Buffer Pool是如何管理缓存页的,又是如何提高缓存命中率的?
Innodb 存储引擎设计了一个缓冲池(Buffer Pool),来提高数据库的读写性能。
2025-01-16 22:51:22
603
原创 MySQL日志--undolog,redolog,binlog
我们知道,在MySQL中,事务有四个特性:原子性,一致性,隔离性和持久性。那么,这些特性是怎么实现的呢?其中原子性和持久性就是通过MySQL的undo log和redo log来实现的。
2025-01-16 18:42:56
669
原创 MySQL-锁
在 MySQL 中,锁具有很重要的作用,它可以保证事务的隔离性,同时保证数据的完整性和有效性。根据加锁的范围,可以分为全局锁、表级锁和行锁三类。
2025-01-16 15:06:25
838
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅