之前一直也在用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
分享到:
相关推荐
本人学习Spark过程中记录的笔记,从基础到优化基本上都包括了。虽然受限于本人技术,本笔记还是有些简单!但是也是比较全面的!
机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。它专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的...
2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。...
资源记录了spark学习过程中的记录
惰性求值:RDD的转化操作是惰性求值的,即在被调用行动操作之前Spark不会开始计算,相反,Spark会在内部记录下索要求执行的操作的相关信息。例如,当我们调用jsc.textFile()时,数据并没有读取进来,而是在必要时才...
自己本人线下记录的一些关于spark学习的例子,大家可以参考下,比如刚学习或者接触大数据的朋友可以看一下。
spark-ml-streaming, 在Spark中,可视化流媒体学习 可视化流机器在Spark中学习 这个 python 应用生成数据,在火花流中分析它,并用闪电可视化结果。 本文以Spark版本为例,对火花机学习算法中的。 这些演示是为本地...
spark调优学习小结,详细记录了如何一步步调优的方法。
sparkML智能客户系统项目实战-全套笔记,详细记录学习过程.zip
为了阐述本章的一些概念,我们选择了bike sharing数据集做实验。这个数据集记录了bike sharing系统每小时自行车的出租次数。另外还包括日期、时间、天气、季节和节假日等相关信息。
自己学习并应用Spark一段时间后,由于需要改源代码,就研究了下怎么编译源码,成功编译后,记录下了编译的步骤和遇到的问题,例如编译过程中,下载大量的依赖包,默认从国外下载,非常慢,可能要编译好几个小时,...
它还支持丰富的高级工具集,包括用于SQL和DataFrames的Spark SQL,用于机器学习的MLlib,用于图形处理的GraphX和用于流处理的Spark Streaming。 在线文件 您可以在和上找到最新的Spark文档,包括编程指南。 此自述...
我的真棒书 本书记录了我在学习Spark的过程中的一些想法和总结。
记录我的学习之旅,每份文档倾心倾力,带我成我大牛,回头观望满脸笑意,望大家多多给予意见,有问题或错误,请联系 我将及时改正;借鉴文章标明出处,谢谢
然后,我们使用集成机器学习方法训练分类器,主要是使用逻辑回归和随机森林进行装袋。 然后我们使用 k 折交叉验证来评估性能并使用 Spark 中的 ML 管道框架选择分类器参数。 结果 : 我们能够在由 50% 的未患有...
本系统是以Django作为基础框架,采用MTV模式,数据库使用MySQL和Redis,以从豆瓣平台爬取的电影数据作为基础数据源,主要基于用户的基本信息和使用操作记录等行为信息来开发用户标签,并使用Hadoop、Spark大数据组件...
本系统是以Django作为基础框架,采用MTV模式,数据库使用MySQL和Redis,以从豆瓣平台爬取的电影数据作为基础数据源,主要基于用户的基本信息和使用操作记录等行为信息来开发用户标签,并使用Hadoop、Spark大数据...
毕业设计是高等教育阶段学生在完成学业前所进行的一项重要学术任务,旨在检验学生通过学习所获得的知识、技能以及对特定领域的深刻理解能力。这项任务通常要求学生运用所学专业知识,通过独立研究和创新,完成一个...
本系统是以Django作为基础框架,采用MTV模式,数据库使用MySQL和Redis,以从豆瓣平台爬取的电影数据作为基础数据源,主要基于用户的基本信息和使用操作记录等行为信息来开发用户标签,并使用Hadoop、Spark大数据...
2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。...