2、spark概述

2.1 什么是spark
  • Apache Spark™ is a unified analytics engine for large-scale data processing.

  • apache的spark是一个针对于大规模数据处理的统一分析引擎

    spark是基于内存的计算框架,计算速度非常快,但是这里仅仅只涉及到数据的计算,并没有涉及到数据的存储。
    后期需要进行数据的计算,这里就可以对接不同的外部数据源(比如hdfs)
2.2 为什么要学习spark
  • 就是由于spark的处理速度比mapreduce要快很多,后期很受企业青睐。

####3、spark的四大特性

3.1、速度快
  • spark比mapreduce在内存中快100倍,比mapreduce在磁盘中快10倍

  • spark比mapreduce快很多的主要的2个原因:

    (1)mapreduce在处理任务的时候,每一个job的输出结果都会落地到磁盘,后续有其他的job需要依赖于前面job的输出结果,这个时候只能够从磁盘中加载得到,需要大量的磁盘io操作;
    spark在处理任务的时候,每一个job的输出结果可以保存在内存中,后续有其他的job需要依赖于前面job的输出结果,这个时候就可以直接从内存获取得到,大大减少磁盘io操作,最后性能肯定是大大的提升。 例如:hivesql---> select name,age from (select * from user where age >30);
                          job2<-------------------job1
                            map 0%   reduce 0%
                            map 10%   reduce 0%
                           
    (2) mapreduce任务是以进程的方式运行在yarn集群中。比如说一个mapreduce任务中有100个MapTask,
    后期要处理这100个MapTask就需要开启100个进程;
      spark任务是以线程的方式运行在spark集群中进程里面,比如说一个spark任务有100个MapTask,
      这个时候可以极端一点,只需要启动一个进程,在一个进程中运行100个线程中就可以,进程的启动与线程的启动代价肯定是不一样,一个进程的启动需要的调度时间和资源远远大于一个线程。
3.2、易用性
  • 可以快速写一个spark应用程序,通过java、scala、python、R、sql等不同的语言进行代码开发。

3.3、通用性
  • spark框架不再是一个简单的框架,它发展成一个生态系统

    • 就包括了sparksql、sparkStreaming、Mlib、Graphx不同的子项目

    • 后期按照公司当前的业务需求就可以灵活的使用到这些不同的子项目

    • 一站式解决所有应用场景

      • 离线

      • 实时

      • 机器学习算法库

      • 图计算、图挖掘

3.4、兼容性
  • spark任务就是一个计算程序,哪里可以给当前这个任务提供计算资源,我们就可以把这个任务提交到哪里去运行。

    • standAlone

      • 它是spark集群自带的模式,整个任务的资源分配由Master老大去负责

    • yarn

      • 可以把spark程序提交到yarn中运行,整个任务的资源分配由ResourceManager负责

    • mesos

      • 它是一个apache开源的类似于yarn的资源调度平台

MapReduce的缺点:

(1)计算过程较慢,不适应交互式计算,不适应迭代计算;

(2)不是所有的计算都由map和reduce两个阶段构成。

  Spark解决了以上问题:

(1)内存存储中间结果;

(2)提供了更好的API --> 函数式。

Spark和Hadoop的异同:

 

Hadoop

Spark

类型

基础平台, 包含计算, 存储, 调度

分布式计算工具

场景

大规模数据集上的批处理

迭代计算, 交互式计算, 流计算

延迟

易用性

API 较为底层, 算法适应性差

API 较为顶层, 方便使用

价格

对机器要求低, 便宜

对内存有要求, 相对较贵

小结:

  • Spark 提供了 批处理(RDDs), 结构化查询(DataFrame), 流计算(SparkStreaming), 机器学习(MLlib), 图计算(GraphX) 等组件

  • 这些组件均是依托于通用的计算引擎 RDDs 而构建出的, 所以 spark-core 的 RDDs 是整个 Spark 的基础

Spark 集群结构:

Spark 自身是没有集群管理工具的, 但是如果想要管理数以千计台机器的集群, 没有一个集群管理工具还不太现实, 所以 Spark 可以借助外部的集群工具来进行管理

整个流程就是使用 Spark 的 Client 提交任务, 找到集群管理工具申请资源, 后将计算任务分发到集群中运行:

名词解释:(对照上图)

  • Driver

    该进程调用 Spark 程序的 main 方法, 并且启动 SparkContext

  • Cluster Manager

    该进程负责和外部集群工具打交道, 申请或释放集群资源

  • Worker

    该进程是一个守护进程, 负责启动和管理 Executor

  • Executor

    该进程是一个JVM虚拟机, 负责运行 Spark Task

运行一个 Spark 程序大致经历如下几个步骤

  1. 启动 Drive, 创建 SparkContext

  2. Client 提交程序给 Drive, Drive 向 Cluster Manager 申请集群资源

  3. 资源申请完毕, 在 Worker 中启动 Executor

  4. Driver 将程序转化为 Tasks, 分发给 Executor 执行

问题一: Spark 程序可以运行在什么地方?

 
  • 集群: 一组协同工作的计算机, 通常表现的好像是一台计算机一样, 所运行的任务由软件来控制和调度

  • 集群管理工具: 调度任务到集群的软件

  • 常见的集群管理工具: Hadoop Yarn, Apache Mesos, Kubernetes

Spark 可以将任务运行在两种模式下:

  • 单机, 使用线程模拟并行来运行程序

  • 集群, 使用集群管理器来和不同类型的集群交互, 将任务运行在集群中

Spark 可以使用的集群管理工具有:

  • Spark Standalone

  • Hadoop Yarn

  • Apache Mesos

  • Kubernetes

问题二: Driver 和 Worker 什么时候被启动?

  • Standalone 集群中, 分为两个角色: Master 和 Slave, 而 Slave 就是 Worker, 所以在 Standalone 集群中, 启动之初就会创建固定数量的 Worker

  • Driver 的启动分为两种模式: Client 和 Cluster. 在 Client 模式下, Driver 运行在 Client 端, 在 Client 启动的时候被启动. 在 Cluster 模式下, Driver 运行在某个 Worker 中, 随着应用的提交而启动

  • 在 Yarn 集群模式下, 也依然分为 Client 模式和 Cluster 模式, 较新的版本中已经逐渐在废弃 Client 模式了, 所以上图所示为 Cluster 模式

  • 如果要在 Yarn 中运行 Spark 程序, 首先会和 RM 交互, 开启 ApplicationMaster, 其中运行了 Driver, Driver创建基础环境后, 会由 RM 提供对应的容器, 运行 Executor, Executor会反向向 Driver 反向注册自己, 并申请 Tasks 执行

  • 在后续的 Spark 任务调度部分, 会更详细介绍

总结
  • Master 负责总控, 调度, 管理和协调 Worker, 保留资源状况等

  • Slave 对应 Worker 节点, 用于启动 Executor 执行 Tasks, 定期向 Master汇报

  • Driver 运行在 Client 或者 Slave(Worker) 中, 默认运行在 Slave(Worker) 中

==========================================

Spark入门

一、 课程目标

目标1:熟悉Spark相关概念

目标2:搭建一个Spark集群

目标3:编写简单的Spark应用程序

二、 Spark概述

2.1什么是Spark(官网:http://spark.apache.org

Spark是一种快速、通用、可扩展的大数据分析引擎,2009年诞生于加州大学伯克利分校AMPLab,2010年开源,2013年6月成为Apache孵化项目,2014年2月成为Apache顶级项目。目前,Spark生态系统已经发展成为一个包含多个子项目的集合,其中包含SparkSQL、Spark Streaming、GraphX、MLlib等子项目,Spark是基于内存计算的大数据并行计算框架。Spark基于内存计算,提高了在大数据环境下数据处理的实时性,同时保证了高容错性和高可伸缩性,允许用户将Spark部署在大量廉价硬件之上,形成集群。Spark得到了众多大数据公司的支持,这些公司包括Hortonworks、IBM、Intel、Cloudera、MapR、Pivotal、百度、阿里、

腾讯、京东、携程、优酷土豆。当前百度的Spark已应用于凤巢、大搜索、直达号、百度大数据等业务;阿里利用GraphX构建了大规模的图计算和图挖掘系统,实现了很多生产系统的推荐算法;腾讯Spark集群达到8000台的规模,是当前已知的世界上最大的Spark集群。

2.2为什么要学Spark

Spark是一个开源的类似于Hadoop MapReduce的通用的并行计算框架,Spark基于map reduce算法实现的分布式计算,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Spark中的Job中间输出和结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的map reduce的算法。

Spark是MapReduce的替代方案,而且兼容HDFS、Hive,可融入Hadoop的生态系统,以弥补MapReduce的不足。

2.3 Spark特点

2.3.1 快

与Hadoop的MapReduce相比,Spark基于内存的运算要快100倍以上,基于硬盘的运算也要快10倍以上。Spark实现了高效的DAG执行引擎,可以通过基于内存来高效处理数据流。

2.3.2 易用

Spark支持Java、Python和Scala的API,还支持超过80种高级算法,使用户可以快速构建不同的应用。而且Spark支持交互式的Python和Scala的shell,可以非常方便地在这些shell中使用Spark集群来验证解决问题的方法。

2.3.3 通用

Spark提供了统一的解决方案。Spark可以用于批处理、交互式查询(Spark SQL)、实时流处理(Spark Streaming)、机器学习(Spark MLlib)和图计算(GraphX)。这些不同类型的处理都可以在同一个应用中无缝使用。Spark统一的解决方案非常具有吸引力,毕竟任何公司都想用统一的平台去处理遇到的问题,减少开发和维护的人力成本和部署平台的物力成本。

2.3.4 兼容性

Spark可以非常方便地与其他的开源产品进行融合。比如,Spark可以使用Hadoop的YARN和Apache Mesos作为它的资源管理和调度器,器,并且可以处理所有Hadoop支持的数据,包括HDFS、HBase和Cassandra等。这对于已经部署Hadoop集群的用户特别重要,因为不需要做任何数据迁移就可以使用Spark的强大处理能力。Spark也可以不依赖于第三方的资源管理和调度器,它实现了Standalone作为其内置的资源管理和调度框架,这样进一步降低了Spark的使用门槛,使得所有人都可以非常容易地部署和使用Spark。此外,Spark还提供了在EC2上部署Standalone的Spark集群的工具。

Spark入门:第1节 Spark概述:1 - 4的更多相关文章

  1. Spark入门(七)--Spark的intersection、subtract、union和distinc

    Spark的intersection intersection顾名思义,他是指交叉的.当两个RDD进行intersection后,将保留两者共有的.因此对于RDD1.intersection(RDD2 ...

  2. Spark入门(六)--Spark的combineByKey、sortBykey

    spark的combineByKey combineByKey的特点 combineByKey的强大之处,在于提供了三个函数操作来操作一个函数.第一个函数,是对元数据处理,从而获得一个键值对.第二个函 ...

  3. Spark入门实战系列--2.Spark编译与部署(上)--基础环境搭建

    [注] 1.该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取: 2.Spark编译与部署将以CentOS 64位操作系统为基础,主要是考虑到实际应用 ...

  4. Spark入门实战系列--3.Spark编程模型(上)--编程模型及SparkShell实战

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .Spark编程模型 1.1 术语定义 l应用程序(Application): 基于Spar ...

  5. Spark入门实战系列--3.Spark编程模型(下)--IDEA搭建及实战

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 . 安装IntelliJ IDEA IDEA 全称 IntelliJ IDEA,是java语 ...

  6. Spark入门实战系列--7.Spark Streaming(上)--实时流计算Spark Streaming原理介绍

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .Spark Streaming简介 1.1 概述 Spark Streaming 是Spa ...

  7. Spark入门实战系列--1.Spark及其生态圈简介

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .简介 1.1 Spark简介 年6月进入Apache成为孵化项目,8个月后成为Apache ...

  8. Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .编译Hadooop 1.1 搭建环境 1.1.1 安装并设置maven 1. 下载mave ...

  9. Spark入门实战系列--2.Spark编译与部署(下)--Spark编译安装

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .编译Spark .时间不一样,SBT是白天编译,Maven是深夜进行的,获取依赖包速度不同 ...

  10. Spark入门实战系列--4.Spark运行架构

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 1. Spark运行架构 1.1 术语定义 lApplication:Spark Appli ...

随机推荐

  1. JDK动态代理+反射实现动态修改注解属性值

    这是最近朋友的一个需求,正好闲来无聊有些时间,跟着研究一下,如有不正确的地方,欢迎大家指正~ 一.准备自定义注解 注:如何实现自定义注解,请移步百度. 二.实现 1.实现方式1:通过反射+动态代理动态 ...

  2. h5页面调用相机功能

    //accept:表示要打开的文件类型 capture:表示可以捕获到系统默认的设备 <input type="file" accept="image/*" ...

  3. Java日期时间API系列13-----Jdk8中java.time包中的新的日期时间API类,时间类转换,Date转LocalDateTime,LocalDateTime转Date等

    从前面的系列博客中可以看出Jdk8中java.time包中的新的日期时间API类设计的很好,但Date由于使用仍非常广泛,这就涉及到Date转LocalDateTime,LocalDateTime转D ...

  4. 一周搞定模拟电路P2_二极管介绍_记录

    1 稳压二极管 1.1 稳压二极管伏安特性曲线 ΔIz 这一段为能够达到比较好的稳压效果的稳压电流. 1.2 两种连接方法的比较 2 整流二极管 2.1 特点 用于把交流电变成脉动直流电 3 开关二极 ...

  5. 10,html全局属性有哪些

    10,html全局属性(global attribute,html属性赋予元素意义和语境,html全局属性可以用于任何的html元素)有哪些 class:为元素设置类标识 data-*:为元素增加自定 ...

  6. 【C语言】输入一个正整数,判断其是否为素数

    素数的定义: 素数(prime number)又称质数,有无限个. 素数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数,这样的数称为素数.代码1: #include<stdio.h& ...

  7. Python爬虫教程:requests模拟登陆github

    1. Cookie 介绍 HTTP 协议是无状态的.因此,若不借助其他手段,远程的服务器就无法知道以前和客户端做了哪些通信.Cookie 就是「其他手段」之一. Cookie 一个典型的应用场景,就是 ...

  8. 计算机基础,Python - Map和Reduce

    例子1. python中实现hashable def __hash__(self): hashes = map(hash, self.components) return functools.redu ...

  9. Servlet的基本使用

    1.pom.xml导入包 <dependency> <groupId>javax.servlet</groupId> <artifactId>javax ...

  10. WORKDIR 指定工作目录 每一个 RUN 都是启动一个容器、执行命令、然后提交存储层文件变更

    WORKDIR 指定工作目录 格式为 WORKDIR <工作目录路径>. 使用 WORKDIR 指令可以来指定工作目录(或者称为当前目录),以后各层的当前目录就被改为指定的目录,如该目录不 ...