之前一直也在用storm与spark进行开发,最近从头梳理了一下,整个的学习使用过程,一点一点记录
我是学java的,上手就是java api
先说一下我对spark-yarn管理的理解,程序是driver,提交到resourcemanage中,申请资源(excutor个数,core个数等等),如果有资源,则允许运行,分配到各个worknode中,一个分区对应一个task,分区与并发有很大关系,当然并发也决定于cores
先来一个完整开发例子
SparkConf--spark有很多参数设置,你也可以不设置直接用默认的
有本地模式,yarn模式(yarn-client(可以交互),yarn-cluster(一次操作)),独立集群模式
SparkConf conf = new SparkConf().setAppName("Spark 开发开始").setMaster("local");
SparkConf conf=new SparkConf().setMaster("yarn-client").setAppName("开发任务");
构建入口
JavaSparkContext sc = new JavaSparkContext(conf);
spark进程管理:
spark.storage.safetyFraction 默认值为0.9 spark为了保证内存的足够使用,避免OOM,只允许使用JVM内存*0.9
spark.storage.memoryFraction 默认值为0.6 spark一个进程中用于storage的值,这个值是基于之前的0.9安全内存的,为总内存的0.9*0.6=0.54
shuffle使用内存情况:堆大小 * spark.shuffle.safetyFraction * spark.shuffle.memoryFraction 默认为0.2和0.8即堆大小的0.16
RDD、Transformation、Actions
RDD是数据集合
---rdd可以创建一个空的emptyRDD()
---rdd可以通过parallelize来创建,可以指定分区数量,如果不指定按spark.default.parallelism来(主要针对数字数组)--conf.set("spark.default.parallelism", "500")
---rdd textFile(读文件),可以设置分区
---rdd binaryFiles(二进制文件读取),同上
---rdd newAPIHadoopRDD(读取hbase),实际与java客户端读取没什么区别
---objectFile(读取对象?没用过)
分区很关键,分区少了,可能会执行慢,而且单个任务消耗内存多,分区太多也不好
分区直接决定了task的并行度的可能(因为还有cpu核数限制)
Transformation是数据集合转换,不会提交任务,只是记住了这个逻辑
Actions才会提交job
map(function)----将rdd重新装载一次,按你需要的格式(比如map,比如类等)
filter(function)----将rdd过滤一次,返回true的是需要的
flatMap(function)----将一条记录处理成多条记录,map完成之后数据量还是N,flatMap完成之后数据量会变成M,M>n;
mapPartitions(function)-----按分区处理数据,有几个分区就处理几次(如果每次处理都需要new一个对象,比例连数据库或者其他等等,这个时候用这个就合适)
mapToPair(function)----将元素映射为<String,String>结构,但是很奇怪,map已经能做到相同的事情了啊,这个还有什么优势吗?
tranformation 和 action
transformation 的输入是RDD,输出也是RDD。action的输入是RDD,输出是一个值,通常是在Spark程序的末尾被调用,得到一个计算结果。
transformation和action最大的区别在于,transformation 遵循缓式计算(lazy evaluation), 程序内部执行tranformation调用之后,并不立即进行计算,直到某个action被调用,才会进行真正的计算。结合下文提到的DAG,优化了程序的执行效率。
Spark中大部分API提供的都是transformation操作,如代码示例中的map, filter 及 flatmap, 少数API提供action操作,如count 和 reduce
分享到:
相关推荐
2. **弹性分布式数据集(RDD)**:RDD是Spark最基础的数据抽象,它是不可变的、分区的记录集合。RDD可以在集群中的节点之间并行操作,支持各种算子,如转换(map、filter)和行动(reduce、count)。 3. **高级API*...
Spark 通过记录 RDD 的血缘关系(lineage)来实现容错。如果某个 RDD 的部分分区丢失,Spark 可以通过重新计算丢失的分区来恢复,这个过程依赖于 RDD 的转换历史。这种机制使得 Spark 在处理大规模数据时既高效又...
例如,通过MLlib实现协同过滤进行商品推荐,使用Spark SQL处理ETL任务,或者借助Spark Streaming监控网络流量。 总结,Spark作为一个强大的大数据处理框架,其丰富的组件和灵活的设计使其在各种场景下展现出强大的...
本人学习Spark过程中记录的笔记,从基础到优化基本上都包括了。虽然受限于本人技术,本笔记还是有些简单!但是也是比较全面的!
- **RDD(弹性分布式数据集)**:Spark的核心数据抽象,是不可变、分区的记录集合,可以在集群中进行并行操作。 - **DAG(有向无环图)**:Spark的任务调度基于DAG,它表示了任务间的依赖关系。 - **Job、Stage、...
理解RDD、DataFrame和Dataset之间的转换以及如何使用Spark SQL是学习Spark的关键。 五、Spark关键模块 1. Spark Core:Spark的核心功能,包括任务调度、内存管理、I/O处理等。 2. Spark SQL:支持SQL查询和...
在Spark机器学习领域,第三章通常会涉及到利用大数据处理框架进行实际的数据分析和建模工作。本案例聚焦于MovieLens数据集,一个广泛用于推荐系统研究的经典数据集。MovieLens是由GroupLens研究小组提供的,包含了...
机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。它专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的...
2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。...
具体来说,研究了如何使用Spark+MLlib来构建一个高效的分布式学习系统,该系统不仅能够处理大规模数据集,而且通过分类和预测功能,实现用户标签系统的构建。 系统采用的是多迭代、轻量级的框架设计,以及窄依赖...
本示例将讨论如何使用Java语言在Spark中连接MongoDB进行CRUD(创建、读取、更新和删除)操作,同时涉及到Spring框架和Maven构建工具。 首先,我们需要确保已安装并配置了Spark、Java、MongoDB以及Maven。在Java项目...
惰性求值:RDD的转化操作是惰性求值的,即在被调用行动操作之前Spark不会开始计算,相反,Spark会在内部记录下索要求执行的操作的相关信息。例如,当我们调用jsc.textFile()时,数据并没有读取进来,而是在必要时才...
### 大数据技术分享:利用Apache Spark、Python 3与机器学习构建可扩展的记录链接系统 #### 一、业务背景及挑战 本讲座主要介绍了如何利用Apache Spark、Python 3以及机器学习技术来构建一个可扩展的记录链接系统...
Spark-2.4.5是该框架的一个稳定版本,提供了丰富的数据处理功能,包括批处理、交互式查询(通过Spark SQL)、实时流处理(通过Spark Streaming)以及机器学习(通过MLlib库)和图计算(通过GraphX)。这个版本的源码...
1. RDD(Resilient Distributed Datasets):Spark的基本数据抽象,是一个不可变、分区的记录集合。RDD具有弹性,能够自动处理节点故障。 2. DataFrame和Dataset:Spark 2.0引入的新API,基于DataFrame的DataFrame ...
- **RDD(Resilient Distributed Dataset)**:是Spark的基本数据结构,表示不可变、分区的记录集合。通过`persist()`或`cache()`方法,可以将RDD持久化到内存或磁盘,加速后续操作。不同级别(如MEMORY_ONLY, ...
2. **RDD(Resilient Distributed Datasets)**:RDD是Spark的核心抽象,表示不可变、分区的记录集合。RDD支持操作如转换(transformations)和行动(actions)。转换创建新的RDD,而行动触发计算并可能返回结果到...
总的来说,这些资料构成了一个完整的Spark学习路径,从理论知识到实践操作,从初识到精通,对于想要进入Spark领域的学习者来说是一套宝贵的资源。通过深入学习和实践,你将能够掌握Spark的强大功能,解决实际的大...
本书的结构通常会涵盖Spark的基本概念、安装与配置、RDD编程、Spark SQL的使用、Spark Streaming的实现、MLlib的机器学习实践以及GraphX的应用。此外,还会讲解如何在不同环境中部署Spark,例如YARN、Mesos或...