前年的文章,备份
spark是一个开源的分布式计算系统,提供快速的数据分析功能。 官网地址 http://www.spark-project.org/ 据说性能高出hadoop很多(个人理解主要是因为两点:内存和cache),而且相对更加简单,灵活。非常适合需要反复迭代的计算,比如机器学习。
spark基于scala编写,对我而言也是门陌生的语言,至今还是有很多不理解的地方。
基本概念
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: Cluster Computing with Working Sets. Matei Zaharia, Mosharaf Chowdhury, Michael J. Franklin, Scott Shenker, Ion Stoica. USENIX HotCloud 2010. June 2010.
相关推荐
19 STL初识-STL的基本概念
### 项目二 初识物联网—任务1:掌握物联网的基本概念 #### 一、引言 随着科技的进步,物联网(Internet of Things, IoT)已成为推动信息产业发展的重要力量。本章节通过对一个具体案例——智能定位手表的介绍,...
IoT-Camera学习笔记之初识IoT-Camera
04-requests进阶-初识反爬 03-数据解析 02-爬虫概念 01-Python基础 6.9 Scrapy处理翻页与实现模拟登录1 .mp4 817.6MB 6.8 Scrapy实战案例一1 .mp4 694.7MB 6.7 Scrapy基本使用入门 .mp4 1.9GB 6.6 MongoDB...
【Oracle安装-卸载-初识Oracle-笔记】 Oracle是一种广泛应用的关系型数据库管理系统,尤其在企业级应用中占据重要地位。对于初次接触Oracle的人来说,理解其安装、卸载过程及基本操作是至关重要的。 一、下载地址 ...
01初识Scratch-游来游去的小鱼
(1)一组分片(Partition),即数据集的基本组成单位 (2)一个计算每个分区的函数 (3)RDD之间的依赖关系 (4)一个Partitioner,即RD
总结,初识C语言,我们需要掌握其基本语法、控制结构、数据类型、内存管理和输入输出等方面的知识。通过不断实践和项目经验积累,可以逐步深化对C语言的理解,为将来深入学习其他编程语言或系统级编程打下坚实基础。
在这篇课件中,我们将介绍 Rosetta 的基本概念和使用方法,包括如何运行基本的 Rosetta 应用程序、输入/输出文件类型、选项等,以及如何导航 Rosetta。 Rosetta 基础知识 Rosetta 是一个基于计算生物学的软件套件...
1、hive的产生背景 2、hive的定义 3、hive的本地安装 4、hive的基本类型 5、hive的基本命令
初识CMMI3.ppt可能是这个压缩包中的核心内容,它可能涵盖了CMMI的基本概念、各个级别的详细解释、实施CMMI的步骤、评估方法等内容。通过学习这份教材,读者可以全面了解CMMI体系,为组织引入CMMI做好准备。 总的来...
计算机是现代社会不可或缺的技术工具,尤其对孩子们来说,早些接触和了解计算机是非常...总的来说,这篇内容为小学生提供了一个很好的起点,帮助他们了解计算机的基本概念和操作,为后续的计算机学习打下坚实的基础。
文档包含28页的内容,通常会涵盖基础概念、工作原理、主要功能和性能指标等方面。 描述“初识PLC——PLC性能共28页.pdf.zip”进一步确认了这份资料的主题,即对PLC的初步理解,特别强调了对PLC性能的理解,可能包括...
初识Firebug全文--Firebug的使用.mht初识Firebug全文--Firebug的使用.mht初识Firebug全文--Firebug的使用.mht初识Firebug全文--Firebug的使用.mht初识Firebug全文--Firebug的使用.mht初识Firebug全文--Firebug的使用...
以下将详细阐述PLC的基本概念、功能以及常用编程软件的使用方法。 1. PLC的基本概念: PLC最早在20世纪60年代为解决继电器控制系统繁琐的接线问题而诞生,现已成为现代工业控制的核心部分。它是一种数字运算操作的...
通过学习和实践“初识MFC-MFC视频播放器”项目,开发者不仅可以掌握MFC的基本用法,还能深入了解视频播放的技术细节,为构建更复杂的多媒体应用打下坚实基础。同时,这个项目也适合C++初学者,作为提升面向对象编程...
【描述】:“初识PLC——认识FXN系列PLC共8页.pdf.zip”进一步说明了这份文档的篇幅,只有8页,因此可能是一份简明扼要的入门教程,适合初次接触PLC和FXN系列的人学习。 【标签】:“初识PLC——认识FXN系列PL”这...
【初识Python】是初中信息技术课程的一个重要环节,旨在引导学生入门编程,特别是Python语言。在这一阶段,学生们将学习到以下关键知识点: 1. **Python编程环境**:Python是一种高级编程语言,以其简洁易读的语法...
通过本章的学习,你将对Visual Basic.NET 2005有一个初步的认识,包括.NET Framework的基本概念,以及如何安装和使用Visual Studio.NET 2005集成开发环境。这为后续深入学习VB.NET编程打下了坚实的基础。
002-初识python-python介绍 003-初识python-软件安装 004-初识python-windows软件安装 005-初识python-mac软件安装 006-第1个程序-新建项目 007-第1个程序-注释 008-第1个程序-打印变量 009-第1个程序-一行打印多个...