基本概念

RDD

spark最大的亮点是提出RDD(Resilient Distributed Dataset)的概念,也就是可伸缩的分布式数据集合,本身只读,可恢复。spark本身不做物理储存,通过保存足够的信息去实际的储存中计算出RDD

RDD只要通过四种途径获取:

1、从共享的文件系统,比如HDFS
2、在驱动程序里的并行scala集合(例如数组),会发到多个节点上
3、从已存在的RDD转换
4、通过改变现有的RDD持久性。rdd是一个懒散,短暂的。
改变一个RDD的持久化通过两个动作:
cache:在第一次计算的时候保存在内存中,可以重用
save:保存到一个分布式文件系统,比如hdfs,这个保存版本会用于未来的操作
缓存形式只是一个提示。
如果集群中没有足够的内存去缓存所有的并行数据集合,spark将在使用它们的时候重新计算,选择这个方式工作(性能有所下降),如果节点发生故障或者数据集合太大,这个想法是一种松散的虚拟内存。

并行操作

RDD可以执行做个并行操作
reduce:通过相关函数合并数据集合,产生结果
collect: 发送所有元素的数据集合到驱动程序。例如,一个简单的方法去并行更新一个并行中的数组
foreach: 通过用户提供的函数去遍历所有元素,可能仅仅是一个不重要的功能
spark目前不支持在mapreduce中的grouped reduce,

共享变量

程序员通过函数去调用map,filter,reduce
当一个函数被传递到一个spark操作,执行在一个远程集群节点上,节点的工作使用的是独立副本。这些变量被复制到所有机器上。
一般情况下,共享变量的读写支持跨任务将是低效的。然而,spark提供两个共享变量的有限类型:广播变量和蓄电池。 
广播变量
广播变量允许程序员保持一个只读变量到每台机器上,而不是运送它的一个副本和任务。spark使用高效的广播算法去分配广播变量,以降低通信成本。
广播变量被创建后,它应该在集群中的任何函数中替代值V, v不能再节点中传输超过一次。广播后值V不能被修改,以确保所有节点具有相同过的广播值。
当一个创建广播变量b的值v,v是一个共享文件系统保存到一个文件。 b是这个文件路径的序列化形式。当B在工人节点上查询,spark首先检查V是否在本地缓存,并从文件系统读取。 最初使用hdfs做广播变量,但是正在开发更有效的流媒体广播系统。
蓄电池
蓄电池是唯一的价值是:”通过关联操作,因此可以有效地支持并行的变量。它们可以被用来实现计数器(在MapReduce的)或者sum。spark支持原生的int,double
调用SparkContext.accumulator(v),初始化值v。在集群中做 += 操作,但是我们不能读值,只能通过驱动程序去读值用于
在工人节点上,创建一个单独的副本加器作为每个运行任务的线程的线程本地变量,从0开始。
每个任务运行后,工人发送信息到驱动程序,包含每个蓄电池的更新。驱动程序适用于每个操作的每个分区仅更新一次,以防止doublecounting任务时重新执行因失败
lineage
数据集的出处信息
Interpreter Integration
1、编译输出class文件到共享文件系统,集群中的工人通过java class loader加载它们。
2、为了每一行能够直接引用单例对象,我们改变了生成代码
而不是通过静态方法getInstance

例子

给出一些实时统计日志数据例子,例子都是本地模式计算(集群模式需要Mesos),仅供参考,实现上而言非常简单

统计日志中出现多少次hbase读取:

日志的格式每行第5位是标识字段,第6位是响应时间,第7位是类型字段

val spark = new SparkContext(“local”,”test”)
val file = spark.textFile(“D:\\data\\keykeys-log\\log.log”)
val lines = file.filter(line => line.contains(“hbase_time”))
println(lines.count());
统计读取hbase的平均响应时间:
val spark = new SparkContext(“local[2]“, “test”)
val file = spark.textFile(“D:\\data\\keykeys-log\\log.log”)
val lines = file.filter(_.contains(“hbase_time”))
val times = lines.map(dd => dd.split(” “)(6).toInt).reduce(_ + _)
println(“times:” + times/lines.count())
统计hbase的请求类型:
val spark = new SparkContext(“local[2]“, “test”)
val file = spark.textFile(“D:\\data\\keykeys-log\\log.log”)
val lines = file.filter(_.contains(“hbase_time”))
val ones = lines.map(word => (word.split(” “)(7), 1)).reduceByKey(_ + _)
ones.foreach(println)

spark概论,补充的更多相关文章

  1. spark概论

    一.概述 1.轻:(1)采用语言简洁的scala编写:(2)利用了hadoop和mesos的基础设施   2.快:spark的内存计算.数据本地性和传输优化.调度优化,使其在迭代机器学习,ad-hoc ...

  2. Spark SQL读parquet文件及保存

    import org.apache.spark.{SparkConf, SparkContext} import org.apache.spark.sql.{Row, SparkSession} im ...

  3. SQL 必知必会

    本文介绍基本的 SQL 语句,包括查询.过滤.排序.分组.联结.视图.插入数据.创建操纵表等.入门系列,不足颇多,望诸君指点. 注意本文某些例子只能在特定的DBMS中实现(有的已标明,有的未标明),不 ...

  4. 2019t1_sumdoc_list.txt aa.docx acc baidu v2 sbb.docx Acc jindon v2 sbb.docx assetsList.html Atiitt 日本刑法典读后笔记.docx Atiti 遇到说花心的时候赞美应对.docx Atitit lesson.docx Atitit malye主义、mzd思想和dsp理论的区别和联系.docx Ati

    2019t1_sumdoc_list.txtaa.docxacc baidu v2 sbb.docxAcc jindon v2 sbb.docxassetsList.htmlAtiitt 日本刑法典读 ...

  5. 腾讯 angel 3.0:高效处理模型

    腾讯 angel 3.0:高效处理模型 紧跟华为宣布新的 AI 框架开源的消息,腾讯又带来了全新的全栈机器学习平台 angel3.0.新版本功能特性覆盖了机器学习的各个阶段,包括:特征工程.模型训练. ...

  6. [Spark性能调优] 源码补充 : Spark 2.1.X 中 Unified 和 Static MemoryManager

    本课主题 Static MemoryManager 的源码鉴赏 Unified MemoryManager 的源码鉴赏 引言 从源码的角度了解 Spark 内存管理是怎么设计的,从而知道应该配置那个参 ...

  7. 大数据学习day23-----spark06--------1. Spark执行流程(知识补充:RDD的依赖关系)2. Repartition和coalesce算子的区别 3.触发多次actions时,速度不一样 4. RDD的深入理解(错误例子,RDD数据是如何获取的)5 购物的相关计算

    1. Spark执行流程 知识补充:RDD的依赖关系 RDD的依赖关系分为两类:窄依赖(Narrow Dependency)和宽依赖(Shuffle Dependency) (1)窄依赖 窄依赖指的是 ...

  8. 大数据学习day22------spark05------1. 学科最受欢迎老师解法补充 2. 自定义排序 3. spark任务执行过程 4. SparkTask的分类 5. Task的序列化 6. Task的多线程问题

    1. 学科最受欢迎老师解法补充 day21中该案例的解法四还有一个问题,就是当各个老师受欢迎度是一样的时候,其排序规则就处理不了,以下是对其优化的解法 实现方式五 FavoriteTeacher5 p ...

  9. [Spark RDD_add_2] Spark RDD 分区补充内容

    [Spark & Hadoop 的分区] Spark 的分区是切片的个数,每个 RDD 都有自己的分区数. Hadoop 的分区指的是 Reduce 的个数,是 Map 过程中对 Key 进行 ...

随机推荐

  1. 第二章 D - Number Sequence(1.5.10)

    转载请注明出处:優YoU http://user.qzone.qq.com/289065406/blog/1301527312 大致题意: 有一串数字串,其规律为 1 12 123 1234 1234 ...

  2. fatal: Not a git repository (or any of the parent directories): .git

    $ git remote add origin https://github.com/heyuanchao/YouxibiClient.gitfatal: Not a git repository ( ...

  3. PHP获取文件目录dirname(__FILE__),getcwd()

    以discuz x2.5为例 D:/www/upload2.5/test.php D:/www/upload2.5/source/class/class_test.php test.php文件如下 & ...

  4. Oracle数据库——函数 http://www.jb51.net/article/40469.htm

    1====分析函数  相当于把分组后的结果加到每一行里 SELECT  t.loan_contract_no,t.loan_name,t.loan_amount,ROWNUM,  row_number ...

  5. OC基础笔记目录

    OC基础(1) Objective-C简介 OC和C对比 第一个OC程序 面向对象思想 OC基础(2) 类与对象 类的设计 第一个OC类 对象方法的声明和实现 类方法的声明和实现 OC基础(3) 对象 ...

  6. Fegla and the Bed Bugs 二分

    Fegla and the Bed Bugs Fegla, also known as mmaw, is coaching a lot of teams. All these teams train ...

  7. 初探appium之appium的使用

    上一篇中已经讲了python+appium的环境搭建.这里简单的讲一下appium的使用. 我也是第一次使用appium,看了教程问了人.知道appium可以通过模拟也可以连接上手机使用.本篇中,先使 ...

  8. jmeter随笔(2)--上传接口报错

    黑夜小怪(2016-8-24  23:45) 微信订阅号: 问题:今天同事遇到问题,一个图片上传接口,单独跑是ok的,但是放在和其他接口一起就跑不通,如图 分析:查看该接口fiddler的抓包,发现请 ...

  9. python写入中文到文件乱码的问题

    file = open(filename,'a',encoding='utf8')#指定写入编码为utf8,否则写入中文会乱码

  10. Powerdesigner 导出Excel格式数据字典 导出Excel格式文件

    版权声明:本文为博主原创文章,转载请注明出处; 网上我也看到了很多的Powerdesigner 导出方法,因为Powerdesigner 提供了部分VBA功能,所以让我用代码导出Excel格式文件得以 ...