
spark-shell、spark架构设计、使用idea初始化spark运行环境、Spark RDD
创建基于 Maven的项目,将必要的依赖添加到
发布日期:2021-05-10 03:44:37
浏览次数:20
分类:精选文章
本文共 2737 字,大约阅读时间需要 9 分钟。
spark-shell
spark是集成开发工具,提供了交互式环境,便于数据处理和分析。以下是通过spark-shell进行操作的一些示例。
val rdd1 = sc.parallelize(1 to 10)rdd1.collect // 返回结果:Array[Int] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]rdd1.partitions.size // 返回结果:1val rdd2 = sc.makeRDD(5 to 15)rdd2.collect // 返回结果:Array[Int] = [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]rdd1 ++ rdd2rdd1.canEqual(rdd2) // 返回结果:falserdd1.cartesian(rdd2) // 返回结果:RDD[(Int, Int)],具体分区结构根据运行环境改变
wordcount流程实例
val rddWordCount = sc.parallelize(Array("hello world","hello java","hello scala","scala very good"))rddWordCount.flatMap(x => x.split(" ")).map(x => (x, 1)).reduceByKey(_ + _).collect// 以上代码实现的步骤:// 1. 将每个字符串拆分成单词// 2. 将单词和计数(1)一起映射// 3. 按照单词进行聚合,统计出现次数// 4. 将结果收集到本地机内存中
spark架构设计
Spark是一款非常强大的分布式计算框架,其架构设计主要包括以下几个层次:
驱动程序:通过SparkContext来主导应用的执行。SparkContext负责连接Cluster Manager(如Standalone、YARN或Mesos),并向集群中的Executor传递任务。
Executor与Worker:每个应用可以配置Executor的数量,通过SPARK_WORKER_INSTANCES控制。每个Executor处理多个Task分区,确保计算资源被充分利用。
Task与分区处理:每个Task仅处理单个RDD分区,这样可以在不同的Executor上并行执行,提高计算效率。
核心组件包括:
- Cluster Manager:负责资源的分配和节点的管理。
- SparkContext:应用程序的入口,负责任务提交和资源协调。
- Executor:在集群中运行Task,负责具体的数据计算。
- Worker:负责接收并分发任务,协调Task的执行。
使用IDEA初始化Spark运行环境
pom.xml
中。推荐添加以下依赖:junit junit 4.11 test org.scala-lang scala-library 2.11.12 org.apache.spark spark-core_2.11 2.1.1 org.apache.spark spark-sql_2.11 2.1.1
- SparkContext初始化示例:
- SparkSession初始化示例:
- 切换模式:根据选择的Cluster Manager(如本地模式、YARN或Standalone)配置不同的资源访问方式。
- 资源申请:SparkContext通过Cluster Manager申请资源,创建Executor。
- 任务提交:将任务打包发送至Executor,通过Task Launcher执行。
- 结果收集:Parser将计算结果返回Driver端,供用户处理和查看。
- parallelize:将输入数据并行生成RDD。
- flatMap:对每行文本进行拆分,得到单词列表。
- map:将单词与计数(1)结合。
- reduceByKey:按照单词合并计数。
- collect:将最终结果收集到本地收集器中。
- 弹性性:默认存储在内存中,内存不足时会写入磁盘,切换模式。
- 容错性:基于血统机制,能自动恢复丢失分区的数据。
- 分区处理:每个Task仅处理一个分区,确保资源利用效率。
val conf = new SparkConf().setMaster("local[*]").setAppName("SparkDemo")val sc = SparkContext.getOrCreate(conf)
val spark: SparkSession = SparkSession.builder().master("local[*]").appName("sparkSessionDemo").getOrCreate()println(spark)
spark架构核心组件
Spark架构的核心设计基于一个灵活的集群管理模型,工作流程如下:
wordcount实现详解
以下是基于Spark的血缘关系识别工具实现的WordCount功能:
val wordCount = sc.parallelize(Array("hello world","hello java","hello scala","scala very good"))wordCount.flatMap(x => x.split(" ")).map((x, 1)).reduceByKey(_ + _).collect
代码解读:
通过以上代码,可以轻松实现对文本文件中的单词频率进行统计分析。
RDD概念解析
RDD(Resilient Distributed Dataset)是Spark核心的数据抽象表示。
RDD与DAG
RDD及其依赖关系构成DAG(有向无环图),反映了Spark任务的执行顺序。
发表评论
最新留言
表示我来过!
[***.240.166.169]2025年05月07日 15时49分30秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
541【毕设课设】基于单片机电阻电感电容RLC测量仪系统
2019-03-15
基于8086交通灯系统仿真设计(微机原理设计资料)
2019-03-15
解读域名管理之:域名注册机构介绍
2019-03-15
找中位数
2019-03-15
这些运维发展方向及系统运维技能都不了解,怎么能吃透Linux??
2019-03-15
自动化测试——UI自动化测试的痛点
2019-03-15
如何将萌推商品主图、属性图、详情图批量保存到电脑的方法
2019-03-15
2021年N1叉车司机模拟考试及N1叉车司机考试软件
2019-03-15
【奇淫巧技】Java动态代理(JDK和cglib)
2019-03-15
【Stimulsoft Reports.Net教程】使用DesignerFx
2019-03-15
攻防世界 Pwn 新手
2019-03-15
mybtis-plus 出现 Wrong namespace
2019-03-15
用户登陆的验证码的制作
2019-03-16
升级java11后,maven命令打包报错
2019-03-16
springboot redis key乱码
2019-03-16
Win10禁用自带的笔记本键盘
2019-03-16
insmod模块的几种常见错误
2019-03-16
写时复制集合 —— CopyOnWriteArrayList
2019-03-16
什么是redis的缓存雪崩, 穿透, 击穿?
2019-03-16