基本概念

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. Codeforces 519E A and B and Lecture Rooms [倍增法LCA]

    题意: 给你一棵有n个节点的树,给你m次询问,查询给两个点,问树上有多少个点到这两个点的距离是相等的.树上所有边的边权是1. 思路: 很容易想到通过记录dep和找到lca来找到两个点之间的距离,然后分 ...

  2. Ansible状态管理

     转载自:http://xdays.me/ansible状态管理.html 简介 就像所有服务器批量管理工具(puppet有DSL,salt有state)一样,ansible也有自己的状态管理组件 ...

  3. c# MessageBox使用

    最近一直用到winform的MessageBox,感觉还是很混乱.刚好在网上发现xuenzhen的博客,特此借鉴记录一些东西. 下面的MessageBox的九中用法,来自xuenzhen的博客:htt ...

  4. Oracle Dataguard Standby Redo Log的两个实验

    在Data Guard环境中,Standby Redo Log是一个比较特殊的日志类型.从最新的DG安装指导中,都推荐在Primary和Standby端,都配置Standby Redo Log. 简单 ...

  5. php mysql_select_db实例

    在php中,我们经常需要连接数据库和操作数据库, 在操作数据库之前,我们需要选择一个数据库,本文章通过实例向小伙伴们介绍php mysql_select_db选择数据库的使用方法. 首先介绍一下mys ...

  6. The Ninth Hunan Collegiate Programming Contest (2013) Problem A

    Problem A Almost Palindrome Given a line of text, find the longest almost-palindrome substring. A st ...

  7. linux tar 命令 --致力于“一眼看懂,随手就用”的随笔

    基本玩法: 压缩: tar -czf txt.tar.gz *.txt // 将当前目录下的所有txt文件,创建一个tar包,并用gzip算法,压缩成txt.tar.gz 文件 解压: tar -xz ...

  8. Tile-Based Deferred Rendering

    目前所有的移动设备都使用的是 Tile-Based Deferred Rendering(TBDR) 的渲染架构.TBDR 的基本流程是这样的,当提交渲染命令的时候,GPU 不会立刻进行渲染,而是一帧 ...

  9. PostMessage与SendMessage的区别(二)

    在做基于窗口的Windows程序的时候,我们避免不了要向窗口发送消息,有两种方式,一种是PostMessage,另外一种是SendMessage.关于这两个宏,我是通过狠狠的看MSDN才搞明白的,那里 ...

  10. socket 和 SocketServer 模块

    一 .Socket 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket socket(TCP,IP)通常也称作"套接字",用于描述IP地址和端 ...