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.

任何 Spark程序都是SparkContext开始的,SparkContext的初始化需要一个SparkConf对象,SparkConf包含了Spark集群配置的各种参数。
初始化后,就可以使用SparkContext对象所包含的各种方法来创建和操作RDD和共享变量。

通过创建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

posted @   巴啦啦小花总  阅读(90)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示