自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 大数据数仓建模中星型模型和雪花模型,你了解吗?

雪花模型就是在星型模型的基础上对已经提取出的维度表再次拆分后形成的表关系描述;现实情况中对于雪花模型的设计规范会更符合数据库的范式要求,但是由于数据的拆分粒度更细涉及到多表的关联从而导致数据的分析效率变低;这两种模型描述的都是数仓建模中事实表和维度表之间的拆分关系;星型和雪花的形状相同的特点都是一个中心向四周辐射,中心点代表着事实表,向四周辐射的点代表维度表;这两种模型的不同点在于星型模型的维度只辐射一次,雪花模型的维度在辐射玩一次之后会再次向外辐射,也就是在维度表中再次拆分出新的维度。

2024-04-06 19:31:04 452

原创 大数据中拉链表,你懂了吗?

如用户的注册邮箱地址中途发生了变更,对于业务系统来说,一般有两种数据同步方案,第一种是将修改后的这张表的最新全量数据同步给数据仓库端,数据仓库端就可以一直保留最新的用户注册信息;闭链则是对最初生成的那条数据进行状态修改之后所呈现的样子,闭链代表该数据中的信息已经失效;为了区分当前是开链或者是闭链,在拉链表中引入两个除业务字段之外的特殊字段,一个叫xx_start_time另一个叫xx_end_time,前者代表这条数据的业务操作生成时间,后者代表这条数据开链或者闭链的状态,或者说生命周期状态;

2024-04-06 11:01:45 366

原创 宽表的优缺点,你明白吗?

宽表的缺点,因为把所有跟某个事件相关的维度都揉在了一起,这样就会导致其中一些变化缓慢的维度信息出现大量的数据重复,从而占据过多的存储空间;如果类似的需求很多的话,那么系统就会出现大量这种复用度很低的宽表,给人感觉整个数仓的建设缺少设计感,系统的开发效率也会变低,因为没有中间层的概念,所以就没有模块复用这种情况;宽表属于事实表的一种,宽表就是字段较多的表,字段多就意味着包含更多的数据信息,信息多意味着能够提供更完整的业务价值,宽表的实现在效率上会比普通表来的更快。

2024-04-02 20:34:14 305

原创 数据库中的事实表和维度表,你知道吗?

既然这两类信息不会频繁变化,可以把原来这张大的事实表将其中的跟IP相关的信息给提取出来成为IP信息表,而把网站相关的信息也给提取出来成为网站信息表;比如一个网络监控系统要对人的上网行为进行记录,你每访问的每一个网站、鼠标的每一个点击动作都会产生一条事实数据,这个数据包含你当前上网设备的IP、上网设备的地理位置、网络运营商、访问的网站、网站性质、网站的运营者、网站访问时间、网站的响应时间,这八个字段完整反映了这个上网业务的事实,当我们把数据存到数据库的时候,存储该数据的表就是事实表,也叫流水表。

2024-04-02 19:20:09 440

原创 zookeeper如何保证数据强一致性的?

原子广播中原子就是精确一次性的意思,zookeeper是如何做到数据精确一次性的呢?他是利用了事务的两阶段提交特性;比如这个写入数据虽然可能因为网络延迟等原因,导致写入的各个小弟节点的时间不一致,但他可以保证只有在所有小弟将这份数据写入成功之后才对客户端可见,或者如果因为这个小弟的其他故障无法同步到这份数据那么集群在得知这个消息的时候就不把这个查询请求发送到这台机器上,这样一来就保证了整个zookeeper集群的数据强一致性,所以对外部客户端来说zookeeper就是一个能够提供读写强一致性的分布式系统。

2024-03-31 20:42:12 625

原创 大数据分布式系统中的脑裂,你懂吗?

具体的技术实现是两个预备领导都会向zookeeper的同一个地方写数据,但是因为ZAB算法的策略,限制了zookeeper在同一时间只能接受一个写请求,zookeeper的写请求处理方式是单线程的,这一点和redis很像,有一个先写进那就是领导,另一个就是秘书;脑裂就是由原来只有一个做决策的大脑突然间变成了由多个同时做决策,而这多个大脑在做决策时,因为互相之间的信息并不同步而导致的决策之间发生冲突进而让分布式系统的管理陷入到一种混乱的局面,分布式系统中引入了多个管理者同时做决策的现象就叫脑裂。

2024-03-25 23:25:55 281

原创 大数据分布式计算引擎用虚拟CPU的核心原因?

为什么是虚拟不是真实的核心数量呢?比如有两颗算力不同的CPU他们的核心数或者总线程数是一样的,但是前者的算力是后者算力的两倍,那么在设置虚拟核心数量的时候前者就可以将物理核心数与虚拟核心数的配比设置为1:2,而对于后者物理核心数与虚拟核心数的配比设置为1:1,这样一来通过虚拟核心数的分配方式相同的虚拟核心数量就代表着相同的算力可以有效屏蔽不同CPU之间的算力差异,让算力不同的服务器之间尽可能的保证相同的计算负载。在给一个分布式任务比如spark分配CPU核心数量时,这个核心数其实指的是虚拟核心数。

2024-03-24 22:30:51 393

原创 大数据实时计算的Windows功能?

Windows是数据流的时间窗口,流式数据特点就是源源不断没有边界,但是对于我们数据使用者而言很多时候业务要求对特定时间长度的数据进行切片并统计分析,以此来反映通过时间变化某个业务指标的变化情况,这个时候就需要用到流式计算引擎中的Windows功能,也叫时间窗口功能,就是每次取数据流中特定时间长度的数据进行计算分析。实际用的比较多的是第一种和第二种,而在开发过程中Windows功能一般都会结合watermark功能一起使用,以此来满足流式时间片段的统计需求。

2024-03-24 16:43:21 467

原创 大数据实时计算中的watermark你理解了吗?

Event time 叫事件时间,Process time叫数据的处理时间。为了保证数据处理的及时性同时兼顾数据价值的有效性,业务一般会要求对在一定时间范围内迟到的数据给予一定的宽容度,允许数据从生成到进入计算引擎这个过程中可以有5分钟的迟到时间,超出该时间晚到的数据计算引擎会将其抛弃,这种根据数据的event time和数据的process time时间差来判断当前数据是否被纳入计算的方案就叫watermark。

2024-03-24 12:12:01 201

原创 大数据分布式事务的深入理解?

A账户跨行向B账户转账,第一阶段为银联收到转账申请后先向A账户所在银行发起扣钱操作,A只执行不提交也就是只在内存中对金额进行扣减但是不写入到磁盘中然后把执行成功的消息告诉银联,接着银联再向B的所在的银行发起加钱操作也只是在内存中对账户金额进行增加并不写入磁盘,然后再把执行成功的消息也告诉银联,第一阶段也可称为投票阶段,如果A、B操作都成功则投票成功,否则为失败。事务的理解,比如你要将账户A转1块钱到账户B中,那么这个行为在执行时会被拆分成两个步骤,第一步是将A账户扣掉1块钱,第二步就是将B账户加上1块钱;

2024-03-23 18:18:57 952

原创 线程池的使用你懂了吗?

这个时候就需要考虑用线程池方案,提前把后续需要用到的硬件资源准备好放到一个容器中在有数据计算需要的时候直接去取,而数据计算完成后再将其归还,避免自己去创建和关闭的过程;当我们想用一个程序去解决现实中的数据计算问题时,如果这个数据有多份那为了加快计算的效率,我们一般会考虑用多个线程来对这多份数据进行同时计算,这里的线程本质上就是CPU和内存资源,每个线程计算一份数据,计算完之后再关闭线程,已释放相应的CPU和内存资源,同样的这里的线程申请和关闭都需要通过操作系统调用代价同样很高。

2024-03-23 11:13:45 277

原创 网络通信过程中为什么需要连接池?

连接池的原理就是把一堆后续可能会用到的连接通道给提前打开,然后放到一个容器里面给管理起来,后续任何一个通信请求进来了就行容器申请已经创建好的连接通道用完之后再还回去,自己不用去管理创建和关闭的问题;在大数据系统内部一定会存在多个技术组件且在集群正常工作时多个组件之间一定会存在相互通信传递数据或者请求的过程,为了保证通信的可靠性,在通信前就需要建立这样一条彼此之间的连接通道,而这条通道的建立本质上就是请求端和被请求端各开辟一块内存资源来满足双方数据或请求的传递。

2024-03-23 10:03:52 269

原创 大数据中的幂等是啥,你知道吗?

例如在一个规范的大数据系统中对一个业务模块的数据处理一定会经过一条完整的数据处理链,在整个处理过程中一定会经历若干个步骤,每个步骤之间可能由不同的技术组件来实现,比如从数据源把原始数据通过生产者API写入到消息队列然后再通过消费者API对其进行消费计算最终把业务结果写入到数据库中,你会发现在这个过程中的每一步很多API都可以给你提供一些所谓的幂等性配置或者事务性设置来保证单个步骤的幂等性,但是当你把整个流程串起来并部署到生产环境经过长时间的大数据量压力下的考验之后会发现很多地方并不能如你所愿;

2024-03-22 23:15:25 402

原创 大数据的实时计算和离线计算你理解吗?

那么实时计算就是用一根水管接在水龙头的出水处另一端连接的就是生产纯净水的机器,特点是可以源源不断的生产纯净水速度很快但是每次只能生产一瓶。而离线计算就是在水龙头下方,先用个水桶来接水,只有当水桶接满了水之后才对其进行纯净水的生产,特点是隔一段时间才能生产一次,每次生产的时间比较长但是每次能生产一桶水。而离线计算的计算逻辑则相对复杂,虽然每次产生的业务价值较大但是效率低不够及时。不管是实时计算还是离线计算,都有着同样的业务目标,那就是根据业务要求把数据源计算处理成业务需要的直接可用的数据结果。

2024-03-22 20:20:53 326

原创 Spark中driver、executor、job、stage、task、partition你懂吗?

对于任何一个application来说会存在若干个job,以及每个job中会存在若干个stage,而一个application有多少个job由代码中有多少个action算子来决定,最简单的application就只有一个action算子那么就只有一个job,而每个job中有多少个stage就看每一个job的处理逻辑中有多少次的shuffle操作,如果没有shuffle则只有一个stage,而如果有N个shuffle,那么就会有N+1个stage。

2024-03-21 22:55:28 276 1

原创 大数据技术是多线程还是多进程,你知道吗?

首先大数据技术区别于传统技术的核心在于分治思想就是分而治之,让原本只能在一台机器上去干的活给分摊到多台机器中,让每台机器都能够运行一个做这件事的子任务,而这个子任务就是进程,因为有多台机器一起参与运行所以是多进程,这个是利用了多台机器的计算能力;大数据开发用分布式计算引擎处理数据时如果分配多个executor,那么就会在多台机器上启动多个进程,而如果对一个executor分配多个CPU的话,那么就会在每一台机器上再次启动多个线程来进一步加速任务的执行,所以大数据技术一定是多进程和多线程的。

2024-03-21 21:34:01 235 1

原创 SparkSQL与RDD的选择?

对当下的企业级数据应用来说,SparkSQL的应用空间肯定要比单纯的写RDD处理大很多,因为SparkSQL比RDD好写的多,也更贴近业务需求和更友好的能处理数据,而且技术门槛也更低。

2024-03-21 19:54:05 236 1

原创 数仓,大数据平台,数据中台,数据湖

数据湖的概念分为侠义和广义的两种,侠义的数据湖指的是数据湖存储指可以存放各种格式的海量数据的地方,而广义的数据湖除了数据存储之外还包含数据的管理和分析提供数据目录、数据服务、以及统一的数据访问方式;这个一般完善的数据处理系统都能做。

2024-03-19 22:32:44 325 1

原创 Hive的深度理解

传统数据库的数据存储格式是固定的数据结构,使用者无法选择。Hive的数据存储格式是可以选择的,常用的有普通的TXT、SequenceFile、ORC、Parquet等等,与HIve是一种松耦合的关系且除了TXT格式外其他的数据存储格式都是列式存储,而传统的数据库则全是行存储。传统的数据库数据存储和数据引擎是一体的两者是紧密相连的、离了谁都不行,但Hive的数据存储和数据引擎是分离的,属于两个完全不同的技术架构且都可以独立存在和使用是一种合作共赢的关系。

2024-03-17 19:53:04 305 1

原创 Java中锁的理解你到位了吗?

将锁理解为资源独占更形象,也就是说这个资源我在使用时其他人就只能等着、排队,等我用完了才能轮到下一个人用;当我用锁时就叫拥有锁,当我用完锁就叫释放锁。因此对于有限资源进行加锁操作是保证资源能够得到有效利用的最佳手段之一。

2024-03-17 15:33:19 304 1

原创 MapReduce的思想你知道吗?

Map分制,Reduce规约,MapReduce将所有对数据的复杂操作都简单抽象成Map和Reduce两个阶段,能满足对所有数据计算的要求。分制就是分而治之将原本很大的数据集拆分成多个小份,每台服务器只计算一个小部分就能各个击破显著提高效率。规约就是将原本分散在各个服务器上小份数据的计算结果进行再次的联合进一步计算得到最终的结果。

2024-03-17 15:20:01 346 1

原创 MapReduce中shuffle到底是啥?

但是对于一些比较复杂的数据处理来说光并行还不够,为了满足一些复杂的业务需求服务器之间的数据还需要进一步交互,比如服务器1需要跟服务器2,服务器3需要跟服务器4上面的数据进行重组、合并,这个时候就只能把这些个需要重新合并的数据再次输入到其他服务器上,为了更好的完成数据的这种重新组合需要将一部分数据写入到磁盘中来协助完成这个过程,这种将原本分布在多台服务器上的数据通过某种业务规则进行重新合并的过程就是shuffle了。

2024-03-17 10:29:39 349 1

原创 Spark比MapReduce快的根本原因你知道吗?

第一个:MapReduce的计算模型只有简单的Map和Reduce,且Map阶段所产生的数据必须全部写到磁盘中而且这些数据会进行Sort和Combine操作然后才进入Reduce阶段,IO效率很低;第二个:对于一个复杂计算来说,如果有很多阶段的话,MapReduce会启动多个应用而Spark则可以利用独有的DAG依赖关系只需要启动一个应用就可以完成所有计算,避免重复启动应用带来的性能损耗。第三个:从编程角度看Spark根据数据计算的功能不同提供了更多灵活便捷的算子使编程变得更加优雅和高效。

2024-03-16 20:59:04 389 1

原创 如何理解Spark中Driver和Executor?

第二个Driver还负责管理广播变量和累加器,广播变量负责将一个只读对象传递到所有的executor端提供数据计算的需求,而累加器则是用来收集executor端数据的累计行为。任何分布式服务都会有两种角色,一个是Master另一个是Slaver,前者是领导专门负责指挥和调度,后者是员工专门负责干活的;Driver相当于Master,Executor相当于Slaver,前者负责任务的分配和管理,后者负责对数据进行计算。第二个对计算后的最终的RDD或者DataSet进行持久化存储。

2024-03-16 16:54:56 371 1

原创 如何更好的理解Spark中的RDD?

分布式计算引擎的本质就是将一堆很大的数据进行打散,分散到多台机器上去利用人多力量大的特点对这些分散的数据进行同时计算,对数据的计算过程会经历很多的步骤和阶段,为了避免开发人员过多关注数据细节于是给这些同时分散在多台机器之上用于执行同一个计算操作的数据叫做RDD,中文叫做分布式弹性数据集。弹性是可伸缩,例如原来我的数据分散在三台机器上就是基于三台机器的RDD,如果三台机器的计算速度比较慢,于是可以将其分散到十台机器上来实现十台机器的并发计算,这个时候就是基于十台机器的RDD。

2024-03-16 11:13:12 338 1

原创 如何深度理解广播变量?

例如分析一批关于银行信用问题的数据时,如果有一批老赖的黑名单,就可以将这部分数据通过广播变量的方式传递到各个executor端,然后在代码逻辑中逐一进行判断给每一条数据打上标签,有助于接下来的数据分析。在Spark中是一个由Driver端一次性生成然后扩散到所有executor端的数据集合,是一个只读的、不可变的对象,因此这里的变量严格来说应该叫常量。三、广播变量采用懒加载的方式,它并不是你在driver端一创建就马上传递到所有executor端,而是当executor端调用了读取方法之后才会被传递过去。

2024-03-16 10:21:40 361 1

原创 Spark的累加器如何理解?

例如用来统计程序中遇到的脏数据总条数或对程序处理过程中捕获的异常情况等等,可以将这些信息统一写到累加器中等程序运行结束统一查看,避免直接在代码中打印或从日志中查找或者写数据库带来的繁琐步骤。生成之初是一个初始值为0的对象或者空对象,只在executor端对其进行累加操作。二、因为累加器是线程安全的所以在对其进行操作时不宜并发过大,也就是不建议对累加器进行频繁操作否则对导致整个Spark程序运行效率低下。三、Driver端只负责生成和查看累加器的结果,而executor端则只负责对累加器进行累加行为。

2024-03-15 21:21:35 443 1

原创 消息队列的原理

重点在对列,也就是需要排队,讲究先来后到,消息队列排队的是数据,排在前面的数据会被程序先读取到后面的数据只能等前面的数据读完了才能轮到它,中间不能插队。分布式消息队列:由原来的单个队列变成了多个队列处理数据,常见的有Kafka、 RabbitMQ、Rocket MQ等等。

2024-03-15 20:47:58 350 1

原创 HDFS如何更简单理解?

当我们要保存文件时只能登录到具体的某台服务器,然后把文件存到其中的磁盘上,但是如果我要存储的文件很多而这台服务器恰好都存满了那我只能接着找下一台服务器接着存;能不能把要存的文件交给一个中间人让他来决定把我要存的文件放到哪台服务器上,分布式文件系统的功能由此而来。每次存文件时只需调用HDFS对应的服务,HDFS就是自动将要存的文件根据一些规则运算把它存到一台合适的服务器硬盘上,而且为了防止这个文件因为某些原因被误删,HDFS还会把这个文件在其他机器上存一份一摸一样的拷贝,而这就是HDFS的容错机制。

2024-03-15 19:38:13 317 1

原创 RDD,DataFrame,DataSet三种数据模型的实践理解

spark1.0有的RDD,是spark数据据模型的核心底座,通过spark读取数据源到内存中时都是统一的数据模型叫RDD,是一个纯粹的没有任何修饰的数据集合;对于那种很有规则的结构化数据,能不能操作更简单些用贴近业务需求的SQL语句来操作,然后开始发展。spark1.3有DataFrame,不在像RDD那样原始数据什么样读到内存中就是啥样,是在RDD的基础上增加一个带表结构的Schema,让读到内存中的数据瞬间变成了一张结构化的表,就可以通过熟悉的SQL语句来用更贴近业务需要的方式对数据操作;

2024-03-15 08:07:57 486 1

原创 面试官问:给你一亿数据做分析该如何优化?

其次数据的形态是咋样的?第三种架构设计上的优化,利用流式技术将批处理改造成实时流计算,尤其是计算资源受限的情况下将原本并不复杂的分析场景从基于一段时间数据的分析优化为微批次的准实时分析,在借用一些数据库的物化视图功能将微批的处理结果最终汇总到一张结果表来解决单次大数据量分析的效率优化。第二种情况利用分治的思想,可能是硬件资源不够计算的数据太多,取常用的字段进行分区,比如添加日期分区每次只分析一个特定的日期数据先得到一个中间结果然后对这些中间结果再次聚合分析得到最终的结果,

2024-03-14 21:58:06 422

原创 集群环境jar包和开发环境冲突的解决方法

2、开发环境与集群环境并不是因为(相同功能)jar包版本不一样而引起的冲突,而是在两个环境中出现了两个一摸一样的类名,但程序运行时只能加载开发环境中的类名不加载yarn中的类名,如果把yarn中类对应的jar包删除后果有可能yarn服务不能正常运行;1、开发环境jar包与yarn环境中的jar包版本不一致时,修改开发环境中该jar包版本与yarn环境中的一致或者在pom文件中用provided的关键字忽略对该jar包的编译来解决。排除掉哪个版本的jar包不正确;

2024-03-14 20:00:53 333

原创 Kafka消费端如何理解”精确一次性消费“

这样就算任务重启也知道从Kafka的哪个地方开始消费,但会有bug就是在一些特殊情况下数据消费完写数据库成功了但Kafka偏移量保存却失败了,或者Kafka的偏移量保存成功了而实际消费到的Kafka数据却并没有成功写入到数据库里。这个流程就可以保证消费到的Kafka数据写入到数据库不会丢失,也就是满足至少一次性消费,设计写入数据库中的唯一key来唯一标识每次写入数据库的记录,当key相同时数据被覆盖或者被抛弃,这样就保证数据库记录的不重复。精确一次性消费是指数据被消费后写入数据库的精确一次性;

2024-03-13 08:24:18 841

原创 数据治理之如何保证数据质量问题

比如设置日增数据量的阈值以及对于计算结果某些关键指标的阈值两种方式。当数据从数据源取回来的第一步就可根据这个制定的规则先看数据量是否在阈值范围内,例如正常情况下是一万条数据,而阈值设置为上下浮动百分之十,如果数据量只有一千条超过该阈值就应该马上触发告警让运维或开发人员第一时间干预;最后对于最终计算的结果核查方式一般也是根据以往的经验将最终计算结果中某些关键指标跟以往同期处理的正常结果做一个同比或者环比,看指标的变换情况是否在可接受的阈值范围内,如果超出则是异常应该触发告警。

2024-03-12 21:19:06 522

空空如也

空空如也

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

TA关注的人

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