spark复习总结01
1.MapReduce和spark的对比
MapReduce | Spark |
---|---|
数据存储结构:磁盘hdfs文件系统的split | 使用内存构建弹性分布式数据集RDD,对数据进行运算和cache |
编程范式:Map+Reduce | DAG(有向无环图):Transformation+action |
计算中间数据放在磁盘,io及序列化,反序列化代价大 | 计算中间数据在内存中维护,存储速度是磁盘的几个数量级 |
Task以进程的方式维护,任务启动就要数秒 | Task以线程的方式维护,对小数量集的读取能达到亚秒级的延迟 |
2.初始化spark
SparkConf conf = new SparkConf().setAppName("LocalWordCount").setMaster("local");// 指定运行在本地
JavaSparkContext sparkContext = new JavaSparkContext(conf);
master为Spark、Mesos、YARN URL或local。使用local值时,表示在本地模式下运行程序。
也可以在省略,在spark-submit
时进行指定。
3.使用spark-shell,会自动创建sparkContext sc
--marter 设置运行模式
$ ./bin/spark-shell --master local[4] //4为cup核数
--jars 将jar包添加到classpath,多个jar中间用,隔开
$ ./bin/spark-shell --master local[4] --jars code.jar
--packages 通过maven坐标添加jar,多个用逗号隔开
$ ./bin/spark-shell --master local[4] --packages "org.example:example:0.1"
--repositories 添加外部的repository
4.RDD的创建
4.1 通过并行化集合创建
//通过并行化集合来创建RDD
context.parallelize(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
将集合并行化时可以指定分区数,spark会在每个分区上启动一个task。
通常集群的每个CPU设置2~4个分区
通常,spark基于集群自动设置分区数,也可以手动设置,parallelize(array,10)
4.2 通过读取外部文件创建
// 通过读取外部文件创建RDD
sparkContext.textFile("src/main/resources/wordcount.txt", 5);
如果使用的是本地文件,在其他worker节点上该文件必须在相同的目录下
textFile()中可以是文件和目录,同时可以使用通配符sparkContext.textFile("src/main/resources/*.txt", 5);
分区数默认情况spark为每个块创建一个分区,也可以手动设置,但不能小于块数。
同时读取不同目录下的文件,使用wholeTextFiles
(),仅适用于小文档
/**
* 读取不同目录下的文件,返回<fileName,content>的RDD,仅适用于小文档
*
* [(file:/D:/workhome/workhome2/beifeng-spark/src/main/resources/wordcount.txt,
hello scala java
hello spark
hello yarn
hadoop spark yarn),
(file:/D:/workhome/workhome2/beifeng-spark/src/main/resources/other/aa.txt,
hadoop yarn
scale java)]
*/
JavaPairRDD<String, String> files=sparkContext.wholeTextFiles("src/main/resources/wordcount.txt,src/main/resources/other/aa.txt"); //返回以每个文档为元素的RDD
JavaRDD<String> textRdd=files.map(new Function<Tuple2<String,String>, String>() { @Override
public String call(Tuple2<String, String> v1) throws Exception {
//将文档中的换行符替换为空格,将回车符去掉
return v1._2.replaceAll("\r"," ").replaceAll("\n", "");
}
}); //返回以每个单词为元素的RDD
JavaRDD<String> words=textRdd.flatMap(new FlatMapFunction<String, String>() { @Override
public Iterable<String> call(String text) throws Exception {
return Arrays.asList(text.split(" "));
}
});
5.cache(),persist()和checkpoint()之间的区别
5.1 cache()和checkpoint()的区别
适用场景:
cache:会被重复使用但不太大的RDD,只会使用内存
checkpoint:运算时间过长或者运算量太大才能得到的RDD,或者依赖其他RDD过多的RDD
缓存机制:
cache:每计算出一个要cache的RDD就直接将其cache到内存。
checkpoint:等到job结束后另外开启专门的job去完成checkpoint,即checkpoint的RDD会计算两次,
因此在使用rdd.checkpoint的时候,建议加上rdd.cache(),第二次的计算的时候就会直接使用cache中的内容
5.2 persisit()和checkpoint()的区别
persist()可以将RDD的partition持久化到磁盘,但该partition由blockManager管理,一旦driver program执行结束,也就是executor所在的进程停止,blockManager也会停止,别cache到磁盘上的RDD也会被清空。
checkpoint()可以将RDD持久化到HDFS或本地文件夹,如果不手动清除永久存在。
5.3 cache()和persisit()的区别
cache()底层调用persist(StorageLevel.MEMORY_ONLY)
spark复习总结01的更多相关文章
- spark学习笔记01
spark学习笔记01 1.课程目标 1.熟悉spark相关概念 2.搭建一个spark集群 3.编写简单spark应用程序 2.spark概述 spark是什么 是基于内存的分布式计算引擎,计算速度 ...
- 【Spark 深入学习 01】 Spark是什么鬼?
经过一段时间的学习和测试,是时候给spark的学习经历做一个总结了,对于spark的了解相对晚了写.春节期间(预计是无大事),本博准备推出20篇左右spark系列原创文章(先把牛吹出去再说) ,尽量将 ...
- spark机器学习笔记01
1)外部数据源 val distFile1 = sc.textFile("data.txt") //本地当前目录下文件 val distFile2 =sc.textFile(& ...
- spark复习笔记(1)
使用spark实现work count ---------------------------------------------------- (1)用sc.textFile(" &quo ...
- spark复习笔记(7):sparkstreaming
一.介绍 1.sparkStreaming是核心模块Spark API的扩展,具有可伸缩,高吞吐量以及容错的实时数据流处理等.数据可以从许多来源(如Kafka,Flume,Kinesis或TCP套接字 ...
- spark复习笔记(7):sparkSQL
一.saprkSQL模块,使用类sql的方式访问Hadoop,实现mr计算,底层使用的是rdd 1.hive //hadoop mr sql 2.phenoix //hbase上构建sql的交互过 ...
- spark复习笔记(6):RDD持久化
在spark中最重要的功能之一是跨操作在内存中持久化数据集.当你持久化一个RDD的时候,每个节点都存放了一个它在内存中计算的一个分区,并在该数据集的其他操作中进行重用,持久化一个RDD的时候,节点上的 ...
- spark复习笔记(6):数据倾斜
一.数据倾斜 spark数据倾斜,map阶段对key进行重新划分.大量的数据在经过hash计算之后,进入到相同的分区中,zao
- spark复习笔记(4):RDD变换
一.RDD变换 1.返回执行新的rdd的指针,在rdd之间创建依赖关系.每个rdd都有一个计算函数和指向父rdd的指针 Spark是惰性的,因此除非调用某个转换或动作,否则不会执行任何操作,否则将触发 ...
随机推荐
- 控制 if 语句 while循环 break continue
if 语句的语法: 1. if 条件 : #引号是将条件与结果分开 代码块 # 四个空格,或者一个tab键,这个是告诉程序满足这个条件的 说明: 当条件成立的时候(True), 代码块会被执行 ...
- Debug your ASP.NET Application while Hosted on IIS
转摘:http://www.codeproject.com/Articles/37182/Debug-your-ASP-NET-Application-while-Hosted-on-IIS This ...
- SHOW - 显示运行时参数的数值
SYNOPSIS SHOW name SHOW ALL DESCRIPTION 描述 SHOW 将显示当前运行时参数的数值. 这些变量可以通过 SET 语句来设置,或者通过编辑 postgresql. ...
- ubuntu18.04 -- 创建第一个Django项目
step1: 安装虚拟环境: sudo pip3 install virtualenv # 安装虚拟环境sudo pip3 install virtualenvwrapper # 安装虚拟环境扩展包# ...
- 使用Maven创建Web项目(转)
转自:http://ju.outofmemory.cn/entry/49508 本文通过Maven完成一个简单的Web项目(注意,Spring配置不是重点,看看就行) 1.从Maven模板创建Web应 ...
- pip飞起来了
这里说下Windows下的修改方法,看了网上很多的教程发现都不行,尝试了好久终于发现了可行的方法. 找到python安装目录下的:\Lib\site-packages\pip\models\index ...
- python3.x 扯扯【切片】这玩意儿
在此之前先了解一下list这个玩意儿: list对应cpp这的数组,一维数组,二维数组,或者是嵌套都行: L=[] #空列表 L=[1,2,3,4,5,6] #六项 L=['a',['b','c']] ...
- easyUi-datagrid 真分页 + 工具栏添加控件
1. 新建Pager.js /** * * @param {any} el 元素 */ function showDataGrid1(el) { $(el).datagrid({ title: '分 ...
- Ververica Platform-阿里巴巴全新Flink企业版揭秘
摘要:2019云栖大会大数据 & AI专场,阿里巴巴资深技术专家王峰带来“Ververica Platform-阿里巴巴全新Flink企业版揭秘”的演讲.本文主要从Ververica由来开始谈 ...
- STM32点LED灯
一.建立项目模板 这里的user中重复引用了system_stm32f10x.c Output中选择Create HEXFile,并且可以选择输出路径. Listing中可以选择输出路径. 然后在C/ ...