![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
spark
文章平均质量分 78
L13763338360
这个作者很懒,什么都没留下…
展开
-
小表join顺序和广播问题
小表join顺序和广播问题原创 2022-11-07 19:03:25 · 1052 阅读 · 0 评论 -
spark广播导致的问题
spark广播导致的问题原创 2022-11-02 17:21:06 · 1512 阅读 · 0 评论 -
spark-sql: insert overwrite分区表问题
spark-sql: insert overwrite分区表问题原创 2022-11-02 16:39:06 · 3951 阅读 · 0 评论 -
kafka限流导致spark写异常
最近上线一个业务,大量数据从hive加工后,写入kaka。规模:200+任务spark任务并发数量:30每个spark任务vocres:20运行一段时间后,抛出异常。原创 2022-10-07 14:28:42 · 1028 阅读 · 0 评论 -
spark写相同的HIVE表或者相同的HDFS路径时抛出异常
spark写相同的HIVE表或者相同的HDFS路径时抛出异常原创 2022-08-23 11:11:22 · 1290 阅读 · 0 评论 -
spark写带sasl认证的kafka
spark写带ACL的kafka集群问题原创 2022-08-11 17:06:01 · 1454 阅读 · 2 评论 -
Spark 3.0自适应查询执行框架(AQE)
1. AQE设计原理AQE 可以理解成是 Spark Catalyst 之上的一层,它可以在运行时修改 Spark plan。AQE 完全基于精确的运行时统计信息进行优化,引入了 Query Stages 的概念 ,并且以 Query Stage 为粒度,进行运行时的优化,其工作原理如下所示:Query Stage 是由 Shuffle 或 broadcast exchange 划分的,在运行下一个 Query Stage 之前,上一个 ...原创 2021-11-16 10:11:06 · 2329 阅读 · 0 评论 -
Spark SQL运行流程及性能优化:RBO和CBO
1Spark SQL运行流程1.1 Spark SQL核心——CatalystSpark SQL的核心是一个叫做Catalyst的查询编译器,它将用户程序中的SQL/Dataset/DataFrame经过一系列操作,最终转化为Spark系统中执行的RDD。1.2Catalyst组成部分Parser :用Antlr将SQL/Dataset/DataFrame转化成一棵未经解析的树,生成 Unresolved Logical Plan Analyzer:Analyzer...原创 2021-09-16 15:50:57 · 1950 阅读 · 1 评论 -
Spark为什么比Mapreduce快
1、内存 vs 磁盘其实Spark和MapReduce的计算都发生在内存中,区别在于:MapReduce:通常需要将计算的中间结果写入磁盘,然后还要读取磁盘,从而导致了频繁的磁盘IO。 Spark:不需要每次将计算的中间结果写入磁盘,这得益于Spark的RDD(弹性分布式数据集,很强大)和DAG(有向无环图),其中DAG记录了job的stage以及在job执行过程中父RDD和子RDD之间的依赖关系。中间结果能够以RDD的形式存放在内存中,且能够从DAG中恢复,大大减少了磁盘IO。2、Spark原创 2021-08-19 17:25:56 · 223 阅读 · 0 评论 -
Spark 3.0新特性介绍
1. 自适应查询优化这是 Databricks 和Intel 中国团队在做的项目(https://tinyurl.com/y3rjwcos),基于已完成的执行计划节点的统计数据,优化剩余的查询执行计划,它的特点是:减少 Reducer 的数量 将 Sort Merge Join 转换为 Broadcast Hash Join 处理数据倾斜2.动态分区修剪静态分区裁剪优化动态分区裁剪优化spark.sql.optimizer.dynamicPartitionPruning..原创 2020-06-29 14:16:02 · 3832 阅读 · 0 评论 -
Hive on Mapreduce、Hive on Spark、SparkSQL、Spark on Hive
Hive on Mapreduce执行流程如下图示Step 1:UI(user interface) 调用 executeQuery 接口,发送 HQL 查询语句给 Driver Step 2:Driver 为查询语句创建会话句柄,并将查询语句发送给 Compiler, 等待其进行语句解析并生成执行计划 Step 3 and 4:Compiler 从 metastore 获取相关的元数据 Step 5:元数据用于对查询树中的表达式进行类型检查,以及基于查询谓词调整分区,生成计划 Step原创 2020-06-23 09:01:15 · 920 阅读 · 0 评论 -
spark2.3.3升级到2.4.6的问题
升级过程中遇到一些问题,逐个解决。其中有个问题:spark thrift server启动后,执行sql报错> select * from xxx.xxx limit 10;Error: org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 5.0 failed 10 times, most recent failure: Lost task 0.9 in stage 5.0 (原创 2020-06-16 16:52:48 · 1171 阅读 · 0 评论 -
利用spark sql自适应功能避免小文件合并
1. 问题来源离线数仓底层分了两层每天业务增量数据层:每天一个分区,用于存放业务每天的增量数据, 每天业务快照层:事实表一般无分区,保存业务的快照,昨天的业务快照,是前天的业务快照与昨天的增量数量合并去重后生成:昨天的业务快照=前天的业务快照+昨天的增量数量insert overwrite table snap.${snap_table}select ${snap_columns}from( select ${snap_co...原创 2020-06-08 20:36:46 · 1358 阅读 · 0 评论 -
利用开窗函数+spark.sql.shuffle.partitions避免小文件合并
遇到一个常见sql使用场景insert overwrite table xxx(date='${hiveconf:date}')select *from table1union allselect *from table2观察发现任务耗时慢,大概10多分钟,其中主要耗时花在合并小文件——每次执行完spark etl任务还会执行hive合并小文件合并,解决小文件过多的问题。ALTER TABLE xxx PARTITION (date='${d...原创 2020-06-08 14:27:00 · 1790 阅读 · 1 评论 -
用广播机制优化spark sql案例
一个常用的sql示例insert overwrite table tbl_resultselect ……from table1left join table2 on table.id = tables1.idleft join table3 on table.id = tables1.idleft join table4 on table.id = tables1.idleft join table5 on table.id = tables1.idleft join table6 .原创 2020-06-08 13:16:03 · 659 阅读 · 0 评论 -
RDD的五个特性
1. a list of partitions(分区列表)Spark RDD是被分区的,每一个分区都会被一个计算任务(Task)处理,分区数决定并行计算数量,RDD的并行度默认从父RDD传给子RDD。可以在创建RDD时指定RDD分片个数,如果不指定分区数量:当RDD从集合创建时,则默认分区数量为该程序所分配到的资源的CPU核数(每个Core可以承载2~4个Partition), 如果是从HDFS文件创建,默认为文件的Block数。2. a function for computing eac原创 2020-06-01 15:48:26 · 470 阅读 · 0 评论 -
利用临时表优化spark sql案例
一个实际的案例,sql处理逻辑很复杂,跑不动,只摘取关键逻辑的代码进行分析。优化前sql精简后关键部分关键逻辑:从三个表取数据,然后分别inner join数据特征:临时表1有16亿+,临时表2有4亿+,临时表3只有200+。yarn资源管理页面分析只有一个job,1000多个task,一直非常慢,跑到最后两个task卡住了 。进入job看看从截图分析步骤stage0: 生成4亿的临时表2数据stage1: 生成16亿的临时表1数据stage2:对临时原创 2020-05-22 19:24:47 · 1398 阅读 · 0 评论 -
hive分区表某分区对应的目录不存在导致查询异常问题
1. 问题现象1.1 spark thrift server查询hive分区表异常0: jdbc:hive2://10.0.194.131:10017> select * from xy_app.xy_log_collect_user_funnels limit 10;Error: java.lang.RuntimeException: serious problem (state=,code=0)0: jdbc:hive2://10.0.194.131:10017> [hdfs@原创 2020-05-19 16:46:23 · 6200 阅读 · 0 评论 -
hadoop和spark的shuffle联系及区别
1. hadoop和spark的shuffle联系两者都是将 mapper(Spark 里是 ShuffleMapTask)的输出进行 partition,不同的 partition 送到不同的 reducer(Spark 里 reducer 可能是DAG中下一个 stage 里的 ShuffleMapTask,也可能是 ResultTask)。Reducer以内存作缓冲区,边 shuff...原创 2020-04-20 14:47:34 · 779 阅读 · 0 评论 -
RDD的五大特点
RDD(Resilient Distributed Dataset)是一个弹性的分布式的数据集,是spark的基本抽象,RDD是不可变的,并且它由多个partition构成(可能分布在多台机器上,可以存memory上,也可以存disk里等等),可以进行并行操作弹性:分布式计算时可容错 内存的弹性:内存与磁盘的自动切换 容错的弹性:数据丢失可以自动恢复 计算的弹性:计算出错重试机制 ...原创 2020-04-20 11:14:20 · 5283 阅读 · 0 评论 -
spark常见资源参数调优
Spark资源调优,主要就是对Spark运行过程中各个使用资源的地方,通过调节各种参数,来优化资源使用的效率,从而提升Spark作业的执行性能。num-executors参数说明:该参数用于设置Spark作业总共要用多少个Executor进程来执行 调优建议:每个Spark作业的运行一般设置40-80个左右的Executor进程比较合适。设置太少,无法充分利用集群资源,作业很慢;设置太多...原创 2020-04-04 16:36:33 · 224 阅读 · 0 评论 -
spark开发调优
在开发过程中需要时刻注意开发调优的一些基本原则,并将这些原则根据具体的业务以及实际的应用场景,灵活地运用到自己的spark作业开发中。1. 避免创建重复的RDD对于同一份数据,只应该创建一个RDD,不能创建多个RDD来代表同一份数据。错误示例:对于一份数据执行多次算子操作时,使用多个RDD// 需要从HDFS上两次加载hello.txt文件的内容,并创建两个单独的RDDv...原创 2020-04-04 16:21:50 · 138 阅读 · 0 评论 -
hadoop和spark的shuffle比较
Shuffle作为处理连接map端和reduce端的枢纽,其shuffle的性能高低直接影响了整个程序的性能和吞吐量。Shuffle本质上都是将Map端获得的数据使用分区器进行划分,并将数据发送给对应的 Reducer 的过程,map端的shuffle一般为shuffle的Write阶段,reduce端的shuffle一般为shuffle的read阶段。Hadoop和spark的shuffle...原创 2020-04-04 15:15:13 · 492 阅读 · 0 评论 -
spark常用算子对比
map和mappartitionmap:对 RDD 中的每个元素进行操作,执行一次function只处理1条数据,处理100条数据要执行100次function;串行处理数据,处理速度慢,通常不会导致OOM mappartition:遍历RDD的分区,对 RDD 中每个partition的 iterator进行操作,每个partition只需执行一次function;批量处理数据,速度快,可...原创 2020-03-22 10:36:09 · 289 阅读 · 0 评论 -
运行spark任务某节点提示:“Exit status: 1. Diagnostics: Exception from container-launch.”
问题:19/12/24 02:38:57 WARN YarnSchedulerBackend$YarnSchedulerEndpoint: Requesting driver to remove executor 8 for reason Container marked as failed: container_e103_1576150833936_207084_02_000009 on ...原创 2019-12-25 19:39:26 · 4234 阅读 · 0 评论 -
解决spark driver端cpu使用率超过3000%问题
我们一部分批处理任务用的是spark-sql,默认只有yarn client模式,使用yarn client模式时driver端会成为瓶颈,有时候晚上跑批的时候大量etl任务同时跑,cpu负载过高导致机器告警,可能ssh登陆不上。晚上加班的时候突然收到机器告警,cpu超过3000%了,赶紧查看一下,是一位同学在跑etl任务,拉过来一起分析。依次排除了几个可能的因素,最终定位到可能是数据倾斜...原创 2019-12-11 20:46:15 · 2126 阅读 · 0 评论 -
利用小文件优化udf性能
背景定义了一个udf,用于信息解密,请求的是公司内部解密服务,解密服务部署了两台机器,随机请求。调用udf时,传入密文,输出明文。数仓每天有在用,且批量调用,没有性能问题。最近新上线一个数据需求,发现卡在了解密udf,要30-40分钟。原因1.看解密服务完全没有压力,跑批的时候cpu使用率可以达到4000-5000%,现在只有100%左右。2.看yarn资源分配也没有问题,尝试...原创 2019-12-10 16:52:37 · 836 阅读 · 0 评论 -
解决spark thrift server下insert into异常问题
建表CREATE TABLE xy_temp.sample_table2( `uid` string COMMENT '用户uid', `user_type` string comment '用户类型', `amount` bigint comment '金额', `xy_date` string comment '日期')COMMENT '样表' ...原创 2019-11-27 15:45:25 · 618 阅读 · 1 评论