设为首页 加入收藏

TOP

Spark入门梳理1
2019-05-15 01:07:12 】 浏览:165
Tags:Spark 入门 梳理

一、Spark设计与原理

1.1 Spark简介

Spark最初由美国加州伯克利大学(UCBerkeley)的AMP(Algorithms, Machines and People)实验室于2009年开发,是基于内存计算的大数据并行计算框架,可用于构建大型的、低延迟的数据分析应用程序。
目前以被公认为开源中大数据处理平台的领先者

1.2 Spark生态系统


上图为 BDAS架构 ,从图中可以观察到,spark关注与数据层面的处理,而数据的存储还是要借助于Hadoop分布式文件系统HDFS、Amazon S3等来实现的。所以spark很好的与hadoop系统兼容
Spark的生态系统主要包含了Spark Core、Spark SQL、Spark Streaming、MLLib和GraphX 等组件,各个组件的具体功能如下:

  • Spark Core:Spark Core包含Spark的基本功能,如内存计算、任务调度、部署模式、故障恢复、存储管理等。Spark建立在统一的抽象RDD之上,使其可以以基本一致的方式应对不同的大数据处理场景;通常所说的Apache Spark,就是指Spark Core;
  • Spark SQL:Spark SQL允许开发人员直接处理RDD,同时也可查询Hive、HBase等外部数据源。Spark SQL的一个重要特点是其能够统一处理关系表和RDD,使得开发人员可以轻松地使用SQL命令进行查询,并进行更复杂的数据分析;
  • Spark Streaming:Spark Streaming支持高吞吐量、可容错处理的实时流数据处理,其核心思路是将流式计算分解成一系列短小的批处理作业。Spark Streaming支持多种数据输入源,如Kafka、Flume和TCP套接字等;
  • MLlib(机器学习):MLlib提供了常用机器学习算法的实现,包括聚类、分类、回归、协同过滤等,降低了机器学习的门槛,开发人员只要具备一定的理论知识就能进行机器学习的工作;
  • GraphX(图计算):GraphX是Spark中用于图计算的API,可认为是Pregel在Spark上的重写及优化,Graphx性能良好,拥有丰富的功能和运算符,能在海量数据上自如地运行复杂的图算法。

1.3 Spark运行架构

1.3.1 基本概念

在具体讲解Spark运行架构之前,需要先了解几个重要的概念:

  • RDD:是弹性分布式数据集(Resilient Distributed Dataset)的简称,是分布式内存的一个抽象概念,提供了一种高度受限的共享内存模型;
  • DAG:是Directed Acyclic Graph(有向无环图)的简称,反映RDD之间的依赖关系;
  • Executor:是运行在工作节点(Worker Node)上的一个进程,负责运行任务,并为应用程序存储数据;
  • 应用:用户编写的Spark应用程序;
  • 任务:运行在Executor上的工作单元;
  • 作业:一个作业包含多个RDD及作用于相应RDD上的各种操作;
  • 阶段:是作业的基本调度单位,一个作业会分为多组任务,每组任务被称为“阶段”,或者也被称为“任务集”。

1.3.2 架构设计

如下图所示,Spark运行架构包括集群资源管理器(Cluster Manager)、运行作业任务的工作节点(Worker Node)、每个应用的任务控制节点(Driver)和每个工作节点上负责具体任务的执行进程(Executor)。其中,集群资源管理器可以是Spark自带的资源管理器,也可以是YARN或Mesos等资源管理框架。

如下图所示,在Spark中,一个应用(Application)由一个任务控制节点(Driver)和若干个作业(Job)构成,一个作业由多个阶段(Stage)构成,一个阶段由多个任务(Task)组成。当执行一个应用时,任务控制节点会向集群管理器(Cluster Manager)申请资源,启动Executor,并向Executor发送应用程序代码和文件,然后在Executor上执行任务,运行结束后,执行结果会返回给任务控制节点,或者写到HDFS或者其他数据库中。

1.4 RDD的设计与运行原理

1.4.1 RDD概念

RDD(Resilient Distributed Datasets),弹性分布式数据集,是分布式内存的一个抽象概念,RDD提供了一种高度受限的共享内存模型,即RDD是只读的记录分区的集合,只能通过在其他RDD执行确定的转换操作(如map、join和group by)而创建,然而这些限制使得实现容错的开销很低。
Spark的核心是建立在统一的抽象RDD之上,使得Spark的各个组件可以无缝进行集成,在同一个应用程序中完成大数据计算任务。
简述:用Python的语言来描述,我把RDD看成是一个object,我们读取文件,文件计算,结果集获取都是RDD,不同的数据结构、数据之间的关系,甚至python中字典类型的数据也就是数据库中的key-value的map数据,都可以看成是一个RDD,它的关键在于它是一个分布式对象集合

了解原理请参考 参考链接

1.5 Spark的部署模式

Spark支持的三种经典集群部署方式,即standalone、Spark on Mesos和Spark on YARN

  • Spark应用程序在集群上部署运行时,可以由不同的组件为其提供资源管理调度服务(资源包括CPU、内存等)。比如,可以使用自带的独立集群管理器(standalone),或者使用YARN,也可以使用Mesos。因此,Spark包括三种不同类型的集群部署方式,包括standalone、Spark on Mesos和Spark on YARN。

1.5.1 standalone模式

与MapReduce1.0框架类似,Spark框架本身也自带了完整的资源调度管理服务,可以独立部署到一个集群中,而不需要依赖其他系统来为其提供资源管理调度服务。在架构的设计上,Spark与MapReduce1.0完全一致,都是由一个Master和若干个Slave构成,并且以槽(slot)作为资源分配单位。不同的是,Spark中的槽不再像MapReduce1.0那样分为Map 槽和Reduce槽,而是只设计了统一的一种槽提供给各种任务来使用。

1.5.2 Spark on Mesos模式

Mesos是一种资源调度管理框架,可以为运行在它上面的Spark提供服务。Spark on Mesos模式中,Spark程序所需要的各种资源,都由Mesos负责调度。由于Mesos和Spark存在一定的血缘关系,因此,Spark这个框架在进行设计开发的时候,就充分考虑到了对Mesos的充分支持,因此,相对而言,Spark运行在Mesos上,要比运行在YARN上更加灵活、自然。目前,Spark官方推荐采用这种模式,所以,许多公司在实际应用中也采用该模式。

1.5.3 Spark on YARN模式

Spark可运行于YARN之上,与Hadoop进行统一部署,即“Spark on YARN”,其架构如图9-13所示,资源管理和调度依赖YARN,分布式存储则依赖HDFS。

二、Spark的安装与使用

2.1 准备步骤

2.1.1 安装JDK

  • 访问oracle官网,点击此处 挑选适合自己电脑的版本 下载JDK

Windows:

  1. 双击下载的exe文件进行安装,之后选择你的安装路径
  2. 右击我的电脑 ==> 属性 ==> 高级系统设置 ==> 高级 ==> 环境变量
  3. 参考

Linux(Ubuntu):

  1. 进入到下载完成的tar.gz文件的目录,执行 tar -zxvf jdk****.tar.gz
  2. 之后会在当前目录生成一个同名文件夹的JDK目录
  3. vim ~/.bashrc
  4. 新增一行:export JAVA_HOME=JDK安装路径
  5. source ~/.bashrc
  6. 之后若是执行 java -version正确显示java版本则安装成功

2.1.2 Hadoop安装

此处只对hadoop单机版进行讲解,个人学习与简单使用,单机版即可达到效果,如需分布式部署请参考 参考链接

  • 和JDK一样 解压tar.gz
  • vim /etc/profile
    export HADOOP_HOME=/hadoop/hadoop
    export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
    
  • source /etc/profile
  • ./bin/hadoop version
  • 如果没有报错则证明hadoop安装成功

2.2 Spark安装

访问官网 下载 自己对应的spark版本
由于我们已经自己安装了Hadoop,所以,在“Choose a package type”后面需要选择“Pre-build with user-provided Hadoop [can use with most Hadoop distributions]”,然后,点击“Download Spark”后面的“spark-2.1.0-bin-without-hadoop.tgz”下载即可。下载的文件,默认会被浏览器保存在“/home/hadoop/下载”目录下。需要说明的是,Pre-build with user-provided Hadoop: 属于“Hadoop free”版,这样,下载到的Spark,可应用到任意Hadoop 版本。

  • 下载之后照常解压
  • sudo mv ./spark****** /spark
    cd /spark
    cp ./conf/spark-env.sh.template ./conf/spark-env.sh
    
  • 编辑第一行并添加以下配置:
    export SPARK_DIST_CLASSPATH=$(此处是你hadoop具体位置/hadoop/bin/hadoop classpath)
    

有了上面的配置信息以后,Spark就可以把数据存储到Hadoop分布式文件系统HDFS中,也可以从HDFS中读取数据。如果没有配置上面信息,Spark就只能读写本地数据,无法读写HDFS数据。

  • vim /etc/profile
    在.bashrc文件中添加如下内容
    export JAVA_HOME=/usr/lib/jvm/default-java
    export HADOOP_HOME=/usr/local/hadoop
    export SPARK_HOME=/usr/local/spark
    export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/lib/py4j-0.10.4-src.zip:$PYTHONPATH
    export PYSPARK_PYTHON=python3
    export PATH=$HADOOP_HOME/bin:$SPARK_HOME/bin:$PATH
    
  • 之后执行 source ~/.bashrc使配置立即生效
  • ./bin/run-example SparkPi之后运行这条命令,如果有一堆信息输出而且没有报错,就证明安装成功了

2.3 第一个Spark应用

参考链接: 大数据之Spark入门教程(Python版)


Spark入门梳理1 https://www.cppentry.com/bencandy.php?fid=116&id=224172

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇        .. 下一篇Spark安装与配置