array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 初识Spark之 基本概念 - 爱码网

概述

Spark是一个基于内存的用于处理、分析大数据的集群计算框架。

Spark组件

初识Spark之 基本概念
以上为Spark软件栈图

Spark项目包括多个紧密集成的组件,紧密集成的优点则体现在:
- 如果Spark底层优化了,基于Spark底层的组件也将得到相应优化
- 节省了各个组件组合使用时的部署、测试等时间
- 向Spark增加新组件时,其它组件都可立刻享用

Spark Core:
是Spark生态系统的基础,为其它的高级组件提供底层服务。
实现了任务调度、内存管理、容错机制等Spark项目中的基本功能,提供了创建和操作RDD的多个API

Saprk SQL:
是Spark处理结构化数据的库,就像Hive SQL,Mysql一样
应用场景:企业中用来做报表统计

Spark Streaming:
是实时数据流处理组件,类似Storm,Spark Streaming提供了API来操作实时流数据
应用场景:企业中用来从Kafka(或其他的消息队列中)接收数据做实时统计

MLlib:
一个包含通用机器学习功能的包,Machine learning lib包含分类,聚类,回归等,还包括模型评估,和数据导入
MLlib提供上面的这些方法,都支持集群上的横向扩展(在机器学习领域,较于Python的单机和处理数据量的有限性,MLlib能够集群处理 )
应用场景:机器学习

Graphx:
是处理图的库(例如,社交网络图),并进行图的并行计算
像Spark Streaming,Spark SQL一样,它也继承了RDD API
它提供了各种图的操作,和常用的图算法,例如PangeRank算法
应用场景:图计算

Cluster Managers:
就是集群管理,Spark自带一个集群管理是单独调度器
常见集群管理包括Hadoop YARN,Apache Mesos

主要特点(与Hadoop比较)

  • 使用方便
    Spark提供了比MapReduce更简单的编程模型
    Hadoop MapReduce只有两个操作符,map和reduce。要求任何问题都必须能够分解为一系列的map作业和reduce作业,但并有些算法难以只用这两个操作符来描述
    Spark则提供了丰富的API,有80多个用于处理数据的操作符,处理复杂数据则更简单
  • 快速
    Spark比Hadoop处理数据更快速的原因主要在两方面:
    1、Spark允许应用程序利用内存缓存数据,因此使用Spark实现的同样的应用程序只需要从硬盘读取一次数据即可;而Hadoop需要反复从硬盘读取、写入数据,当数据量巨大时,这样带来的I/O延迟是十分之大的
    2、拥有更先进的作业执行引擎。例如Spark花在磁盘I/O和数据shuffle操作的时间更少(数据的shuffle操作通常会涉及网络间的数据传输,会增加应用程序的执行时间)
  • 通用
    为各种类型的数据处理作业提供一个统一的集成平台。因此可以使用单一的Spark框架,创建一个包含多个不同类型任务的数据处理流水线,而不用学习不同的框架或者部署单独的集群。Spark自带了一系列的库,用于批处理、交互分析、流处理、机器学习、图计算等。越来越多流行的应用和库开始集成到Spark中或添加了对Spark的支持,这说明Spark在未来将更加强大。
  • 可扩展
    Spark集群的数据处理能力可以通过增加更多集群节点的方式得以提升,并且这个特性对于应用程序来说是透明的,往Spark集群扩展节点时,无须改动任何代码。
  • 容错
    Spark能自动处理集群中的节点故障,这样应用程序开发者无须在开发过程中处理这些异常。

Spark总体架构

初识Spark之 基本概念

  • 工作节点-worker:为Spark应用提供CPU、内存和存储资源,把Spark应用当成分布式进程在集群节点上执行

  • 集群管理员-cluster manager:控制整个集群,管理集群中worker节点的计算资源,Spark目前支持三种集群管理员,分别为单独模式、Mesos模式、YARN模式

  • 驱动程序-Driver Program:提供数据处理的代码,Spark将在worker节点上执行这些代码。包含程序的main()方法,RDD的定义和操作,管理Executor

  • 执行者-Executor:Spark应用程序运行在worker节点上的一个进程,可以利用多线程的放并发执行应用代码,并且负责将数据存到内存或磁盘上

  • 任务-task:是运行Spark应用程序的基本单位,Spark为每一个数据分区创建一个任务,一个执行者可以并发执行一个或多个任务。任务数量由分区数量决定

术语

  • shuffle操作
    在集群节点上对数据进行重新分配,此分配并不是随机的,而是按照某些标准将数据分成不同的集合,每个集合就是一个新的分区。也就是把一组无规则的数据尽量转换成一组具有一定规则的数据(洗牌的逆操作)

  • 作业-Job
    是一系列计算的集合,本质上就是在Spark集群上运行数据处理算法。一个应用程序可以发起多个Job

  • 阶段-Stage
    每个Job会被拆分成多组Task, 一组Task称为一个Stage。Stage的边界就是发生shuffle的地方,将task规整到不同的阶段。

我们可以描述一个Spark应用在集群节点上并行处理数据的过程。当一个Spark应用开始运行的时候,Spark会连接Cluster Manager,获取在worker Node上的Executor资源。Spark把一个数据处理算法当成一个Job提交,然后把这个Job分解成由若干Stage构成的DAG。并在Executor上调度运行这些Stage,调度操作由Cluster Manager提供的底层调度器实现。Executor即可并行地运行Spark提交的任务

数据源

Spark作为一个计算框架,并没有存储系统,但是它可以搭配外部存储系统使用,一般会选择搭配能够存储大量数据的分布式存储系统使用。任何Hadoop支持的数据源都可以被Spark Core使用,例如HDFS、HBase、Cassandra等。Spark应用程序也可以读写本地文件系统上的数据并在单机上处理,这个特性对于Spark的学习有着重大意义。

以上,为Mohammed Guller的《Big Data Analytics with Saprk》一书的学习笔记

相关文章: