认识Spark

本文详细介绍了Spark,一种快速、通用的大数据分析计算引擎,涵盖了其概述、内置模板(如SparkCore、SparkSQL、SparkStreaming等)、特点(如快速、易用、通用、随处运行和代码简洁)、以及部署与安装步骤。重点讨论了RDD的概念、依赖关系和Spark的运行过程。
摘要由CSDN通过智能技术生成

目录

第一部分:认识Spark

一.Spark概述

二.Spark内置模板

三.Spark特点

四.Spark部署与安装


第一部分:认识Spark

一.Spark概述

Spark是一种基于内存的快速、通用、可扩展的大数据分析计算引擎。

是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发的通用内存并行计算框架Spark得到了众多大数据公司的支持,这些公司包括Hortonworks、IBM、Intel、Cloudera、MapR、Pivotal、百度、阿里、腾讯、京东、携程、优酷土豆。当前百度的Spark已应用于大搜索、直达号、百度大数据等业务;阿里利用GraphX构建了大规模的图计算和图挖掘系统,实现了很多生产系统的推荐算法;腾讯Spark集群达到8000台的规模,是当前已知的世界上最大的Spark集群。

二.Spark内置模板

(1)Spark Core:实现了Spark的基本功能,包含任务调度、内存管理、错误恢复、与存储系统交互等模块。Spark Core中还包含了对弹性分布式数据集(Resilient Distributed DataSet,简称RDD)的API定义。

(2)Spark SQL:是Spark用来操作结构化数据的程序包。通过Spark SQL,我们可以使用 SQL或者Apache Hive版本的HQL来查询数据。Spark SQL支持多种数据源,比如Hive表、Parquet以及JSON等。

(3)Spark Streaming:是Spark提供的对实时数据进行流式计算的组件。提供了用来操作数据流的API,并且与Spark Core中的 RDD API高度对应。

(4)Spark MLlib:提供常见的机器学习功能的程序库。包括分类、回归、聚类、协同过滤等,还提供了模型评估、数据 导入等额外的支持功能。

(5)Spark GraphX:主要用于图形并行计算和图挖掘系统的组件。

三.Spark特点

1.快速:

逻辑回归算法一般需要多次迭代。分别使用HadoopMapReduce和Spark    运行逻辑回归算法,Spark的运行速度是HdoopMapReduce运行速度的100多倍 。一般情况下,对于迭代次数较多的应用程序,Spark在内存中的运行速度是HadoopMapReduce运行速度的100多倍,Spark在磁盘上的运行速度是HadoopMapReduce运行速度的10多倍。

Spark 与 HadoopMapReduce的运行速度差异较大的原因是,Spark的中间数据存放于内存中,有更高的迭代运算效率,而HadoopMapReduce每次迭代的中间数据存放于HDFS中,涉及硬盘的读写,运算效率相对较低。

2.易用:

Spark 支持使用Scala、Python、Java、R等语言快速编写应用。此外,Spark提供超过80个高阶算子,使得编写并行应用程序变得容易。并且Spark提供Scala、Python和R等语言的交互模式界面,使得Spark编程的学习更加简便。

3.通用:

Spark可以与SQL语句、实时计算及其他复杂的分析计算进行良好的结合。Spark 框架包含多个紧密集成的组件,包括Spark SQL(即席查询)、Spark Streaming(实时流处理)、 Spark MLlib(机器学习库)、Spark GraphX(图计算),并且Spark支持在一个应用中同时使用这些组件。相较于Hadoop的MapReduce框架,Spark无论在性能还是在方案统一性等方面,都有着极大的优势。Spark全栈统一的解决方案非常具有吸引力,可极大地减少平台部署、开发和维护的人力和物力成本。

4.随处运行:

用户可以使用Spark的独立集群模式运行Spark,也可以在亚马逊弹性计算云(Amazon Elastic Compute Cloud, Amazon EC2)、HadoopYARN资源管理器或Apache Mesos上运行 Spark。Spark 作为一个分布式计算框架,本身并没有存储功能但是Spark可以从HDFS、 Cassandra、HBase、Hive、Alluxio(Tachyon)等数据源中读取数据。

5.代码简洁:

Spark 支持使用Scala、Python等语言编写代码。Scala和Python的代码相对Java的代码而言比较简洁,因此,在Spark中一般都使用Scala或Python编写应用程序,这也比在 MapReduce中编写应用程序简单方便。例如,MapReduce实现单词计数可能需要60多行代码,而Spark使用Scala语言实现只需要一行。

四.Spark部署与安装

(1)上传并解压安装Spark安装包

(2)设置环境变量

(3)修改配置文件

加一些环境变量:

修改spark- env.sh文件,加以下内容:

修改从节点ip

vi slaves 修改内容为slave1 slave2(我的子机分别为是slave1 slave2)

(4)分发文件

(5)分别在slave1 slave2上设置环境变量

(6)启动集群:spark目录下:./start-all.sh

查看节点:

Master:

Slave1:

Slave2:

在主节点master上出现Master 在s1上出现Worker在s2上出现Worker

Spark-shell

浏览器查看192.168.10.100:8080

第二部分:扩展

一.核心-RDD

1.设计背景

(1)许多迭代式算法《比如机器学习、图算法等》和交互式数据挖掘工具,共同之处是,不同计算阶段之间会重用中间结果

(2)目前的MapReduce框架都是把中间结果写入到磁盘中,带来大量的数据复制、磁盘Io和序列化开销

(3)RDD就是为了满足这种需求而出现的,它提供了一个抽象的数据结构

(4)我们不必担心底层数据的分布式持性,只需将具体的应用逻辑表达为一系列转换处理

(5)不同RDD之间的转换操作形成依赖关系,可以实现管道化,避免中间数据存储

2.RDD概念

(1)一个RDD就是一个分布式对象集合,本质上是一个只读的分区记录集合,不同节点上进行并行计算

(2)RDD提供了一种高度受限的共享内存模型,RDD是只读的记录分区集合,不能直接修改,只能通过在转换的过程中改

3.RDD特性

(1)高效的容错性

现有容错机制:数据复制或者记录日志RDD具有天生的容错性:血缘关系,重新计算丢失分区,无需回滚系统,重算过程在不同节点之间并行,只记录粗粒度的操作

(2)中间结果持久化到内存,数据在内存中的多个RDD操作直接按进行传递,避免了不必要的读写磁盘开销

(3)存放的数据可以是JAVA对象,避免了不必要的对象序列化和反序列化

4.RDD之间的依赖关系

(1)窄依赖指的是子RDD的一个分区只依赖于某个父RDD中的一个分区。

(2)宽依赖指的是子RDD的每一个分区都依赖于某个父RDD中一个以上的分区。

(3)理解宽、窄依赖的区别,需要先了解父RDD和子RDD。map()、filter()方法上方箭头左边的RDD是父RDD,而右边的RDD是子RDD。union()方法上方箭头左边的两个RDD均为右边RDD的父RDD, union()方法是有两个父RDD 的。

5.RDD运行过程

上述对RDD概念、依赖关系和Stage划分的介绍,结合之前介绍的Spark运行基本流程,再总结一下RDD在Spark架构中的运行过程:

(1)创建RDD对象

(2)SparkContext负责计算RDD之间的依赖关系,构建DAG

(3)DAGScheduler负责把DAG图分解成多个Stage,每个Stage中包含了多个Task,每个Task会被TaskScheduler分发给各个WorkerNode上的Executor去执行。

  • 23
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值