Spark构成
RDD
Spark基本的数据结构叫弹性分布式数据集(Resilient Distributed Datasets,简称RDD).
概念:
一个分布于集群节点的只读数据集合,并以容错的、并行的方式进行维护.
为了解决MapReduce的性能问题,Spark使用RDD作为分布式程序的工作集合,它提供一种分布式共享内存的受限形式.在分布式共享内存系统中,应用可以向全局地址空间的任意位置进行读写操作,而RDD是只读的,对其只能进行创建、转化和求值等操作.
RDD的优势:
可以方便地实现迭代算法,简单地说就是能在一个循环中多次访问数据集合.RDD还适合探索式的数据分析,能够对数据重复执行类似于数据库风格的查询.最为经典的的迭代算法是用于机器学习系统的培训算法.
Spark基本概念
- Spark需要一个集群管理器和一个分布式存储系统作为支撑.
- 对于集群管理器: 一般用YARN 或 Mesos
对于分布式存储,Spark可以与多种系统对接. HDFS、MapR文件系统、亚马逊S3,或者一个用户自己实现的文件系统. - Spark支持伪分布式的本地部署模式,通用仅用于开发和测试目的.
- 本地模式不要分布式存储,而是用本地文件系统代替.此场景下,Spark运行在一个机器上,每个CPU核是一个执行器(executor).
- Spark框架含有Spark Core、Spark SQL、Spark Streaming、MLib Machine Learning Library、GraphX等几个主要组件.
Spark Core
Spark Core是所有Spark相关组件的基础.
它以RDD这个抽象概念为核心,通过一组应用程序接口,提供分布式任务的分发、调度和基本的I/O功能.
Spark Core的编程接口支持Java、Python、Scala和R等程序语言.
这组接口使用的是函数式编程模式,即一个包含对RDD进行map、filter、reduce、join等并行操作的驱动程序,向Spark传递一个函数,然后Spark调度此函数在集群上并行执行.这些基本操作把RDD作为输入并产生新的RDD.
RDD自身是一个不变的数据集,对RDD的所有转换操作都是lazy模式,即Spark不会立即执行计算结果,而只是简单地记住所有对数据集的转换操作,这些转换只有遇到action操作的时候才会真正开始执行,这样的设计使Spark更加高效.
容错功能是通过追踪每个RDD的“血统”(lineage,指的是产生此RDD的一系列操作)实现的.一旦RDD的数据丢失,还可以使用血统进行重建.
Spark SQL
Spark SQL是基于Spark Core之上的一个组件,它引入了名为DataFrames的数据抽象.DataFrames能够支持结构化、半结构化数据.
Spark SQL提供了一种“领域特定语言”(Domain-Specific Language,简称DSL),用于在Scala、Java或Python中操纵DataFrames.同时Spark SQL也通过命令行接口或ODBC/JDBC提供对SQL语言的支持.
Spark Streaming
Spark Streaming利用Spark Core的快速调度能力执行流数据的分析.它以最小批次获取数据,并对批次上的数据执行RDD转化.这样的设计,可以让用于批处理分析的Spark应用程序代码也可以用流数据分析,因此便于实时大数据处理架构的实现.但是这种便利性带来的问题是处理最小批次数据的延时.
Storm和Flink的streaming组件,以事务为单位处理流数据
Spark Streaming以最小批次为单位处理流数据. 伪实时
Spark Streaming支持从Kafka、Flume、TCP/IP sockets、Twitter、ZeroMQ、Kinesis接收数据.
MLlib Machine Learning Library
Spark中还包含一个机器学习程序库,叫做MLlib.MLlib提供了很多机器学习算法,包括分类、回归、聚类、协同过滤等,还支持模型评估、数据导入等额外的功能.MLlib还提供了一些更底层的机器学习原语,如一个通用的梯度下降算法等.所有这些方法都被设计为可以在集群上轻松伸缩的架构.
GraphX
GraphX是Spark上的图(如设计网络的朋友关系图)处理框架.可以进行并行的图计算.与Spark Streaming和Spark SQL类似,GraphX也扩展了Spark的RDD API,能用来创建一个顶点和边都包括任意属性的有向图.GraphX还支持对图的各种操作,比如进行图分割的subgraph和操作所有顶点的mapVertices,以及一些常用的图算法,如PageRank和三角计算等.由于RDD是可读的,因此GraphX不适合需要更新图的场景.
Spark构成的更多相关文章
- Spark踩坑记——Spark Streaming+Kafka
[TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...
- Spark RDD 核心总结
摘要: 1.RDD的五大属性 1.1 partitions(分区) 1.2 partitioner(分区方法) 1.3 dependencies(依赖关系) 1.4 compute(获取分区迭代列表) ...
- spark处理大规模语料库统计词汇
最近迷上了spark,写一个专门处理语料库生成词库的项目拿来练练手, github地址:https://github.com/LiuRoy/spark_splitter.代码实现参考wordmaker ...
- Hive on Spark安装配置详解(都是坑啊)
个人主页:http://www.linbingdong.com 简书地址:http://www.jianshu.com/p/a7f75b868568 简介 本文主要记录如何安装配置Hive on Sp ...
- Spark踩坑记——数据库(Hbase+Mysql)
[TOC] 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库,去统计或者改变一些值.最近一个实时消费者处理任务,在使用spark streami ...
- Spark踩坑记——初试
[TOC] Spark简介 整体认识 Apache Spark是一个围绕速度.易用性和复杂分析构建的大数据处理框架.最初在2009年由加州大学伯克利分校的AMPLab开发,并于2010年成为Apach ...
- Spark读写Hbase的二种方式对比
作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 一.传统方式 这种方式就是常用的TableInputFormat和TableOutputForm ...
- (资源整理)带你入门Spark
一.Spark简介: 以下是百度百科对Spark的介绍: Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark 在某些工作负载方 ...
- Spark的StandAlone模式原理和安装、Spark-on-YARN的理解
Spark是一个内存迭代式运算框架,通过RDD来描述数据从哪里来,数据用那个算子计算,计算完的数据保存到哪里,RDD之间的依赖关系.他只是一个运算框架,和storm一样只做运算,不做存储. Spark ...
- (一)Spark简介-Java&Python版Spark
Spark简介 视频教程: 1.优酷 2.YouTube 简介: Spark是加州大学伯克利分校AMP实验室,开发的通用内存并行计算框架.Spark在2013年6月进入Apache成为孵化项目,8个月 ...
随机推荐
- NLTK和Stanford NLP两个工具的安装配置
这里安装的是两个自然语言处理工具,NLTK和Stanford NLP. 声明:笔者操作系统是Windows10,理论上Windows都可以: 版本号:NLTK 3.2 Stanford NLP 3.6 ...
- jquery怎么根据后台传过来的值动态设置下拉框、单选框选中
$(function(){ var sex=$("#sex").val(); var marriageStatus=$("#marriageStatus").v ...
- 五)Spring + Quartz 复杂业务的两个问题:获取Spring上下文 和 自动注入服务类
配置如下: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http:// ...
- Task的运行原理和工作窃取(work stealing)
在net4.0以前,当调用ThreadPool.QueueUserWorkItem方法往线程池中插入作业时,会把作业内容(其实就是一个委托)放到线程池中的一个全局队列中,然后线程池中的线程按照先进先出 ...
- POJ1087 A Plug for UNIX 2017-02-12 13:38 40人阅读 评论(0) 收藏
A Plug for UNIX Description You are in charge of setting up the press room for the inaugural meeting ...
- 深入jetty的使用详解
简介: Jetty 是一个用 Java 实现.开源.基于标准的,并且具有丰富功能的 Http 服务器和 Web 容器,可以免费的用于商业行为.Jetty 这个项目成立于 1995 年,现在已经有非常多 ...
- Babel 是干什么的
首先babel是干什么的?Babel是一个广泛使用的转码器,可以将ES6代码转为ES5代码,从而在现有环境执行. babel就是为了支持原有的旧的环境. 一.配置文件.babelrc Babel的配置 ...
- C# 实用小类
/// <summary> /// 汉字转换拼音 /// </summary> /// <param name="PinYin"></pa ...
- jQuery-关于Ajax请求async属性的说明及总结
在jquery的ajax中如果希望实现同步或者异步,我们可以设置async(默认true,表示异步请求),下面举例说明两种请求方式的区别. 1.后台代码 public JsonResult GetDa ...
- java随笔——HashMap与红黑树
前言: hashmap是一种很常用的数据结构,其使用方便快捷,接下来笔者将给大家深入解析这个数据结构,让大家能在用的时候知其然,也知其所以然. 一.Map 首先,从最基本的讲起,我们先来认识一下map ...