spark相关知识点
spark常用RDD算子 - parallelize
parallelize
调用SparkContext 或 JavaSparkContext的 parallelize(),将一个存在的集合,变成一个RDD或JavaRDD
代码示例:
参数1:集合
参数2:分区的个数
JavaRDD<Integer> parallelize = javaSparkContext.parallelize(Arrays.asList(1, 2, 3, 4, 5,6,7,8,9),3);
转自:https://blog.csdn.net/qq_41712271/article/details/107583639
Spark中JavaRDD与JavaPairRDD的相互转换
transform(func)
通过对源 DStream 的每个 RDD 应用一个 RDD-to-RDD函数来返回一个新的 DStream。这可以用来在 DStream 上执行任意的RDD 操作。
原文链接:https://blog.csdn.net/qq_37469055/article/details/86593803
精品!!!!
sparkConf常见参数设置
1 def getSparkConf():SparkConf = {
2
3 val sparkConf: SparkConf = new SparkConf()
4 .set("spark.driver.cores","4") //设置driver的CPU核数
5 .set("spark.driver.maxResultSize","2g") //设置driver端结果存放的最大容量,这里设置成为2G,超过2G的数据,job就直接放弃,不运行了
6 .set("spark.driver.memory","4g") //driver给的内存大小
7 .set("spark.executor.memory","8g")// 每个executor的内存
8 .set("spark.submit.deployMode","cluster") //spark 任务提交模式,线上使用cluster模式,开发使用client模式
9 .set("spark.worker.timeout" ,"500") //基于standAlone模式下提交任务,worker的连接超时时间
10 .set("spark.cores.max" , "10") //基于standAlone和mesos模式下部署,最大的CPU和数量
11 .set("spark.rpc.askTimeout" , "600s") //spark任务通过rpc拉取数据的超时时间
12 .set("spark.locality.wait" , "5s") //每个task获取本地数据的等待时间,默认3s钟,如果没获取到,依次获取本进程,本机,本机架数据
13 .set("spark.task.maxFailures" , "5") //允许最大失败任务数,根据自身容错情况来定
14 .set("spark.serializer" ,"org.apache.spark.serializer.KryoSerializer") //配置序列化方式
15 .set("spark.streaming.kafka.maxRatePerPartition" , "5000") //使用directStream方式消费kafka当中的数据,获取每个分区数据最大速率
16 .set("spark.streaming.backpressure.enabled" , "true") //开启sparkStreaming背压机制,接收数据的速度与消费数据的速度实现平衡
17 // .set("spark.streaming.backpressure.pid.minRate","10")
18 .set("spark.driver.host", "localhost") //配置driver地址
19 //shuffle相关参数调优开始
20 .set("spark.reducer.maxSizeInFlight","96m") //reduceTask拉取map端输出的最大数据量,调整太大有OOM的风险
21 .set("spark.shuffle.compress","true") //开启shuffle数据压缩
22 .set("spark.default.parallelism","10") //设置任务的并行度
23 .set("spark.files.fetchTimeout","120s") //设置文件获取的超时时间
24 //网络相关参数
25 .set("spark.rpc.message.maxSize","256") //RPC拉取数据的最大数据量,单位M
26 .set("spark.network.timeout","120s") //网络超时时间设置
27 .set("spark.scheduler.mode","FAIR") //spark 任务调度模式 使用 fair公平调度
28 //spark任务资源动态划分 https://spark.apache.org/docs/2.3.0/job-scheduling.html#configuration-and-setup
29 .set("spark.dynamicAllocation.enabled","true")
30 .set("spark.shuffle.service.enabled","true")
31 .set("spark.dynamicAllocation.executorIdleTimeout","120s") //executor空闲时间超过这个值,该executor就会被回收
32 .set("spark.dynamicAllocation.minExecutors","0") //最少的executor个数
33 .set("spark.dynamicAllocation.maxExecutors","32") //最大的executor个数 根据自己实际情况调整
34 .set("spark.dynamicAllocation.initialExecutors","4")//初始executor个数
35 .set("spark.dynamicAllocation.schedulerBacklogTimeout","5s") //pending 状态的task时间,过了这个时间继续pending ,申请新的executor
36 .setMaster("local[1]")
37 .setAppName("Stream")
38 sparkConf.set("spark.speculation", "true") //开启推测执行
39 sparkConf.set("spark.speculation.interval", "100s") // 每隔多久检测一次是否需要进行推测执行任务
40 sparkConf.set("spark.speculation.quantile","0.9") //完成任务的百分比,然后才能启动推测执行
41 sparkConf.set("spark.streaming.backpressure.initialRate" , "500") // //开启sparkStreaming的背压机制,然后第一批次获取数据的最大速率
42
43 sparkConf.registerKryoClasses(
44 Array(
45 classOf[OrderInfo],
46 classOf[Opt_alliance_business],
47 classOf[DriverInfo],
48 classOf[RegisterUsers]
49 )
50 )
51 sparkConf
52 }
Spark启动时的master参数以及Spark的部署方式
(114条消息) Spark启动时的master参数以及Spark的部署方式_三 丰的博客-CSDN博客_pyspark setmaster
SparkContext详解
1.SparkContext是什么?
他类似于javaSpringContext,是一个容器,里面装各种各样的资源。
2.SparkContext的基本了解
(1)Initializing Spark(初始化spark)
(2)告诉spark如何去连接集群(local、yarn、stand)
(3)在创建SparkContext之前,要先创建一个SparkConf,它包含你的一些应用程序的信息(key-value pairs),比如ApplicationName、core、memory
(4)In practice, when running on a cluster, you will not want to hardcode master in the program, but rather launch the application with spark-submit and receive it there. However, for local testing and unit tests, you can pass “local” to run Spark in-process.
就是你别再集群上实践跑的时候在master里面搞个local啥的硬编码(硬编码是指将可变变量用一个固定值来代替的方法),而是提交的时候指定。测试的时候可以local。
3.SparkConf的作用
他包含的就是一些配置信息,比如AppName、memory、core等。
4.
通过创建SparkConf对象来配置应用,然后基于这个SparkConf创建一个SparkContext对象。驱动器程序通过SparkContext对象来访问Spark。
这个对象代表对计算集群的一个连接。一旦有了SparkContext, 就可以用它来创建RDD。
SparkConf conf = new SparkConf().setMaster("local").setAppName("My App");
JavaSparkContext sc = new JavaSparkContext(conf);
只需传递两个参数:
集群URL:告诉Spark如何连接到集群上。例子中使用local可以让Spark运行在单机单线程上而无需连接到集群。
应用名:例子中使用My App。当连接到一个集群时,这个值可以帮助我们在集群管理器的用户界面中找到应用。
5.有两种创建StreamingContext的方式:
val conf = new SparkConf().setAppName(appName).setMaster(master);
val ssc = new StreamingContext(conf, Seconds(1));
StreamingContext,还可以使用已有的SparkContext来创建
val sc = new SparkContext(conf)
val ssc = new StreamingContext(sc, Seconds(1));
appName,是用来在Spark UI上显示的应用名称。master,是一个Spark、Mesos或者Yarn集群的URL,或者是local[*]。
batch interval可以根据你的应用程序的延迟要求以及可用的集群资源情况来设置。
6.注意事项
一个StreamingContext定义之后,必须做以下几件事情:
1、通过创建输入DStream来创建输入数据源。
2、通过对DStream定义transformation和output算子操作,来定义实时计算逻辑。
3、调用StreamingContext的start()方法,来开始实时处理数据。
4、调用StreamingContext的awaitTermination()方法,来等待应用程序的终止。可以使用CTRL+C手动停止,或者就是让它持续不断的运行进行计算。
5、也可以通过调用StreamingContext的stop()方法,来停止应用程序。
需要注意的要点:
1、只要一个StreamingContext启动之后,就不能再往其中添加任何计算逻辑了。比如执行start()方法之后,还给某个DStream执行一个算子。
2、一个StreamingContext停止之后,是肯定不能够重启的。调用stop()之后,不能再调用start()
3、一个JVM同时只能有一个StreamingContext启动。在你的应用程序中,不能创建两个StreamingContext。
4、调用stop()方法时,会同时停止内部的SparkContext,如果不希望如此,还希望后面继续使用SparkContext创建其他类型的Context,比如SQLContext,那么就用stop(false)。
5、一个SparkContext可以创建多个StreamingContext,只要上一个先用stop(false)停止,再创建下一个即可。
————————————————
原文链接:https://blog.csdn.net/qq_43147136/article/details/83067656
原文链接:https://blog.csdn.net/qq_42064119/article/details/83038811
Spark 广播变量:SparkContext.broadcast定义及使用注意事项
使用过程
(1) 通过对一个类型 T 的对象调用 SparkContext.broadcast 创建出一个 Broadcast[T] 对象。任何可序列化的类型都可以这么实现。
(2) 通过 value 属性访问该对象的值(在 Java 中为 value() 方法)。
(3) 变量只会被发到各个节点一次,应作为只读值处理(修改这个值不会影响到别的节点)。
1 JavaSparkContext jsc; 2 List<String> list = new ArrayList<>(); 3 Broadcast<List<String>> broadcast = jsc.broadcast(list); 4 List<String> value = broadcast.value();
原文链接:https://blog.csdn.net/weixin_42155006/article/details/118517464
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南