- 博客(361)
- 收藏
- 关注
原创 【大数据学习 | 面经】Spark的shuffle hash join的具体细节
shuffle hash join是Spark中一种常见的连接策略,尤其适用于两个数据集都比较大且无法通过广播来优化的情况。其核心思想是通过对连接键进行哈希分区,使得相同键值的数据被分配到相同的分区中,从而可以在每个分区独立的执行连接操作。
2024-12-05 23:01:12
757
原创 【大数据学习 | 面经】yarn的资源申请和分配的单位-Container
因此,虽然资源是以container为单位进行申请的,但这是在application级别进行管理的,并且是为了执行特定的tasks。总结就是:application申请和资源分配的单位是container,整个执行过程是application驱动,并且是为了满足task的执行需求。在yarn中,资源的申请和分配是以container为单位进行的,而不是直接以application和task为单位。
2024-12-05 21:10:49
436
原创 【大数据学习 | 面经】yarn三种调度方式
在YARN的(Yet Another Resource Negotiator)集群中,资源调度器负责管理和分配集群中的计算资源给不同的应用。yarn支持多种资源调度模式,以适应不同类型的作业和用户需求。以下是yarn集群模式下的三种主要资源调度模式。
2024-12-05 21:00:19
581
原创 【大数据学习 | 面经】Spark的四种join方式
在Spark中,join操作用于合并两个数据集(如dataFrame和Dataset),其原理依赖于分布式计算的特性。Spark的join主要通过不同的连接策略来实现,选择哪种策略取决于多种因素,包括参数连接的数据集大小,是否进行了广播,是否有共同的分区分区键等。
2024-12-02 22:41:59
680
原创 【大数据学习 | 面经】Spark 3.x 中的AQE(自适应查询执行)
通过这些机制,AQE 在运行时动态优化执行计划,根据实时数据特征调整,从而提升查询性能,减少资源消耗,并减少手动调优的需求。这些改进使得 Spark 3.x 在处理大型或倾斜数据集时,相较于 Spark 2.x,性能有了显著提升。
2024-12-02 22:11:29
935
原创 【大数据学习 | 面经】Spark3.x对比2.x有哪些优点
提供了更为统一的编程接口,简化了DataFrame和Dataset API的使用,同时更强了Structured Streaming的功能。改进了SQL查询中的分区裁剪能力,允许在运行时根据过滤条件更精确的确定需要读取的分区,从而减少不必要的IO操作。增强了广播连接功能,使得广播表的选择更加智能,减少不必要的广播操作,并且可以更好的处理大表与小表之间的连接。对TPC-DS基准测试中的一些查询性能有显著提升,部分查询的速度提高了2倍到18倍。
2024-12-02 21:58:20
490
原创 【大数据学习 | 面经】Spark为什么比MR计算更快
(cache算子可以将数据缓存在内存中,避免大量的重复计算),减少对磁盘I/O的依赖。对于需要反复迭代的数据处理任务,如机器学习算法,这种特性可以极大提高效率。综上所述,Spark之所以能在很多场景下表现出优于MR的速度,是因为它结合了内存计算的优势、先进的任务调度机制、精简的操作流程、JVM级别的性能优化以及良好的开发体验。MR由于其固有的架构,在某些情况下会强制执行额外的MapReduce阶段,即使这些阶段并不总是必要的。而在MR中,每个Task都需要单独启动新的JVM实例,这导致了更高的启动成本。
2024-12-02 21:47:20
494
原创 【大数据学习 | 面经】HDFS的三副本机制和编码机制
通过将每个文件的数据块复制三个副本,并分散存储在不同的DateNode上,hdfs能够在节点故障的时候提供数据冗余和持续访问的能力。例如,当读取数据时,如果某些块不可用,系统会选择从其他可用的块中重建所需的数据,而不是等待所有块都可用。:相比于传统的三副本机制,纠删码可以显著减少所需的存储空间。HDFS会将大文件分割成固定大下的数据块(默认参数是128M).每个这样的数据块都会被独立的处理和管理。这意味着即使丢失了任意3个块(无论是数据块还是校验块),仍然可以从剩下的6个块中恢复出完整的原始数据。
2024-11-30 21:14:56
865
原创 【大数据学习 | Spark-SQL】定义UDF和DUAF,UDTF函数
一般指的是用户自己定义的单行函数。一进一出,函数接受的是一行中的一个或者多个字段值,返回一个值。比如MySQL中的,日期相关的dateDiff函数,字符串相关的substring函数。定义一个Scala函数,并将其注册为UDF。示例指的是用户自定义的聚合函数,多进一出,比如MySQL中的,count函数,avg函数。以学生信息为主进行统计,所有人员的年龄的总和或者每个性别的年龄的平均值/***/// 注册udaf函数""".show()// udaf的类继承Aggregator抽象类。
2024-11-29 19:54:53
1748
原创 【大数据学习 | Spark调优篇】Spark之JVM调优
根据经验来看,对于垃圾回收的调优,因为jvm的调优是非常复杂和敏感的。除非真的到了万不得已的地步,并且,自己本身又对jvm相关的技术很了解,那么此时进行Eden区域的调节是可以的。一些高级的参数:设置年轻代中Eden区与Survivor区的大小比值。如果值为4,那么就是Eden跟两个Survivor的比例是4:2,也就是说每个Survivor占据的年轻代的比例是1/6,所以,你其实也可以尝试调大Survivor区域的大小。调节新生代和老年代的比例。
2024-11-29 17:17:53
1232
原创 【大数据学习 | Spark调优篇】常用的shuffle优化
shuffle是一个涉及到CPU(序列化反序列化)、网络IO(跨节点数据传输)以及磁盘IO(shuffle中间结果落盘)的操作。spark.reducer.maxSizeInFlight:reduce task的拉取缓存,默认48m。spark.shuffle.file.buffer:map task的写磁盘缓存,默认32k。spark.shuffle.io.maxRetries:拉取失败的最大重试次数,默认3次。spark.shuffle.io.retryWait:拉取失败的重试间隔,默认5s。
2024-11-29 17:10:50
1069
原创 【大数据学习 | Spark调优篇】Spark之内存调优
也可以通过cache或者persist将中间的计算结果放到内存或者磁盘中,但也未必完全可靠,假如内存或者硬盘坏了,也会导致spark从头再根据rdd计算一遍,所以就有了checkpoint,其中checkpoint的作用就是将DAG中比较重要的中间数据做一个检查点将结果存储到一个高可用的地方比如HDFS。比如,包含10个字符的String,会占用60个字节。3)Java中的集合类型,比如HashMap和LinkedList,内部使用的是链表数据结构,所以对链表中的每一个数据,都使用了Entry对象来包装。
2024-11-29 16:58:19
1307
原创 【数据仓库 | Data Warehouse】数据仓库的四大特性
数据仓库是用于支持管理和决策的数据集合,它汇集了来自不同数据源的历史数据,以便进行多维度的分析和报告。数据仓库的四大特点是:主题性,集成性,稳定性,时变性。数据仓库是围绕特定的主题组值数据的,而不是围绕特定的应用或事务处理。每个主题代表了一个特定的业务,如销售,财务,客户关系。数据仓库的数据是从多个异构的数据源(如事务处理系统,外部数据,文件等)抽取,清晰,转换并集成的。这些数据源可能有不同的格式和结构,但数据仓库将它们统一成一致的格式。数据仓库中的数据是相对稳定的,不会频繁的更新。
2024-11-28 22:55:05
742
原创 【大数据学习 | Spark-SQL】关于RDD、DataFrame、Dataset对象
DataFrame是一种以RDD为基础的分布式数据集,类似于传统数据库中的二维表格。带有schema元信息,即DataFrame所表示的二维表数据集的每一列都带有名称和类型。dataset是dataFrame的升级版对象,dataframe是一个传统的sql编程对象,如果要想使用dataframe进行灵活开发的比较复杂。dataset和dataFrame是一个类别的对象,都是可以进行sql查询数据的,并且可以支持rdd上面的方法。的特定领域的对象,Dataset也被称为DataFrame的类型化视图,
2024-11-27 23:12:29
779
原创 【大数据学习 | Spark-SQL】SparkSession对象
sparkSession对象融合了sc,sqlSc,hsc三种为一个整体。SparkSession就是sqlContext,不需要转化。之前使用的操作对象有三个。
2024-11-27 23:04:03
570
原创 【大数据学习 | Spark-SQL】SparkSQL读写数据
我们使用sparksql进行编程,编程的过程我们需要创建dataframe对象,这个对象的创建方式我们是先创建RDD然后再转换rdd变成为DataFrame对象。(1.列式存储,检索效率高,防止冗余查询 2.带有汇总信息,查询特别快 3.带有轻量级索引,可以跳过大部分数据进行检索),他们都是二进制文件,带有格式信息。jdbc 方式,它是一种协议,只要符合jdbc规范的服务都可以连接,mysql,oracle,hive,sparksql。以上两个文本都是只有内容的,没有列的。以上都是列式存储问题,
2024-11-27 22:44:46
814
原创 【大数据学习 | Spark】Spark on hive与 hive on Spark的区别
这种方式下,spark可以读取和写入hive表,利用hive的元数据信息来进行表结构的定义和管理。hive on Spark指的是将hive的默认的执行引擎MR换成Spark。sparkSQL使用hive的Metastore来获取表的元数据信息,这样可以在SparkSQL直接访问hive表。sparkSQL支持HiveQL的语法,使得用户可以使用熟悉的Hive查询语句在Spark上执行SQL查询。通过配置Hive使其使用Spark作为执行引擎,可以在不改变现有的Hive查询的情况下,显著提高查询性能。
2024-11-27 22:07:17
934
原创 【大数据学习 | Spark-Core】详解Spark的Shuffle阶段
对spark任务划分阶段,遇到宽依赖会断开,所以在stage 与 stage 之间会产生shuffle,大多数Spark作业的性能主要就是消耗在了shuffle环节,因为该环节包含了大量的磁盘IO、序列化、网络数据传输等操作。负责shuffle过程的执行、计算和处理的组件主要就是ShuffleManager,也即shuffle管理器。而随着Spark的版本的发展,ShuffleManager也在不断迭代。
2024-11-25 00:07:30
1415
原创 【大数据学习 | Spark-Core】BlockManager的分析
4)当Executor 的BlockManager 执行了增删改操作,那就必须将 block 的 blockStatus 上报给Driver端的BlockManagerMaster,BlockManagerMaster 内部的BlockManagerMasterEndPoint 内维护了 元数据信息的映射。BlockManagerMaster负责接受Executor上的BlockManager的注册以及管理BlockManager的元数据信息。负责对内存上的数据进行存储和读写;
2024-11-24 21:30:15
367
原创 【大数据学习 | Spark-Core】Spark之GC优化
垃圾收集 Garbage Collection 通常被称为“GC”,回收没用的对象以释放空间。GC 主要回收的是虚拟机堆内存的空间,因为new 的对象主要是在堆内存。
2024-11-24 21:12:39
990
原创 【大数据学习 | Spark-Core】Spark的kryo序列化
由于大多数Spark计算的内存性质,Spark程序可能会受到集群中任何资源(CPU,网络带宽或内存)的瓶颈。通常,如果内存资源足够,则瓶颈是网络带宽。数据序列化,这对于良好的网络性能至关重要。在Spark的架构中,在网络中传递的或者缓存在内存、硬盘中的对象需要进行序列化操作。比如:1)分发给Executor上的Task2)广播变量3)Shuffle过程中的数据缓存等操作,序列化起到了重要的作用,将对象序列化为慢速格式或占用大量字节的格式将大大减慢计算速度。
2024-11-24 18:49:02
870
原创 【大数据学习 | Spark-Core】广播变量和累加器
对于executor端,driver端的变量是外部变量。excutor端修改了变量count,根本不会让driver端跟着修改。
2024-11-24 17:09:02
1179
原创 【大数据学习 | Spark-Core】RDD的缓存(cache and checkpoint)
首先存储到直接内存中,可以使得jvm的内存使用量减少,效率更高,但是比较危险,jvm中存在GC,可以清空垃圾,但是如果使用直接内存的话,垃圾多了我们可以删除,但是如果应用程序异常退出,这个时候内存是没有人可以管理的。仅内存并且是序列化的方式 _deserialized = true,将存储的jvm中的对象进行二进制byte[],存储起来,以内存的方式,序列化完毕的数据更能够减少存储空间。先以内存为主,然后再使用磁盘,存储空间不够不会报错,会存储一部分数据,可以不序列化,不序列化指的时候内存的部分。
2024-11-23 20:43:28
1283
原创 【大数据学习 | Spark-Core】Spark中的join原理
join是两个结果集之间的链接,需要进行数据的匹配。演示一下join是否存在shuffle。,会发生shuffle。但分区数量不变。
2024-11-22 22:47:06
442
原创 【大数据学习 | Spark-Core】Spark的改变分区的算子
但极端情况下(1000个分区变成1个分区),这时如果将shuffle设置为false,父子RDD是窄依赖关系,他们同处在一个Stage中,就可能造成spark程序的并行度不够,从而影响性能,如果1000个分区变成1个分区,为了使coalesce之前的操作有更好的并行度,可以将shuffle设置为true。如果说一个阶段中存在union或者是coalesce算子会出现rdd的分区数量变化,但是没有shuffle的情况,看最后的rdd的分区个数就是当前阶段的task任务的个数。一定会发生shuffle阶段。
2024-11-22 22:11:52
821
原创 【大数据学习 | Spark-Core】Spark的分区器(HashPartitioner和RangePartitioner)
工作的过程中我们会遇见数据分类的情况,想要根据自己的需求定义分区的规则,让符合规则的数据发送到不同的分区中,这个时候我们就需要自定义分区器了。定义分区器,让数据发送到不同的分区,从而不同的task任务输出的文件结果内容也不同# 自己创建数据data/a.txt# 需求就是将数据按照规则进行分发到不同的分区中# 存储的时候一个文件存储hello其他的文件存储tom jack分区器的定义需要实现分区器的接口??// 设定下游存在几个分区??// 按照key设定分区的位置0else1。
2024-11-22 20:58:28
988
原创 【大数据学习 | Spark-Core】Spark提交及运行流程
3)启动的Executor 进程 会主动与 Driver端通信,Driver 端根据代码的执行情况,产生多个task,发送给Executor;被送到某个Executor上的工作单元,跟MR中的MapTask和ReduceTask概念一样,是运行Application的基本单位。4)Executor 启动 task 做真正的计算,每个Task 得到资源参数后,对相应的输入分片数据执行计算逻辑;运行 Application 的 main() 函数的节点,提交任务,并下发计算任务;spark的集群运行结构。
2024-11-22 20:25:50
790
原创 【大数据学习 | Spark-Core】关于distinct算子
只有shuffle类的算子能够修改分区数量,这些算子不仅仅存在自己的功能,比如分组算子groupBy,它的功能是分组但是却可以修改分区。而这里我们要讲的distinct算子也是一个shuffle类的算子。能够修改分区数量的算子必须存在shuffle。思考一下怎么进行数据去重的?可以增加也可以减少分区数量。这个同sql和mr是一样,去重使用方式很简单。
2024-11-20 23:04:38
422
原创 【大数据学习 | Spark-Core】详解分区个数
FireInputFormat接口继承了InputFormat接口,实现了文件的切分(getSplits方法),而TextInputFormat类与ORCInputFormat继承并实现了FireInputFormat接口。从hdfs读取文件的方式是最正规的方式,我们通过计算原理可以推出blk的个数和分区数量是一致的,本地化计算。我们可以发现数据的读取使用的是textInputFormat,读取的数据内容是文本。因为在计算的过程中,我们是为了做测试,为了达到最大的性能,所以分区数量会自己适配。
2024-11-20 21:55:20
547
原创 【大数据学习 | Spark-Core】RDD的概念与Spark任务的执行流程
RDD提供了一种高度受限的共享内存模型,即RDD是只读的记录分区的集合,不能直接修改,只能基于稳定的物理存储中的数据集来创建RDD,或者通过在其他RDD上执行确定的转换操作(如map、join和groupBy)而创建得到新的RDD。,spark给大家提供了一个编程对象,它是一个抽象的,叫做弹性分布式数据集,这个数据集和一堆数据的集合并且是被分区的,因为分区的数据可以被并行的进行操作,rdd的创建方式有两种。2)RDD经过一系列的“转换”操作,每一次都会产生不同的RDD,供给下一个“转换”使用;
2024-11-19 23:25:23
1172
原创 【大数据学习 | Spark-Core】spark-shell开发
集群代码,会在driver端进行解析,然后让多个机器进行集群形式的执行计算。不是单机代码,但是文件不能再某一个机器上,因为这个命令所有的机器都会执行。问题:第一行代码就读取了数据,为什么第一行没有出现错误?,整体才执行,这样的设计能够最大化的减少内存的使用。本地代码在driver端直接解析执行没有后续。spark中的方法[算子]它是分为两种。spark-shell整体代码。所以上传hdfs文件,读取。spark的代码分为两种。rdd弹性分布式数据集合。代码的整体逻辑是先使用。,但是不执行,一旦使用。
2024-11-19 22:49:44
437
原创 【大数据学习 | Spark-Core】yarn-client与yarn-cluster的区别
这3样需要从提交程序端 上传到 /user/xxx/.sparkStaging/yarnid/目录下(分布式缓存),然后再分发到运行任务的计算节点。当在客户端提交多个spark应用时,它会对客户端造成很大的网络压力,yarn-client模式只适合 交互式环境开发。客户端一经提交可以离开,常用于正常的提交应用,适合生产环境。,那运行和监控executor 的任务都是在yarn集群里面。,所以driver端(客户端)是不能离开的。3)运行任务的jar包(带有代码的jar包)2)运行要依赖的jar包。
2024-11-19 22:43:23
540
原创 【大数据学习 | flume】flume Sink Processors与拦截器Interceptor
比如:一个日志文件(多个系统的日志都在该文件中),根据日志中某个字段值,比如type=1,是系统A日志,sink to hdfs;type=2,是系统B日志,sink to kafka,此时就可以使用Flume多路复用,通过event header 来决定传输到哪个Channel。拦截器可以将flume收集到的event进行拦截,并使用对应的拦截器,对event进行简单修改,过滤。故障转移处理器可以同时指定多个sink输出,按照优先级高低进行数据的分发,并具有故障转移能力。当前实现不允许同时指定多个标头。
2024-11-16 22:44:02
1239
原创 【大数据学习 | flume】flume之常见的sink组件
Flume Sink。Flume也提供了各种sink的实现,包括HDFS sink、Logger sink、Avro sink、File Roll sink、HBase sink,。 Flume Sink在设置存储数据时,可以向文件系统中,数据库中,hadoop中储数据,在日志数据较少时,可以将数据存储在文件系中,并且设定一定的时间间隔保存数据,在日志数据较多时,可以将相应的日志数据存储到Hadoop中,便于日后进行相应的数据分析。
2024-11-16 00:59:48
1593
原创 【大数据学习 | flume】flume之常见的channel组件
Channel是连接Source和Sink的组件,大家可以将它看做一个(数据队列),它可以将事件暂存到内存中也可以持久化到本地磁盘上, 直到Sink处理完该事件,Flume对于Channel,则提供了Memory Channel、JDBC Chanel、File Channel。,内存不够时将数据存储在磁盘中,数据出错恢复时,只恢复磁盘中的数据,还在测试阶段不建议在生产环境用。
2024-11-16 00:36:38
562
原创 【大数据学习 | flume】flume之常见的source组件
监控/root/spool 目录,把文件cp到目录下,flume就开始归集,归集完,把文件重命名为xxx.COMPLETED。用来接收http协议通过get或者post请求发送过来的数据,一般get用于测试,常用的是接收post请求发送过来的数据。a1.sources.r1.ignorePattern = ^(.)*\.tmp$ # 跳过.tmp结尾的文件。,即只要应用程序向日志(文件)里面写数据,source组件就可以获取到日志(文件)中最新的内容。,指定正则格式的文件的内容,作为它的数据源,并支持。
2024-11-16 00:08:21
1017
原创 【大数据学习 | flume】flume的概述与组件的介绍
Flume是cloudera(CDH版本的hadoop) 开发的一个分布式、可靠、高可用的海量日志收集系统。它将各个服务器中的数据收集起来并送到指定的地方去,比如说送到HDFS、Hbase,简单来说flume就是收集日志的。1)Flume-og2)Flume-ng Flume提供了大量内置的Source、Channel和Sink类型,不同类型的Source,Channel和Sink可以自由组合.组合方式基于用户设置的配置文件。
2024-11-14 23:00:18
1591
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人