spark
The Great Ant
做一个功成名就的人
展开
-
2021-06-15
控制Spark reduce缓存 调优shuffle spark.reducer.maxSizeInFilght 此参数为reduce task能够拉取多少数据量的一个参数默认48MB,当集群资源足够时,增大此参数可减少reduce拉取数据量的次数,从而达到优化shuffle的效果,一般调大为96MB,,资源够大可继续往上调。 spark.shuffle.file.buffer 此参数为每个shuffle文件输出流的内存缓冲区大小,调大此参数可以减少在创建shuffle文件时进行磁盘搜索和系统调用的次数原创 2021-06-15 22:25:42 · 82 阅读 · 2 评论 -
2021-06-10
spark调优之前与调优之后性能的详细对比(例如调整map个数,map个数之前多少、之后多少,有什么提升) 这里举个例子。比如我们有几百个文件,会有几百个map出现,读取之后进行join操作,会非常的慢。这个时候我们可以进行coalesce操作,比如240个map,我们合成60个map,也就是窄依赖(不走shuffle)。这样再shuffle,过程产生的文件数会大大减少。提高join的时间性能。 - 窄依赖表示每一个父RDD的Partition最多被子RDD的一个Partition使用(一对一or多对一),原创 2021-06-15 22:24:13 · 50 阅读 · 0 评论 -
2021-06-10
如何使用Spark实现TopN的获取(描述思路或使用伪代码) 方法1: (1)按照key对数据进行聚合(groupByKey) (2)将value转换为数组,利用scala的sortBy或者sortWith进行排序(mapValues)数据量太大,会OOM。 方法2: (1)取出所有的key (2)对key进行迭代,每次取出一个key利用spark的排序算子进行排序 方法3: (1)自定义分区器,按照key进行分区,使不同的key进到不同的分区 (2)对每个分区运用spark的排序算子进行排序原创 2021-06-10 22:11:35 · 55 阅读 · 0 评论 -
2021-06-09
当Spark涉及到数据库的操作时,如何减少Spark运行中的数据库连接数? 使用foreachPartition代替foreach,在foreachPartition内获取数据库的连接。原创 2021-06-10 22:09:45 · 75 阅读 · 0 评论 -
2021-06-09
Spark广播变量 广播变量:分布式共享只读变量。 广播变量用来高效分发较大的对象。向所有工作节点发送一个较大的只读值,以供一个或多个Spark Task操作使用。比如,如果你的应用需要向所有节点发送一个较大的只读查询表,广播变量用起来会很顺手。在多个Task并行操作中使用同一个变量,但是Spark会为每个Task任务分别发送。 //代码演练: object broadcast01 { def main(args: Array[String]): Unit = { //1.原创 2021-06-09 22:00:19 · 34 阅读 · 0 评论 -
2021-06-08
Spark Shuffle默认并行度 参数spark.sql.shuffle.partitions 决定 默认并行度200原创 2021-06-08 22:05:41 · 37 阅读 · 0 评论 -
2021-06-08
spark累加器 1.系统累加器 object accumulator01_system { def main(args: Array[String]): Unit = { val conf = new SparkConf().setAppName("SparkCoreTest").setMaster("local[*]") val sc = new SparkContext(conf) val dataRDD: RDD[(String, Int)] = sc.makeRDD(Lis原创 2021-06-08 22:04:37 · 55 阅读 · 0 评论 -
2021-06-08
Spark分区(key value类型) 1)默认采用Hash分区 缺点:可能导致每个分区中数据量的不均匀,极端情况下会导致某些分区拥有RDD的全部数据。 2)Ranger分区 要求RDD中的KEY类型必须可以排序。 3)自定义分区 根据需求,自定义分区。 ...原创 2021-06-08 22:02:56 · 41 阅读 · 0 评论 -
2021-06-04
Spark任务的划分 (1)Application:初始化一个SparkContext即生成一个Application; (2)Job:一个Action算子就会生成一个Job; (3)Stage:Stage等于宽依赖的个数加1; (4)Task:一个Stage阶段中,最后一个RDD的分区个数就是Task的个数。 ...原创 2021-06-06 20:15:20 · 43 阅读 · 0 评论 -
2021-06-04
Kryo序列化 Kryo序列化比Java序列化更快更紧凑,但Spark默认的序列化是Java序列化并不是Spark序列化,因为Spark并不支持所有序列化类型,而且每次使用都必须进行注册。注册只针对于RDD。在DataFrames和DataSet当中自动实现了Kryo序列化。 ...原创 2021-06-04 22:06:01 · 35 阅读 · 0 评论 -
2021-06-04
reduceByKey、foldByKey、aggregateByKey、combineByKey区别 它们底层调用的方法是一样的 ReduceByKey 没有初始值 分区内和分区间逻辑相同 foldByKey 有初始值 分区内和分区间逻辑可以相同 aggregateByKey 有初始值 分区内和分区间逻辑可以不同 combineByKey 初原创 2021-06-04 22:04:14 · 43 阅读 · 0 评论 -
2021-06-03
reduceByKey与groupByKey的区别 reduceByKey:具有预聚合操作,分组归约 groupByKey:没有预聚合,分组 在不影响业务逻辑的前提下,优先采用reduceByKey。原创 2021-06-03 22:38:12 · 29 阅读 · 0 评论 -
2021-06-03
Repartition和Coalesce区别 1)关系: 两者都是用来改变RDD的partition数量的,repartition底层调用的就是coalesce方法:coalesce(numPartitions, shuffle = true) 2)区别: repartition一定会发生shuffle,coalesce根据传入的参数来判断是否发生shuffle 一般情况下增大rdd的partition数量使用repartition,减少partition数量时使用coalesce ...原创 2021-06-03 22:37:26 · 54 阅读 · 0 评论 -
2021-06-02
map和mapPartitions区别 1)map:每次处理一条数据 2)mapPartitions:每次处理一个分区数据(内存足够的情况下,效率更高)原创 2021-06-02 22:14:26 · 30 阅读 · 0 评论 -
2021-06-02
Spark的action算子 (1)reduce:归约 (2)collect:收集,数据全部在driver端进行,慎用 (3)count:求数据的总个数 (4)first:取数据的第一个值 (5)take:取数据的前几位 (6)takeOrdered:先将数据排序在取值 (7)aggregate:执行分区内,分区间的计算逻辑返回数据 (8)fold:分区内和分区间的逻辑相同,简化版 (9)countByKey:key值相同,求value的count数,返回map集合不是rdd (10)save:数据的存储(原创 2021-06-02 22:12:14 · 35 阅读 · 0 评论 -
2021-06-02
Spark的transformation算子 1)单Value (1)map:一个一个数据的处理 (2)mapPartitions:一次性处理一个分区的数据 (3)mapPartitionsWithIndex:带分区号的打印 (4)flatMap:map+flat 扁平化拍平 (5)glom:分区转换成数组 (6)groupBy:聚合 (7)filter:过滤 (8)sample:取样 不放回伯努利 放回泊松原创 2021-06-02 22:10:54 · 32 阅读 · 0 评论 -
2021-06-01
Spark的架构与作业提交流程原创 2021-06-01 22:09:51 · 37 阅读 · 0 评论 -
2021-05-31
#Spark提交作业参数 1)在提交任务时的几个重要参数 executor-cores —— 每个executor使用的内核数,默认为1,官方建议2-5个,我们企业是4个 num-executors —— 启动executors的数量,默认为2 executor-memory —— executor内存大小,默认1G driver-cores —— driver使用内核数,默认为1 driver-memory —— driver内存大小,默认512M 2)边给一个提交任务的样式 spark-sub原创 2021-05-31 22:09:08 · 62 阅读 · 2 评论 -
2021-05-31
Spark运行模式 1)Local:运行在一台机器上。 测试用。 2)Standalone:是Spark自身的一个调度系统。 对集群性能要求非常高时用。国内很少使用。 3)Yarn:采用Hadoop的资源调度器。 国内大量使用。 4)Mesos:国内很少使用。 ...原创 2021-05-31 22:06:39 · 30 阅读 · 0 评论 -
2021-05-30
Spark为什么会有自己的资源调度器 Hadoop的Yarn框架比Spark框架诞生的晚,所以Spark自己也设计了一套资源调度框架。原创 2021-05-30 20:55:02 · 32 阅读 · 0 评论 -
2021-05-30
Spark解决什么问题 回顾:Hadoop主要解决,海量数据的存储和海量数据的分析计算。 Spark主要解决海量数据的分析计算。原创 2021-05-30 20:51:29 · 33 阅读 · 0 评论 -
2021-05-28
12.hadoop和spark端口详解 Hadoop: hadoop2.x Hadoop3.x 访问HDFS端口 50070 9870 HDFS内部通讯端口 9000 8020 历史服务器 19888 19888 访问Yarn任务调度器端口 8088 8088 YARN中RM和NM的内部通信端口 8032 Spark: Spark 查看当前Spark-shell运行任务端口 4040 Spark Standalone模式Master W原创 2021-05-28 21:56:40 · 43 阅读 · 0 评论 -
2021-04-29
Tez引擎优点? Tez可以将多个有依赖的作业转换为一个作业,这样只需写一次HDFS,且中间节点较少,从而大大提升作业的计算性能。 Mr/tez/spark区别: Mr引擎:多job串联,基于磁盘,落盘的地方比较多。虽然慢,但一定能跑出结果。一般处理,周、月、年指标。 Spark引擎:虽然在Shuffle过程中也落盘,但是并不是所有算子都需要Shuffle,尤其是多算子过程,中间过程不落盘 DAG有向无环图。 兼顾了可靠性和效率。一般处理天指标。 Tez引擎:完全基于内存。 注意:如果数据量特别大,慎重原创 2021-04-29 22:10:51 · 45 阅读 · 0 评论