RDD

Spark基本的数据结构叫弹性分布式数据集(Resilient Distributed Datasets,简称RDD).
概念:
一个分布于集群节点的只读数据集合,并以容错的、并行的方式进行维护.
为了解决MapReduce的性能问题,Spark使用RDD作为分布式程序的工作集合,它提供一种分布式共享内存的受限形式.在分布式共享内存系统中,应用可以向全局地址空间的任意位置进行读写操作,而RDD是只读的,对其只能进行创建、转化和求值等操作.
RDD的优势:
可以方便地实现迭代算法,简单地说就是能在一个循环中多次访问数据集合.RDD还适合探索式的数据分析,能够对数据重复执行类似于数据库风格的查询.最为经典的的迭代算法是用于机器学习系统的培训算法.

Spark基本概念

  1. Spark需要一个集群管理器和一个分布式存储系统作为支撑.
  2. 对于集群管理器: 一般用YARN 或 Mesos
    对于分布式存储,Spark可以与多种系统对接. HDFS、MapR文件系统、亚马逊S3,或者一个用户自己实现的文件系统.
  3. Spark支持伪分布式的本地部署模式,通用仅用于开发和测试目的.
  4. 本地模式不要分布式存储,而是用本地文件系统代替.此场景下,Spark运行在一个机器上,每个CPU核是一个执行器(executor).
  5. 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构成的更多相关文章

  1. Spark踩坑记——Spark Streaming+Kafka

    [TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...

  2. Spark RDD 核心总结

    摘要: 1.RDD的五大属性 1.1 partitions(分区) 1.2 partitioner(分区方法) 1.3 dependencies(依赖关系) 1.4 compute(获取分区迭代列表) ...

  3. spark处理大规模语料库统计词汇

    最近迷上了spark,写一个专门处理语料库生成词库的项目拿来练练手, github地址:https://github.com/LiuRoy/spark_splitter.代码实现参考wordmaker ...

  4. Hive on Spark安装配置详解(都是坑啊)

    个人主页:http://www.linbingdong.com 简书地址:http://www.jianshu.com/p/a7f75b868568 简介 本文主要记录如何安装配置Hive on Sp ...

  5. Spark踩坑记——数据库(Hbase+Mysql)

    [TOC] 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库,去统计或者改变一些值.最近一个实时消费者处理任务,在使用spark streami ...

  6. Spark踩坑记——初试

    [TOC] Spark简介 整体认识 Apache Spark是一个围绕速度.易用性和复杂分析构建的大数据处理框架.最初在2009年由加州大学伯克利分校的AMPLab开发,并于2010年成为Apach ...

  7. Spark读写Hbase的二种方式对比

    作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 一.传统方式 这种方式就是常用的TableInputFormat和TableOutputForm ...

  8. (资源整理)带你入门Spark

    一.Spark简介: 以下是百度百科对Spark的介绍: Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark 在某些工作负载方 ...

  9. Spark的StandAlone模式原理和安装、Spark-on-YARN的理解

    Spark是一个内存迭代式运算框架,通过RDD来描述数据从哪里来,数据用那个算子计算,计算完的数据保存到哪里,RDD之间的依赖关系.他只是一个运算框架,和storm一样只做运算,不做存储. Spark ...

  10. (一)Spark简介-Java&Python版Spark

    Spark简介 视频教程: 1.优酷 2.YouTube 简介: Spark是加州大学伯克利分校AMP实验室,开发的通用内存并行计算框架.Spark在2013年6月进入Apache成为孵化项目,8个月 ...

随机推荐

  1. 用Diff和Patch工具维护源码

    在Unix系统下,维护源码版本可以使用很多方法,其中最常用的当然是大名鼎鼎的CVS,但实际上,简单的版本维护工作并没有必要使用复杂的CVS等专门的版本维护工具,Unix标配中的diff和patch工具 ...

  2. Linux汇编与C互相调用

    一.简介 C语言调用汇编有两种方式:1.通过内嵌汇编  2.通过编译链接. 二.基础知识 对于C和汇编语言的接口主要有两个问题需要解决 1.调用者与被调用者的参数传递 正常的,定义一个函数总是希望它完 ...

  3. 设置div中的div居中显示

    设置div中的div居中显示 方法一. <div class='big'> <div class='small'>box1</div> </div> s ...

  4. WEB开发常见错误-php无法操作数据库

    Ubuntu 安装phpmyadmin 和配置   ubuntu 安装 phpmyadmin  两种 : 1: apt-get 安装  然后使用 已有的虚拟主机目录建立软连接  sudo  apt-g ...

  5. iOS's GCD Note

    [iOS's GCD Note] 1.默认有四种全局concureent queue,如下: 通过以下函数来引用: 2.官方文档上并发队列有3种,实际上main就是serial. 1)serial,用 ...

  6. Set List Map

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  7. Map类

    Map类 方法 方法名 返回类型 说明 addLayer(layer, index?) layer 增加一个esri图层到map中,示例: var baseMapLayer = new ArcGIST ...

  8. MySQL性能调优与架构设计——第9章 MySQL数据库Schema设计的性能优化

    第9章 MySQL数据库Schema设计的性能优化 前言: 很多人都认为性能是在通过编写代码(程序代码或者是数据库代码)的过程中优化出来的,其实这是一个非常大的误区.真正影响性能最大的部分是在设计中就 ...

  9. Python + selenium + unittest装饰器 @classmethod

    前言 前面讲到unittest里面setUp可以在每次执行用例前执行,这样有效的减少了代码量,但是有个弊端,比如打开浏览器操作,每次执行用例时候都会重新打开,这样就会浪费很多时间. 于是就想是不是可以 ...

  10. Zabbix部署与使用

    *******需要配置网易YUM源来安装相关依赖包: [local_yum] name=local_yum baseurl=http://mirrors.163.com/centos/6/os/x86 ...