spark
文章平均质量分 62
zdkdchao
这个作者很懒,什么都没留下…
展开
-
spark异常
spark异常原创 2022-08-11 10:40:26 · 3307 阅读 · 2 评论 -
spark和hive在一些函数上的不同
spark和hive在一些函数上的不同原创 2022-07-29 17:15:13 · 493 阅读 · 0 评论 -
spark-3.0-AQE(Adaptive Query Execution)自适应查询
前置AQE是一个运行时SQL优化框架,旨在解决由于优化器统计信息不足、不准确或过时而导致的查询执行计划的低效和缺乏灵活性的问题。可以理解成是 Spark Catalyst 之上的一层,它可以在运行时修改 Spark plan,之前的物理执行计划不再是最终的计划,而是在每个query stage完成之后,动态的根据数据统计的情况,动态调整后续计划,动态合并shuffle分区,自动调整SQL JOIN策略;动态优化数据倾斜。默认关闭,可以更改配置 “spark.sql.adaptive.enabled”:原创 2022-05-23 02:08:45 · 616 阅读 · 0 评论 -
spark-调优-性能调优&内存管理
前置主要涉及6个参数,从3个方面:executor、core、内存的大小,并行度,内存管理 进行调优优化的方案资源分配num-executors:spark使用多少个executorsexecutor-cores:core和task的数量这2个参数要结合一起来配置,还要考虑可用的计算资源,executor-cores设置为2-4个比较合适,num-executors就是总共可用的cores 除以executor-cores。当然,这一切都要在可用范围内并行度spark.default.par原创 2022-05-23 01:56:31 · 823 阅读 · 0 评论 -
spark、hive-数据倾斜
spark一、调优概述有的时候,我们可能会遇到大数据计算中一个最棘手的问题——数据倾斜,此时Spark作业的性能会比期望差很多。数据倾斜调优,就是使用各种技术方案解决不同类型的数据倾斜问题,以保证Spark作业的性能二、数据倾斜发生时的现象绝大多数task执行得都非常快,但个别task执行极慢。比如,总共有1000个task,997个task都在1分钟之内执行完了,但是剩余两三个task却要一两个小时。这种情况很常见。原本能够正常执行的Spark作业,某天突然报出OOM(内存溢出)异常,观察异常栈,原创 2022-04-21 15:35:58 · 684 阅读 · 0 评论 -
spark-shuffle
一、what is shuffle,why shuffle,shuffle的须知如果是单机对单机,那就没有shuffle问题。分布式场景下,多分区对多分区,要么一对一,要么数据重新分布。而数据重新分布,就意味着:要按一定的规则,也就是需要用partitioner分区器进行计算,而且是每一条都要计算,效率受影响子RDD的每个分区,都部分依赖父RDD的所有分区,如果父RDD的分区不落盘或者准确的说不先计算完,就会有重复计算的问题。如果shuffle write的数据都放在内存中:数据量就太大,因为需要全原创 2021-05-23 17:32:33 · 567 阅读 · 0 评论 -
spark-调优
123原创 2021-04-08 17:54:31 · 78 阅读 · 0 评论 -
spark-为什么spark比mr快
{1} 使用DAG来组织逻辑,提供丰富的算子。DAG由一系列RDD通过血缘组成,通过job,stage的划分,来实现计算过程的优化。使用mr时,开发者常常花费大量时间考虑如何把操作组合到一起,以减少 MapReduce 的迭代次数。而在 Spark 的DAG可以自动优化,写出一个非常复杂的映射并不见得能比使用很多简单的连续操作获得好很多的性能。spark提供了多种算子,算子内部也进行了优化,可以更快的处理业务。而MR模型只有map和reduce2个阶段,很多代码需要自己封装。因此,用户可以用更小的操作来组原创 2021-03-20 09:24:52 · 1198 阅读 · 0 评论 -
SPARK-为啥spark用netty替换akka
很多Spark用户也使用Akka,但是由于Akka不同版本之间无法互相通信,这就要求用户必须使用跟Spark完全一样的Akka版本,导致用户无法升级Akka。Spark的Akka配置是针对Spark自身来调优的,可能跟用户自己代码中的Akka配置冲突。Spark用的Akka特性很少,这部分特性很容易自己实现。同时,这部分代码量相比Akka来说少很多,debug比较容易。如果遇到什么bug,也可以自己马上fix,不需要等Akka上游发布新版本。而且,Spark升级Akka本身又因为第一点会强制要求用户升.原创 2021-01-21 10:45:42 · 491 阅读 · 0 评论 -
书-spark设计与实现-第二部分:任务分配-物理计划
假设现在已经有个一个逻辑计划DAG,如何转化为物理计划提交到集群上执行呢?1. 最直接的想法,就是根据dag图,一个算子对应一个task。这样显然有问题,1是task数目过多,需要存储大量中间数据,task之间的通信需要消耗内存、磁盘IO或网络IO2. 既然第1步task数目过多,那就把task合并,也就是把计算合并==》如何生成task ==》 一个pileline一个task遇到宽依赖如何处理 ==》如果以pipeline的方式处理宽依赖,task有可能会过大。而且子RDD中一个分区就要把上一原创 2020-11-05 15:01:08 · 303 阅读 · 0 评论 -
spark-算子-分区算子partitionBy、coalesce、repartition
partitionByval inputRDD = sc.parallelize(Array[(Int,Char)] ((1, 'a'),(2,'b'),(3,'C') (4,'d'),(2,'e'),(3,'f'),(2,'g'),(1, 'h')),3)val resultRDD = inputRDD.partitionBy(new HashPartitioner (2))//使用HashPartitioner重新分区val resultRDD = inputRDD.partitionBy(n原创 2020-11-05 11:27:11 · 1455 阅读 · 0 评论 -
书-spark设计与实现-第二部分:任务分配-逻辑处理流程
问题如何将app转为DAGRDD的概念血缘关系的划分、宽窄依赖的划分原创 2020-11-14 14:29:11 · 153 阅读 · 0 评论 -
fp-闭包
闭包是什么,作用?函数可以访问其外部定义的变量,但是函数内部对该变量进行的修改,在函数外是不可见的,即对函数作用域外变量不会产生影响。比如一个人在美国,办了美国国籍,然后回到中国,又办了中国户口,但此时此人的国籍为中国,但其在美国的国籍依然有效,因为中美的户籍系统并不同步。再比如在spark中map函数引用了一个外部变量,在map函数内部修改了这个变量,但在driver中,这个变量的值没有变,这就是个典型的闭包。def fun(x: Int) : lnt => Unit = (y: Int)原创 2020-11-03 15:15:44 · 289 阅读 · 0 评论 -
spark(kryo)、hadoop(writable)、jdk(serializable)-序列化
一、SRC一个类在jvm中是有结构的,但即使是在jvm中,也是一堆数据。网络只能传文本,所以需要序列化和反序列化。通过几种方式的序列化后文本输出到本地文件,可以对比下大小。二、jdk的序列化将类的上级所有层次都序列化,相当于把类的所有描述信息写在文本中传输。效率较低。ObjectOutputStream底层就是调用的DataOutputStream,只不过把类的层级、包名和数据一起传了。三、hadoop如果提前告知对方类的结构,则只需要传数据。效率会高。MR就是这种思路,所以MR用的是xxxW原创 2020-10-07 23:58:41 · 726 阅读 · 0 评论 -
spark-使用DataFrameWriter或者spark-sql向hive分区表中插入数据
saveAsTable在此方法中,如果数据源表存在于Spark-catalog中,则使用save方法参数中的模式来确定如何插入。如果表不在Spark-catalog中,我们总是会覆盖它(比如JDBC数据源中的一个表),因为spark可以整合hive,所以hive中的表在Spark-catalog中,但比如spark创建的临时表,就不在Spark-catalog中。如果表在Spark-catalog中,则追加。如果df根据一个没分区的 hive表创建,并且可以转换为hive内置的序列化器(比如ORC和P原创 2020-09-15 23:02:41 · 4388 阅读 · 1 评论 -
spark-宽窄依赖
这是rdd论文中的图,可见,宽窄依赖划分的依据并不是是否产生了网络io,而是一个分区的数据是否发生了拆分,注意,是拆分,合并不算原创 2020-10-20 09:42:14 · 2731 阅读 · 1 评论 -
spark-黑名单机制
https://www.iteblog.com/archives/1907.html原创 2020-09-14 11:12:40 · 368 阅读 · 0 评论 -
spark-关于spark分区的理解
分区是分布式系统中最基本的概念,hdfs、hive、mr中都有分区,是并行的体现。确切的说,spark没有分区,是RDD有分区。分区是RDD内部并行计算的一个最小单元,RDD的数据集在逻辑上被划分为多个分片,每一个分片称为分区,而每个分区的数值计算都是在一个任务中进行的,因此任务的个数,也是由RDD(准确来说是job最后一个RDD)的分区数决定。数据源为hdfs时,rdd的分区数由hdfs的block数决定,类似于mr的分片数跟block数相同,是考量了磁盘IO的性能后作出的选择。正常情况下,数据源为h原创 2020-09-12 22:38:52 · 4261 阅读 · 0 评论 -
spark-RDD的理解
如果说sc是用来跟集群通信的入口,那RDD就是用来操作数据的入口,RDD是通过sc创建的。RDD是DF、DS的基础,DF是在RDD上增加了schema,意味着每行数据都有相同的结构,所以在序列化的时候效率更高,可以直接获取列。而DS则在DF的基础上多了编码器。RDD的命名也是很讲究的:弹性{1} 自动进行内存和磁盘数据存储的切换Spark会优先把数据放到内存中,如果内存实在放不下,会放到磁盘里面,不但能计算内存放下的数据,也能计算内存放不下的数据。如果实际数据大于内存,则要考虑数据放置策略和优化算原创 2020-09-12 22:27:47 · 353 阅读 · 0 评论 -
spark-RDD、DS、DF相互转换
RDD 和 DataFrame之间的转换准备测试RDD数据scala> val rdd=sc.makeRDD(List("Mina,19","Andy,30","Michael,29"))rdd: org.apache.spark.rdd.RDD[String] = ParallelCollectionRDD[10] at makeRDD at <console>:24需要注意,只有import spark.implicits._之后,RDD才有toDF、toDS功能scala原创 2020-08-29 14:51:44 · 3671 阅读 · 0 评论 -
spark-RDD、DF、DS
描述一下RDD,DataFrame,DataSet的区别?1)RDD优点:编译时类型安全编译时就能检查出类型错误面向对象的编程风格直接通过类名点的方式来操作数据缺点:序列化和反序列化的性能开销无论是集群间的通信, 还是 IO 操作都需要对对象的结构和数据进行序列化和反序列化。GC 的性能开销,频繁的创建和销毁对象, 势必会增加 GC2)DataFrameDataFrame 引入了 schema 和 off-heapschema : RDD 每一行的数据, 结构都是一样的,这个结构就原创 2020-08-28 09:56:20 · 1214 阅读 · 0 评论 -
spark-UI的使用
UI使用UI使用原创 2020-08-16 11:30:01 · 303 阅读 · 0 评论 -
spark-任务调度
一、src任务调度是指提交后AM创建且driver开始运行(是在userThread线程中运行的),executor也已经启动完毕之后的事情。driver运行会先创建SparkContext二、1. SparkContext创建SparkContext就意味着TS、DS、SB三者创建,master和appName必须有,不然报错yarn在创建container时已经分配好资源了,但这个分配是一级分配,是分配给整个app的,在创建SparkContext时,才会真正用到–executor-cor原创 2020-07-20 19:54:25 · 150 阅读 · 0 评论 -
spark-源码-资源调度
提交流程原创 2020-08-22 08:20:42 · 357 阅读 · 0 评论 -
spark-单机版spark
需求在linux中单个节点上装spark用来测试,但这样实际上没有直接在windows的idea中方便spark-在windows中连接虚拟机中cdh集群的hdfs和hivespark仅仅是个计算引擎,它强依赖于文件系统,比如hdfs。测试时没必要为了spark单独装个hadoop,所以spark官网提供了带编译好hadoop的sparkhttps://zhuanlan.zhihu.com/p/125549332?utm_source=wechat_session&utm_medium=so原创 2020-06-21 08:25:29 · 342 阅读 · 0 评论 -
spark-udf
UDF是一对一sparksql支持2种编程风格,sql和xxx创建一个普通的scala函数,分别用2种对应的方式注册为UDF,然后就可以在df和sql中使用了原创 2020-05-26 20:06:10 · 130 阅读 · 0 评论 -
spark-测试模式-在windows中连接虚拟机中cdh集群的hdfs和hive和linux单机模式
这个目录下有多有的配置文件:/etc/hive/conf.cloudera.hive/虚拟机和windows时间要相同,否则Caused by: KrbException: Identifier doesn’t match expected valuethe NTP socket is in use, exitinghttps://blog.csdn.net/ytp151730/article/details/48373679/Hive support because Hive classes ar原创 2021-01-07 15:04:22 · 1277 阅读 · 0 评论 -
spark-mr-OutputFormat的文件名是如何生成的?
1. TextOutputFormat中,如果设置了压缩,会给extension变量赋值,添加到文件名后面2. 输出流fileout中的文件名来源于Path file = getDefaultWorkFile(job, extension);3. getDefaultWorkFile中来源于new Path(Path parent, String child)new Path(committer.getWorkPath(), getUniqueFile(context,getOutputName(c原创 2020-05-23 20:06:29 · 352 阅读 · 0 评论 -
spark-hdfs-自定义OutputFormat
SRC主要就是2个实现类TextOutputFormat和SequenceOutputFormatspark的rdd的saveAsTextFile()方法底层默认调的其实也是TextOutputFormat,这有2个问题:1是无法指定文件名(这个其实不是问题,因为逻辑上只需要指定目录名即可,分布式的情况下一个文件肯定要分成多个部分,给每个部分指定名称无意义)2是无法满足一些个性化需求所以需要自定义OutputFormat的作用就是把内存中一个个的kv变成文件usage1. 继承FileOut原创 2020-05-27 11:33:48 · 1077 阅读 · 0 评论 -
SGG-Spark-SRC
一、大数据实现:存储 、 传输 、 分析二、特点快速、通用、可扩展、集群的计算引擎,是apache的开源项目,有全职的维护人员和贡献者。1. 快速:基于内存mr是进程级别,而spark的task是线程级别2. 易用封装好的算子,函数式编程只关心输入和输出支持4种编程语言和sqlpython和R对某些特性支持的不好支持scala和python的repl交互执行环境,可以非常方便的来验证思路。而不需要打包+上传+执行,对于原型开发很有用。3. 通用{1} 可用在通用的平台上,比如y原创 2020-08-22 08:27:28 · 133 阅读 · 0 评论 -
spark-代码-
1.取列名val columnName = ss.sql(desc $tableName).first.get(0)where $columnName != ‘$columnName’lower($columnName) NOT LIKE %$columnName%2.sql中进行大小写忽略比较lower(字段) NOT LIKE %‘xxx’%原创 2020-05-17 00:28:10 · 143 阅读 · 0 评论 -
spark-算子-sample、takeSample、sampleByKey
一、SRC2个都是用来从rdd中随机抽取,sample可以根据指定的概率将rdd转为新RDD,比如设定概率为50%,返回的新RDD的行数大体是原RDD的数量的一半,这个肯定不会精确,因为即使是用(filter(Math.random() * 2).toInt == 2),也不会是严格的50%takeSample猜测设计目的就是为了在driver端的控制台打印下rdd的数据,所以它的args1跟sample不一样,不是指定获取样本的方式,而是直接指定数目。二、sample1. 参数:withRep原创 2020-05-15 15:52:14 · 2781 阅读 · 0 评论 -
spark-代码-修改df中的列的类型
一、需求使用spark解析pmml时,pmml中的类型要和hive表的类型严格对应。但hive中有decimal类型,而pmml一般使用python生成的,原生python没有decimal,需要导入依赖包,但导入的依赖包没法生成pmml。==》pmml中没法用decimal,所以只能在spark中把decimal转成double,因为不涉及商业计算,仅仅是预测,所以double可以用。二、...原创 2020-05-09 10:29:48 · 1172 阅读 · 0 评论 -
CDH-hive的引擎换为spark:hive on spark
CDH-hive的引擎换为spark:hive on spark原创 2020-03-20 12:25:41 · 4003 阅读 · 13 评论 -
spark-多RDD算子
一、zipdef zip[U](other: RDD[U])(implicit arg0: ClassTag[U]): RDD[(T, U)]zip是拉链的意思,就是将2个完全匹配的RDD合到一起。zip函数用于将两个RDD组合成Key -> Value形式的RDD,左边的元素为key,右边的为value。两个RDD的partition数量以及每个分区的元素数量都相同,否则会抛出异...原创 2020-03-14 15:25:29 · 483 阅读 · 0 评论 -
spark-PairRDD算子
文章目录lookuplookuppairRDD时,输入k,输出v的集合var rdd1 = sc.makeRDD(Array(("A",0),("A",2),("B",1),("B",2),("C",1)))rdd1.lookup("A") //Seq[Int] = WrappedArray(0, 2)rdd1.lookup("B") //Seq[Int] = WrappedArray...原创 2020-03-14 14:14:25 · 102 阅读 · 0 评论 -
spark-单RDD算子-聚合算子
spark-单RDD聚合算子aggregatefold原创 2020-03-14 23:41:09 · 1013 阅读 · 0 评论 -
spark-隐式设置情况下的分区数
src须知:同一个stage内,rdd的分区数由最后1个rdd分区数决定。example:一个stage内有多个rdd,最后一个rdd执行了coalesce。那所有rdd的分区数都是1,即使使用repartition(40)也没作用。情况分为spark-shell,local,yarn3种情况。跟spark.default.parallelism,spark.default.minPar...原创 2020-08-22 08:31:36 · 267 阅读 · 0 评论 -
spark-日志
https://dongkelun.com/2018/11/16/sparkSubmitLogLevel/有3种方法:代码中亲测有效,唯一一个:Logger.getLogger(“org.apache.spark”).setLevel(Level.OFF)spark的console日志分好几部分,这里设置了OFF,仍会打印其他的部分。这里只是控制driver的日志。集群上也会输出一些日...原创 2020-03-09 20:59:25 · 154 阅读 · 0 评论 -
yarn的资源分配、spark的资源获取原理以及配置
spark on yarn的资源调度原理一、须知:yarn is a resource scheduling framework,它可以设置一次任务所能获取的最大和最小资源。资源包括节点、core、memory,yarn可以控制一个任务所能分配的这3样的上下限。可以设置资源池,队列,角色组,通过这些概念来管理资源的分配。spark程序运行时如果内存不足是会报错退出的,亲测,报的...原创 2020-08-22 08:29:55 · 1404 阅读 · 0 评论