Spark
灵佑666
这个作者很懒,什么都没留下…
展开
-
python转spark demos
python转spark demos原创 2022-11-02 23:51:39 · 527 阅读 · 0 评论 -
Hive 与 Parquet文件Schema类型不一致问题
问题1:Parquet文件Schema与Hive建表Schema不一致导致spark job报错。Hive:DoubleParquet: Long具体报错日志日下:没有在参数层面解决,最终将hive字段改为了 bigint--- 1. 不加参数org.apache.spark.SparkException: Task failed while writing rows.Caused by: com.databricks.sql.io.FileReadException: Error w原创 2022-04-12 10:58:08 · 4046 阅读 · 0 评论 -
sparksql 指定输出的文件名
这是sparksql写入hive表指定输出文件名的自定义方式。版本:spark-2.3.2实现目的在目前的业务需求中,需要实现场景为:当往一个hive表中不断以Append的方式写入数据,需要知道哪些文件是哪一次运行后追加的文件,所以最好的方法是往输出的文件名前添加前缀,如日期,或者调度编号等。但是spark未提供相应参数接口,需要更改一丢丢源码来实现。实现方式只需要更新 org.apache.spark.internal.io.HadoopMapReduceCommitPro原创 2022-01-24 12:59:17 · 2166 阅读 · 0 评论 -
hive用temporary table替换with
一、用temporary table替换with的效果 用with从一个宽表中读取了2个字段生成tmb_tb,在后面的查询中两次用到了tmb_tb,执行用时70分钟; 用 temporary table 替代with后(需要把临时表保存到内存中),相同的查询用时50分钟二、with的缺点 with的内容并不会缓存,每用一次就会执行一次。我原本想实现的目标是通过with从宽表中取2个字段生成一个tmp_tb,后面之后直接从tmp_tb中读取这两个字段,但是实际的情况是每从tmp_tb中抽一原创 2021-12-21 16:00:41 · 647 阅读 · 0 评论 -
Cannot overwrite a path that is also being read from
# sparksql 读写同一张表遇到问题遇到这个问题的解决方案1.设置 spark.sql.hive.convertMetastoreParquet=false或者spark.sql.hive.convertMetastoreOrc=false2.设置checkpiont 阻断血缘,设置目录并设置checkpoint,清理目录spark.cleaner.referenceTracking.cleanCheckpoints=true。3.先插入临时表,再移动到目标表。...原创 2021-12-20 19:58:26 · 3904 阅读 · 0 评论 -
spark参数总结
0.Spark Driver SparkSession.builder() .enableHiveSupport() //.appName("pipeline") .config("spark.warehouse.dir", new File("spark-warehouse").getPath) //.config("spark.shuffle.service.enabled", true) // 配合spark.dynamicAllo原创 2021-12-01 16:47:11 · 2599 阅读 · 0 评论 -
Spark first, last函数的坑
Spark SQL的聚合函数中有first, last函数,从字面意思就是根据分组获取第一条和最后一条记录的值,实际上,只在local模式下,你可以得到满意的答案,但是在生产环境(分布式)时,这个是不能保证的。看源码的解释:/** * Returns the first value of `child` for a group of rows. If the first value of `child` * is `null`, it returns `null` (respecting null原创 2021-11-19 11:03:35 · 2359 阅读 · 0 评论 -
spark的spark.sql.hive.caseSensitiveInferenceMode参数含义 - INFER_AND_SAVE
本文针对spark的spark.sql.hive.caseSensitiveInferenceMode的参数含义及使用进行梳理、总结1. 参数含义Spark 2.1.1引入了一个新的配置项: spark.sql.hive.caseSensitiveInferenceMode,默认值是NEVER_INFER,保持与spark 2.1.0一致的行为。但是Spark 2.2.0将此配置的默认值更改为INFER_AND_SAVE,以恢复读取底层文件schema中包含大小写混合列名的Hive元存储表的兼容性。使原创 2021-11-12 16:54:44 · 752 阅读 · 0 评论 -
Spark的Parquet向量化读取原理
起因:测试过程中,发现一个spark的一个参数设置可以带来5倍以上的性能差异参数:spark.sql.parquet.enableVectorizedReaderSQL:SELECT * FROM ad_tetris_dw.ad_insight_record_hourly_test WHERE page_url = "www.chengzijianzhan.com/tetris/page/52202031760/" and date = '20180805' and hour = '08原创 2021-11-12 12:48:10 · 1118 阅读 · 0 评论 -
Spark UDF返回多列
Spark UDF返回多列或者称为UDTF前言对于UDF和UDAF相比大家并不陌生,用起来也都很顺手,在此就不多做介绍了~通常我们的UDF都是一个或多个输入,然后一个输出。如果想要使用多个输出,比如像1.6版本里的json_tuple这样df.select(json_tuple(col("jsonField"), "Field1", "Field2").as(Seq("Field1", "Field2")))这种输出方式可以直接输出多列,同时explode也是类似的,这一类Spar..原创 2021-09-09 15:36:17 · 2154 阅读 · 0 评论 -
spark 提交job运行流程
spark在提交任务到集群后,会有一系列的处理,从根据任务代码构建DAG,再到根据shuffle算子切分stage,然后生成taskset提交到集群管理进行调度等等,都需要一个比较清晰的流程梳理,便于问题定位,也利于性能优化流程通过测试和观察spark ui,spark会将依赖jar提前上传至hdfs目录,用于后续executor的分发和使用 流程机构图【基于 yarn-cluster模式) 流程解析 准备 1.spark client通过spark-submit或API,进行.原创 2021-07-11 21:47:08 · 738 阅读 · 3 评论 -
数据倾斜--持续更新
十年数据两茫茫;一朝倾斜就发狂;group by 别张扬;加盐不行过滤来帮忙。原创 2021-07-04 23:33:22 · 132 阅读 · 1 评论 -
Spark程序运行常见错误解决方法以及优化
一.org.apache.spark.shuffle.FetchFailedException1.问题描述这种问题一般发生在有大量shuffle操作的时候,task不断的failed,然后又重执行,一直循环下去,非常的耗时。2.报错提示(1) missing output locationorg.apache.spark.shuffle.MetadataFetchFailedException:Missinganoutputlocationforshuffle0(2) ......原创 2021-06-09 14:31:01 · 5862 阅读 · 0 评论 -
spark io.netty.util.internal.OutOfDirectMemoryError: failed to allocate 16777216 byte(s)
报错日志: WARN TaskSetManager: Lost task 29.0 in stage 22.0 (TID 1851, wn108-cdlcns.bjduloineequ3adfbkrpgi4p2c.shax.internal.chinacloudapp.cn, executor 25): FetchFailed(BlockManagerId(2, wn107-cdlcns.bjduloineequ3adfbkrpgi4p2c.shax.internal.chinacloudapp.cn原创 2021-09-03 09:53:48 · 5721 阅读 · 0 评论 -
Spark异常总结及解决办法2
Spark-sql问题:spark-sql on yarn运行报错TransportClient:331 - Failed to send RPC *** java.nio.channels.ClosedChannelException具体错误信息如下:原创 2021-06-01 00:12:40 · 663 阅读 · 0 评论 -
Spark UDAF
使用很少,绝大部分udaf可以用更简洁的 udf 代替import org.apache.log4j.Loggerimport org.apache.spark.sql.expressions.{MutableAggregationBuffer, UserDefinedAggregateFunction}import org.apache.spark.sql.{DataFrame, Row, SparkSession}import org.apache.spark.sql.functions._原创 2021-03-29 17:42:07 · 133 阅读 · 0 评论 -
SparkSQL中自定义聚合(UDAF)函数
在学习Hive的时候我们已经了解到当内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数(UDF:user defined function)用户自定义函数类别分为以下三种:1).UDF:输入一行,返回一个结果(一对一),略2).UDTF:输入一行,返回多行(一对多),在SparkSQL中没有,因为Spark中使用flatMap即可实现这个功能3).UDAF:输入多行,返回一行,这里的A是aggregate,聚合的意思,如果业务复杂,需要自己实现聚合函数下面就来介绍如何自原创 2021-03-14 23:09:40 · 497 阅读 · 0 评论 -
spark获取某个目录下所有子目录的路径
/*** 获取某个目录下所有子目录的路径, 以字符串数组的形式返回*/def getOnlineFirstDir: Array[String] = { // 获取路径 val path = s"s3://transsion-athena${GlobalParameters.path_flag}/online/" val filePath = new org.apache.hadoop.fs.Path( path ) // 获取文件系统 val fileSystem = filePath.原创 2021-03-09 22:03:57 · 381 阅读 · 0 评论 -
spark-sql读取不到parquet格式的hive表
情况一:当向Hive metastore中读写Parquet表时,Spark SQL将使用Spark SQL自带的Parquet SerDe(SerDe:Serialize/Deserilize的简称,目的是用于序列化和反序列化),而不是用Hive的SerDe,Spark SQL自带的SerDe拥有更好的性能。这个优化的配置参数为spark.sql.hive.convertMetastoreParquet,默认值为开启。所以有时会发生spark自带的序列化方式无法解析hive中的parquet数据,原创 2021-02-07 18:02:04 · 1468 阅读 · 0 评论 -
优化ORC和Parquet文件,提升大SQL读取性能
本文编译自IBM开发者社区,主要介绍了HDFS中小的ORC和Parquet文件的问题,以及这些小文件如何影响Big SQL的读取性能,并探索了为了提高读取性能,使用现有工具将小文件压缩为大文件的可能解决方案。简介众所周知,多个Hadoop小文件(定义为明显小于HDFS块大小的文件,默认情况下为64MB)是Hadoop分布式文件系统(HDFS)中的一个大问题。HDFS旨在存储大量数据,理想情况下以大文件的形式存储。在HDFS中存储大量小文件,而不是存储较少的大文件,这在管理文件的目录树时给NameNo转载 2020-12-14 21:50:42 · 418 阅读 · 0 评论 -
Spark ORC文件
一. ORC文件的格式1. 什么是orc文件ORC文件, 全称Optimized Row Columnar, 是一种高效存储数据的格式. 他能同时提高数据的read, write, process效率. ORC文件和parquet一样, 不是一个单纯的列式存储结构, 而是首先按照数据行切割整个文件, 单后在行组内部使用列式存储每个字段 列式文件的好处: 提高查询效率: 当要查询某一列时, 不用全文见扫描, 可以只读取这一列的数据 其次, 文件中会对列加入统计信息: 包括列的max, m转载 2020-12-14 21:49:02 · 2214 阅读 · 0 评论 -
在Spark中读取两个不同的ORC模式文件
import java.io.IOException;import java.util.ArrayList;import java.util.List;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs.Path;import org.apache.hadoop.hive.ql.exec.vector.VectorizedR.原创 2020-12-14 21:27:48 · 610 阅读 · 0 评论 -
Spark使用jdbc时的并行度
Spark SQL支持数据源使用JDBC从其他数据库读取数据。 与使用JdbcRDD相比,应优先使用此功能。 这是因为结果以DataFrame的形式返回,并且可以轻松地在Spark SQL中进行处理或与其他数据源合并。 JDBC数据源也更易于从Java或Python使用,因为它不需要用户提供ClassTag。 (请注意,这与Spark SQL JDBC服务器不同,后者允许其他应用程序使用Spark SQL运行查询)。首先,您需要在spark类路径上包含特定数据库的JDBC驱动程序。例如,要从Spar原创 2020-12-04 09:41:59 · 1500 阅读 · 4 评论 -
解决 Spark yarn 任务启动之后executor不停增长的问题,num-executors配置不管用
spark2-submit --class SparkKafka \--master yarn \ --executor-memory 1G \--num-executors 6 \--driver-memory 1g \--conf spark.driver.supervise=true \--conf spark.dynamicAllocation.maxExecutors=6 \ -- 限制最大executor--conf spark.streaming.kafka.maxRate.原创 2020-11-25 18:42:27 · 1945 阅读 · 0 评论 -
Hive修改与字段名后Spark读取不到字段
方案一:前提是有元数据库的权限问题重现(例)当我将数据存储格式改变,或者增加一列的时候,我习惯使用了alter table add …来实现原来的表:ALTER TABLE test ADD COLUMNS (weight STRING) CASCADE1加上一列weight字段后(这里使用cascade就是为了同步到hivemetastore),我用spark向表插入一个带有weight字段的表,此时抛出异常Exception in thread "main" org.原创 2020-08-14 11:43:21 · 1983 阅读 · 0 评论 -
spark解决org.apache.spark.SparkException: Kryo serialization failed: Buffer overflow
pyspark --queue default\--driver-memory 10G \--executor-cores 6 \--executor-memory 10G \--executor-cores 6 \--conf spark.kryoserializer.buffer.max=256m \--conf spark.kryoserializer.buffer=64m \--conf spark.driver.maxResultSize=4096m \--conf spark.e原创 2020-08-07 13:43:52 · 834 阅读 · 0 评论 -
Spark 异常总结及解决办法
前言总结Spark开发中遇到的异常及解决办法,之前也写过几篇,之所以不再一个异常写一篇博客,是因为现在Spark用的比较熟悉了一些,觉得没必要把异常信息写那么详细了,所以就把异常总结在一篇博客里了,这样既能备忘也方便查找。1、之前的几篇spark-submit报错:Exception in thread "main" java.sql.SQLException:No suitable driverhive查询报错:java.io.IOException:org.apache.parque转载 2020-07-30 13:58:18 · 2995 阅读 · 0 评论 -
Spark DataSet Options
总分:在 Spark-2.1.0 以后支持的 Options 如下:--------- JDBC’s options --------- user password url dbtable driver partitionColumn lowerBound upperBound numPartitions fetchsize truncate createTableOptions batchsize isolationLevel --------- CSV’s opt原创 2020-07-28 16:39:44 · 330 阅读 · 0 评论 -
spark-sql性能优化之——动态实现多个列应用同一个函数
在对一个dataframe的多个列实现应用同一个函数时,是否能动态的指定?例如:对A,B,C三列实现分组统计1.初始化spark,构建DF val spark = SparkSession.builder() .appName("name") .master("local[2]") .getOrCreate() val df = spark.read.json("src\\main\\resources\\json.txt")2.静态实现 v...原创 2020-06-22 18:02:03 · 450 阅读 · 0 评论 -
Spark实现行列转换pivot和unpivot
背景做过数据清洗ETL工作的都知道,行列转换是一个常见的数据整理需求。在不同的编程语言中有不同的实现方法,比如SQL中使用case+group,或者Power BI的M语言中用拖放组件实现。今天正好需要在pyspark中处理一个数据行列转换,就把这个方法记录下来。首先明确一下啥叫行列转换,因为这个叫法也不是很统一,有的地方叫转置,有的地方叫透视,不一而足。我们就以下图为例,定义如下:从左边这种变成右边这种,叫透视(pivot) 反之叫逆透视(unpivot)Spark实...转载 2020-06-22 14:55:31 · 1499 阅读 · 0 评论 -
spark导数据到sqlserver
spark数据处理完后,如果结果需要输出到sql database,可以使用spark sql dataframe并引入微软的数据库jdbc驱动输出数据,具体步骤如下:1:引入微软的jdbc jar包在项目的pom文件加入下面的依赖:<dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>mssql-jdbc</artifactId>.原创 2020-06-11 18:02:49 · 704 阅读 · 0 评论 -
spark UDF使用
spark udf calludf udf 调用多次原创 2020-06-08 16:26:30 · 891 阅读 · 1 评论 -
spark 读取ORC文件时间太长(计算Partition时间太长)且产出orc单个文件中stripe个数太多问题解决方案
1、背景: 控制上游文件个数每天7000个,每个文件大小小于256M,50亿条+,orc格式。查看每个文件的stripe个数,500个左右,查询命令:hdfs fsck viewfs://hadoop/nn01/warehouse/…….db/……/partition_date=2017-11-11/part-06999 -files -blocks;stripe个数查看命令...原创 2020-04-14 10:38:25 · 1304 阅读 · 0 评论 -
Spark任务倾斜解决方案
任务倾斜task倾斜原因比较多,网络io,cpu,mem都有可能造成这个节点上的任务执行缓慢,可以去看该节点的性能监控来分析原因。以前遇到过同事在spark的一台worker上跑R的任务导致该节点spark task运行缓慢。或者可以开启spark的推测机制,开启推测机制后如果某一台机器的几个task特别慢,推测机制会将任务分配到其他机器执行,最后Spark会选取最快的作为最终结果。s...原创 2020-04-06 22:25:38 · 439 阅读 · 0 评论 -
SparkSQL优化器系统Catalyst
最近想来,大数据相关技术与传统型数据库技术很多都是相互融合、互相借鉴的。传统型数据库强势在于其久经考验的SQL优化器经验,弱势在于分布式领域的高可用性、容错性、扩展性等,假以时日,让其经过一定的改造,比如引入Paxos、raft等,强化自己在分布式领域的能力,相信一定会在大数据系统中占有一席之地。相反,大数据相关技术优势在于其天生的扩展性、可用性、容错性等,但其SQL优化器经验却基本全部来自于传统...转载 2020-04-06 11:09:17 · 521 阅读 · 1 评论 -
Address already in use: Service 'SparkUI' failed after 16 retries (starting from 4040)!
Address already in use: Service 'SparkUI' failed after 16 retries (starting from 4040)! Consider explicitly setting the appropriate port for the service 'SparkUI' (for example spark.ui.port for Spark...原创 2020-03-25 11:15:35 · 2368 阅读 · 1 评论 -
spark sql insert 报错 Container killed on request. Exit code is 143
Caused by: org.apache.spark.SparkException: Job aborted due to stage failure: Task 198 in stage 4.0 failed 4 times, most recent failure: Lost task 198.3 in stage 4.0 (TID 1722, hadoop-slave-17, execu...原创 2020-03-05 18:07:11 · 868 阅读 · 0 评论 -
Spark中广播变量详解以及如何动态更新广播变量
【前言:Spark目前提供了两种有限定类型的共享变量:广播变量和累加器,今天主要介绍一下基于Spark2.4版本的广播变量。先前的版本比如Spark2.1之前的广播变量有两种实现:HttpBroadcast和TorrentBroadcast,但是鉴于HttpBroadcast有各种弊端,目前已经舍弃这种实现,本篇文章也主要阐述TorrentBroadcast】广播变量概述广播变量是一个只读...原创 2020-02-06 09:25:22 · 4100 阅读 · 0 评论 -
Spark自定义对象排序及自定义序列化
一、目标对象添加隐式转换函数的方式实现自定义排序object MySort{ //为student类添加隐式转换函数 implicit val stuOrdering = new Ordering[student]{ override def compare(x: student, y: student) = { //自定义排序格式为:默认按年龄升序排序,当年龄相...原创 2019-12-18 16:20:40 · 860 阅读 · 0 评论 -
Spark On Yarn 中Executor 内存分配的机制
问题导读1. Spark On Yarn 下executor-memory 参数如何生效?2. Cluster 和 Client 模式中 内存开销的区别?3. 规整化因子是什么?综述提交任务时,配置的executor-memory 的参数,设置为6g,结果实际运行中,占据的资源算下来,每个executor 使用的却接近7个g,此处省略一万字。。。那么,为何会配置的参数没有生...原创 2019-11-25 15:26:12 · 334 阅读 · 0 评论