Spark
文章平均质量分 73
Empty-cup
这个作者很懒,什么都没留下…
展开
-
SparkSQL源码分析系列02-编译环境准备
本文主要描述一些阅读Spark源码环境的准备工作,会涉及到源码编译,插件安装等。原创 2023-08-18 16:01:21 · 527 阅读 · 0 评论 -
SparkSQL源码分析系列03-Antlr4分析测试
SparkSQL主要通过Antlr4定义SQL的语法规则,完成SQL词法,语法解析,最后将SQL转化为抽象语法树。所以有必要先了解下Antlr4的工作流程。原创 2023-08-18 18:20:14 · 324 阅读 · 0 评论 -
SparkSQL源码分析系列01-Catalyst作用
与 RDD 不同,SparkSQL 可以获知数据的 Schema 来进行优化,SparkSQL 的 DSL 和 SQL 并不是直接生成计划交给集群执行,而是经过了一个叫做 Catalyst 的优化器,这个优化器能够自动帮助开发者优化代码。SparkSQL 中正是由于 Catalyst 优化器存在,使得无论基于SQL还是DSL分析数据,性能都是一样的,并且底层做了很多优化。首先,RDD大致运行步骤:先将 RDD 解析为由 Stage 组成的 DAG,后将 Stage 转为 Task 直接运行。原创 2022-12-29 17:17:07 · 539 阅读 · 2 评论 -
Spark之五种join策略
Spark源码中关于join策略的描述/*** Select the proper physical plan for join based on join strategy hints, the availability of* equi-join keys and the sizes of joining relations. Below are the existing join strategies,* their characteristics and their limitations.原创 2020-12-31 16:07:21 · 703 阅读 · 0 评论 -
Spark的宽依赖和窄依赖
RDD算子操作会使得RDD分区之间产生不同依赖,主要有两种依赖:宽依赖和窄依赖。宽依赖:是指一个父RDD的各个分区被一个子RDD的各个分区多次依赖,窄依赖:是指一个父RDD的各个分区被一个子RDD的各个分区一次依赖,或者多个父RDD的分区对应一个子RDD分区。如下图所示:注意:有一些特殊的RDD算子分两种情况,可能是窄依赖也可能是宽依赖,如join算子。...原创 2020-12-18 16:39:20 · 417 阅读 · 1 评论 -
Spark作业调度流程
Spark首先会对Job进行一系列的RDD转换操作,并通过RDD之间的依赖关系构建DAG(有向无环图)。然后根据RDD依赖关系将RDD划分到不同的stage中,每个stage按照partition的数量创建多个Task,最后将这些Task提交到集群的work节点上执行。具体流程如下图所示:构建DAG,将DAG提交到调度系统;DAGScheduler负责接收DAG,并将DAG划分成多个stage,最后将每个stage中的Task以任务集合(TaskSet)的形式提交个TaskScheduler做下一步原创 2020-12-18 15:42:06 · 268 阅读 · 0 评论 -
Spark的RDD弹性特性的几个方面
自动进行内存和磁盘数据存储的切换。spark会优先将数据放到内存,放不下时才放到磁盘,保障其高效运行。基于Lineage的高效容错机制。RDD每个操作只关联其父操作,各个分片数据之间互不影响。Task失败会进行特定次数的重试。默认4次。Stage失败会进行特定次数的重试。默认4次。checkpoint和persist(检查点和持久化),可主动或被动触发。数据调度弹性, DAGScheduler、 TASKScheduler和资源管理无关。数据分片的高度弹性,可以灵活伸缩分片数(coalesce.原创 2020-12-17 15:39:34 · 468 阅读 · 0 评论 -
Spark core详解系列一
学习spark重在详读官网!spark官网地址:http://spark.apache.orgspark特点:Speed1)基于内存计算。2)支持pipeline,不会像mr每次都要数据落地。3)spark作业以线程形式,而mr的map和reduce任务都是进程级别的。Ease of use支持多种语言开发Java、Scala、Python、R和SQL,但是主流是scala。...原创 2019-11-21 22:27:41 · 391 阅读 · 0 评论 -
spark-2.4.2 源码编译
spark2.4.2源码编译前言因为线上生产环境和实际业务需求的复杂性,不可避免地需要修改spark源码,重新编译并测试完成后应用于线上生产环境。本文主要介绍作者在Linux(centos 6.5)上重新编译spark-2.2.1源码的过程,以及部署编译环境所遇到的坑。你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读...原创 2019-08-10 16:10:55 · 222 阅读 · 0 评论 -
Spark core详解系列二
RDD的Actions算子collect:把rdd中所有元素返回到一个数组,返回到driver端的memory中。如非要查看rdd中的数据:取出部分数据,或把rdd输出到文件系统。foreach:rdd.foreach(println)rdd.foreachPartition(partition => partition.map(println)) //没有输出,输出在每个exe...原创 2019-11-25 00:41:10 · 270 阅读 · 0 评论 -
Spark core详解系列三
wordcount 详解spark-shell 示例代码:scala> val result = sc.textFile("file:///home/hadoop/data/wc.data").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_)scala> result.toDebugStringres: String =(2)...原创 2019-11-28 00:35:39 · 144 阅读 · 0 评论 -
Spark算子之map和foreach
map:遍历RDD,将函数f应用于每一个元素,返回新的RDD(transformation算子)。foreach:遍历RDD,将函数f应用于每一个元素,无返回值(action算子)。mapPartitions:遍历操作RDD中的每一个分区,返回新的RDD(transformation算子)。foreachPartition:遍历操作RDD中的每一个分区。无返回值(action算子)。m...原创 2019-12-07 14:26:37 · 1473 阅读 · 0 评论 -
Spark core详解系列四
RDD练习题一要求:数据如下a,1,3a,2,4b,1,1根据数据第一列统计得到如下结果a,3,7b,1,1用RDD实现。实现功能核心代码如下:val input = sc.parallelize(List( List("a", 1, 3), List("a", 2, 4), List("b", 1, 1)))input.map(x => { val ke...原创 2019-12-07 18:38:20 · 125 阅读 · 0 评论 -
Spark core之按指定字段分类输出到多个文件
要求:按日志文件的指定字段分类输出到多个文件(夹)。思路:关键在于自定义类继承 MultipleTextOutputFormat 类,使用 saveAsHadoopFile。def main(args: Array[String]): Unit = { ………… val input = sc.textFile("data/access.log") input.map(x => ...原创 2019-12-07 19:03:18 · 633 阅读 · 0 评论 -
Spark core之分区器Partitioner
spark中有两种分区器:HashPartitioner和RangePartitioner,分别用于根据RDD中key的hashcode值进行分区以及根据范围进行数据分区,默认HashPartitioner。object PartitionerApp { def main(args: Array[String]): Unit = { val sc = ContextUtils.get...原创 2019-12-07 19:30:52 · 113 阅读 · 0 评论 -
Spark之spark-submit详解
spark-submit命令查看 spark-submit 命令帮助:[hadoop@master root]$ spark-submit Usage: spark-submit [options] <app jar | python file | R file> [app arguments]Usage: spark-submit --kill [submission ID]...原创 2019-12-14 11:43:39 · 5008 阅读 · 0 评论 -
Spark core详解系列五
提交spark任务使用spark-submit提交并运行spark任务。例:spark-submit --master local[2] \--name appName \--class 主类包的全路径 \/home/hadoop/lib/mySpark-1.0.jar \hdfs://hadoop001:9000/input/ hdfs://hadoop001:9000/output...原创 2019-12-16 18:18:11 · 166 阅读 · 0 评论 -
Spark之广播变量的简单使用
需求:做两个RDD的join操作,用广播变量实现。object broadcastApp{ def main(args: Array[String]): Unit = { val conf = new SparkConf() val sc = new SparkContext(conf) val rdd1 = sc.parallelize(Array(("10","...原创 2019-12-16 18:35:50 · 203 阅读 · 0 评论 -
spark-shell启动分析
spark-shell脚本源码#!/usr/bin/env bash## Licensed to the Apache Software Foundation (ASF) under one or more# contributor license agreements. See the NOTICE file distributed with# this work for addi...原创 2019-12-21 13:46:07 · 151 阅读 · 0 评论 -
Spark内存管理(源码分析)
官网地址:http://spark.apache.org/docs/latest/tuning.html1. 内存分类spark内存的使用分为两类:execution 和 storage。execution:computation in shuffles, joins, sorts and aggregations.storage:caching and propagating inte...原创 2019-12-21 15:57:33 · 133 阅读 · 0 评论 -
Spark之shuffle
shuffle:groupByKey、reduceByKey、countByKey、部分join遇到宽依赖就会产生shuffle,切分出新的stage。数据倾斜:相同key的数据会分发到同一个task中执行。调优:代码、资源、skew、shuffleshuffle的类型hash:HashShuffleManager ( < spark1.2)sort:SortShuffleMan...原创 2019-12-21 18:34:55 · 117 阅读 · 0 评论 -
Spark之数据序列化
spark的数据序列化Java serialization:默认(slow、large)Kryo serialization:分为注册和没注册两种配置方法:conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer") //一般写到spark-default.conf中,不写在代码里。regis...原创 2019-12-21 20:35:12 · 257 阅读 · 0 评论 -
Spark-SQL笔记一
认知误区Spark SQL是处理结构化数据,并不是仅仅能够处理SQL。Spark SQL是能够处理多种不同数据源的数据(text、json、parquet、orc、hive、jdbc)。Spark SQL 是在Spark里的概念,而Hive on Spark 是在Hive里面的概念。所以,Hive on Spark不是Spark SQL,Hive刚开始时底层执行引擎只有一个:MR,后期支持...原创 2019-12-27 21:32:55 · 342 阅读 · 0 评论 -
Spark-SQL笔记二
操作Spark-SQL的两种方式:API和SQL使用sparkSQL处理数据的“套路”:读取数据,使用适当的分隔符,转为带列名的DataFrame。将DF注册成临时表。通过API或SQL方式清洗数据。输出数据。object LogApp { def main(args: Array[String]): Unit = { val spark = SparkSession...原创 2020-01-09 16:05:15 · 152 阅读 · 0 评论 -
Spark Streaming之updateStateByKey和mapWithState
updateStateByKey和mapWithState的区别两者都会使用到checkpoint目录,updateStateByKey出现在spark1.6之前,mapWithState出现在spark1.6之后,mapWithState效率更高,更加常用。updateStateByKey底层是将preSateRDD和parentRDD进行co-group,然后对所有数据都将经过自定义...原创 2020-02-14 21:25:48 · 210 阅读 · 0 评论 -
IDEA导入Spark源码,并修改、编译、打包
1 下载Spark源码下载源码到IDEA有两种方式:利用 IDEA 的 git 插件。进入Spark的GitHub源码地址,fork项目到自己的GitHub库,然后使用IDEA克隆项目到本地,源码地址为:https://github.com/apache/spark到Spark官网下载源码。源码地址:http://spark.apache.org/downloads.html两种...原创 2020-03-10 22:21:27 · 1238 阅读 · 1 评论 -
Spark Streaming之Receiver和Direct区别
Receiver(过时了)receiver运行在executor中,是一个常驻内存的进程。默认存储级别:MEMORY_AND_DISK_SER_2。由于使用的high level的API,offset都存在zookeeper中,用户不用关心offset。当receiver接收到数据,此时若driver端挂了,相应的executor也会挂掉,此时,也会造成数据的丢失。为了避免数据丢失,引...原创 2020-03-16 16:43:44 · 481 阅读 · 0 评论 -
Spark Streaming之代码打包运行方式
方式一:–packages,需要连接外网./spark-submit –master local[2] –name StreamingKafkaYARNApp –class com.ruozedata.bigdata.spark.streaming4.StreamingKafkaYARNApp –packages org.apache.spark:spark-streaming-kafk...原创 2020-03-16 16:53:03 · 578 阅读 · 0 评论