第五:Spark启动!

一.什么是Spark

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

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

二. Spark的特点 

运行速度快

易于使用

通用性强

适用环境广

1.速度快

由于Apache Spark支持内存计算,并且通过DAG(有向无环图)执行引擎支持无环数据流,所以官方宣称其在内存中的运算速度要比Hadoop的MapReduce快100倍,在硬盘中要快10倍。Spark使用最先进的DAG调度器、查询优化器和物理执行引擎,实现了高性能的批处理和流处理。

 

2.易于使用

可以使用Java,Scala,Python,R,SQL快速写一个Spark应用。

Spark提供了超过80中操作使它更容易生成平行化的应用。它也可以使用Scala,Python,R,SQL shell 进行交互操作。

 

3.通用性强

Spark 可以与 SQL 、 Streaming 及复杂的分析良好结合。 Spark 还有一系列的高级工具,包括 Spark SQL 、 MLlib (机器学习库)、 GraphX (图计算)和 Spark Streaming (流计算),并且支持在一个应用中同时使用这些组件。
Spark提供了Core、SQL、Streaming、MLlib、GraphX等技术组件,可以一站式地完成大数据领域的离线批处理、SQL交互式查询、流式实时计算,机器学习、图计算等常见的任务。

 

4.适用环境广

Spark支持多种运行方式,包括在Hadoop和Mesos上,也支持Standalone的独立运行模式,同时也可以运行在云Kuberbetes上。对于数据源而言,Spark支持从HDFS、HBase、Cassandra及Kafka等多种途径获取数据。

 

ps:Spark的最大特点:基于内存

二.Spark集群的三种部署模式
Spark有主要有三种部署模式:Spark独立服务器模式、基于YARN的Spark、基于Mesos的Spark

(1)Standalone模式

即独立模式,自带完整的服务,可单独部署到一个集群中,无需依赖其它任何资源管理系统。从一定程度上讲是其它两种模式的基础。借助Spark开发模式,我们可以得到一种开发新型计算框架的一般思路。

Standalone模式运行流程

(2)yarn集群模式

在集群模式下,driver在集群中的某个节点(一般是应用程序的主节点)上运行。客户端首先与资源管理器通信,请求资源并运行Spark作业。资源管理器会分配容器(0号容器)并响应客户端。然后客户端向集群提交代码,并在0号容器内启动driver和Spark应用主节点。driver与Spark应用主节点协同工作,然后在由资源管理器分配的容器上创建executor。
YARN容器可位于由节管理器控制的任何容器上。因此所有的资源分配都由资源管理器负责。
Spark应用主节点与资源管理器进行沟通,以获取其他容器来启动executor。
在YARN集群模式下,没有shell,因为driver本身在YARN内部。

yarn-cluster运行流程

(3)yarn客户端模式

在YARN客户端模式下,driver在集群之外的节点(一般都是客户端节点)上运行。driver首先需要与资源管理器通信,从而请求资源并运行Spark作业。资源管理器会分配容器(0号容器)并响应driver。driver在0号容器中启动Spark应用主节点。Spark应用主节点在资源管理器分配的容器中创建executor。YARN容器可位于集群中由节点管理器控制的任一节点,因此所有的资源分配都由资源管理器负责。Spark应用主节点与资源管理器进行沟通,以获取其他容器来启动executor

yarn-client运行流程

yarn-cluster和yarn-client区别:

(1)SparkContext初始化不同,这也导致了Driver所在位置的不同,YarnCluster的Driver是在集群的某一台NM上,但是Yarn-Client就是在client机器上;

(2)而Driver会和Executors进行通信,这也导致了Yarn_cluster在提交App之后可以关闭Client,而Yarn-Client不可以;

(3)最后再来说应用场景,Yarn-Cluster适合生产环境,Yarn-Client适合交互和调试。

三.Spak 和Hadoop区别
spark是在MapReduce上发展而来,继承了其分布式并行计算的优点并改进了MapReduce明显的缺陷:

1.提高了效率

Spark把中间数据放到内存中,迭代运算效率高。MapReduce中计算结果需要落地,保存到磁盘上,这样势必会影响整体速度,而Spark支持DAG图的分布式并行计算的编程框架,减少了迭代过程中数据的落地,提高了处理效率

2.容错性高

Spark引进了弹性分布式数据集RDD (Resilient Distributed Dataset) 的抽象,它是分布在一组节点中的只读对象集合,这些集合是弹性的,如果数据集一部分丢失,需要进行重建。

相比来说spark更加通用,spark提供了更多的数据集操作类型,处理节点之间通信模型不是向hadoop只采用Shuffle模式,而是采用用户可命名,控制中间结果的存储,分区。

Spark Core

1)提供了有向无环图(DAG)的分布式并行计算框架,并提供Cache机制来支持多次迭代计算或者数据共享,大大减少迭代计算之间读取数据局的开销,这对于需要进行多次迭代的数据挖掘和分析性能有很大提升

2)在Spark中引入了RDD (Resilient Distributed Dataset) 的抽象,它是分布在一组节点中的只读对象集合,这些集合是弹性的,如果数据集一部分丢失,则可以根据“血统”对它们进行重建,保证了数据的高容错性;

 移动计算而非移动数据,RDD Partition可以就近读取分布式文件系统中的数据块到各个节点内存中进行计算,使用多线程池模型来减少task启动开稍

3)采用容错的、高可伸缩性的akka作为通讯框架

Spark Streaming

SparkStreaming是一个对实时数据流进行高通量、容错处理的流式处理系统,可以对多种数据源(如Kdfka、Flume、Twitter、Zero和TCP 套接字)进行类似Map、Reduce和Join等复杂操作,并将结果保存到外部文件系统、数据库或应用到实时仪表盘。

Spark SQL

SparkSQL的前身是Shark,Shark是伯克利实验室Spark生态环境的组件之一,它修改了内存管理、物理计划、执行三个模块,并使之能运行在Spark引擎上,从而使得SQL查询的速度得到10-100倍的提升。Shark过于依赖Hive,它是当时唯一运行在Hadoop上的SQL-on-Hadoop工具。但是MapReduce计算过程中大量的中间磁盘落地过程消耗了大量的I/O,降低运行效率.SparkSQL在数据兼容性、性能优化、组件扩展等方面做了很大提升。

四.结构化数据、非结构化数据和半结构化数据
(1)结构化数据(Structured Data)
         定义:结构化数据也称作行数据,是由二维表结构来逻辑表达和实现的数据,严格地遵循数据格式与长度规范,主要通过关系型数据库进行存储和管理。

结构化数据,简单来说就是数据库。结合到典型场景中更容易理解,比如企业ERP、财务系统;医疗HIS数据库;教育一卡通;政府行政审批;其他核心数据库等。基本包括高速存储应用需求、数据备份需求、数据共享需求以及数据容灾需求。

(2)非结构化数据(Unstructure Data)
       定义:非结构化数据是数据结构不规则或不完整,没有预定义的数据模型,不方便用数据库二维逻辑表来表现的数据。包括所有格式的办公文档、文本、图片、XML, HTML、各类报表、图像和音频/视频信息等等。

非结构化数据其格式非常多样,标准也是多样性的,而且在技术上非结构化信息比结构化信息更难标准化和理解。支持非结构化数据的数据库广泛应用于全文检索和各种多媒体信息处理领域。

(3)半结构化数据(Semi-structured Data)
       定义:所谓半结构化数据,就是介于结构化数据(如关系型数据库、面向对象数据库 中的数据)和非结构的数据(如声音、图像文件等)之间的数据,HTML文档就属于半结构化数据。它一般是自描述的,数据的结构和内容混在一起,没有明显的区分。

五.Spark核心数据集RDD

(1)RDD(Resilient Distributed Datasets弹性分布式数据集),可以简单的把RDD理解成一个提供了许多操作接口的数据集合,和一般数据集不同的是,其实际数据分布存储于一批机器中(内存或磁盘中)。

(2)转换算子和行动算子

 

(3)Spark RDD转换和操作示例

 

(4)宽依赖与窄依赖

RDD之间有一系列的依赖关系,依赖关系又分为窄依赖和宽依赖。

窄依赖 (Narrow Dependency) :表现为一个父RDD 的分区对应于一个子 RDD 的分区或者多个父 RDD 的分区对应于一个子 RDD 的分区。
宽依赖(Shuffle Dependency) :表现为存在一个父RDD 的一个分区对应一个子 RDD 的多个分区。

(5)RDD Stage划分

Stage划分算法原理:Spark任务会根据RDD之间的依赖关系,形成一个DAG有向无环图,DAG会提交给DAGScheduler,DAGScheduler会把DAG划分成互相依赖的多个stage,划分stage的依据就是RDD之间的宽窄依赖。遇到宽依赖就划分stage,每个stage包含一个或多个task任务,然后将这些task以taskSet的形式提交给TaskScheduler运行。

stage切割规则:从后往前,遇到宽依赖就切割stage

Stage概念:由一组并行的task组成

Task:Task是在集群上运行的基本单位。一个Task负责处理RDD的一个partition。RDD的多个patition会分别由不同的Task去处理。这些Task的处理逻辑完全是一致的。这一组Task就组成了一个Stage。

spark部署与安装

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

tar -zxvf / export/ software/ spark-3.0.3-bin-hadoop2.7.tgz

(2)设置环境变量

vim /etc/profile

#SPARK

export SPARK_HOME=/usr/local/soft/spark-3.0.3

export PATH=$PATH:${SPARK_HOME}/bin

export PATH=$PATH:${SPARK_HOME}/sbin

source /etc/profile使环境变量生效

(3)修改配置文件.

cd spark/ conf/

先备份文件cp spark env.sh.template spark env.sh

cp slaves. template slaves

vim spark-env.sh

加一些环境变量:

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

export SCALA_HOME=/usr/local/soft/scala-2.12.12

export JAVA_HOME=/usr/local/soft/jdk1.8.0_202

export SPARK_MASTER_IP=master

export SPARK_WOKER_CORES=2

export SPARK_WOKER_MEMORY=2g

export HADOOP_CONF_DIR=/usr/local/soft/hadoop-3.1.3/etc/hadoop

#export SPARK_MASTER_WEBUI_PORT=8080

#export SPARK_MASTER_PORT=7070

修改从节点ip

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

(4)分发文件

scp -r /usr/local/soft/spark-3.0.3/ slave1:/usr/local/soft/

scp -r /usr/local/soft/spark-3.0.3/ slave2:/usr/local/soft/

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

vim /etc/profile

#SPARK

export SPARK_HOME=/usr/local/soft/spark-3.0.3

export PATH=$PATH:${SPARK_HOME}/binexport               PATH=$PATH:${SPARK_HOME}/sbin

source /etc/profile使环境变量生效

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

查看节点:

Master:

Slave1:

Scala2:

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

Spark-shell

浏览器查看192.168.10.100:8080

Scala部署安装步骤

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

tar -zxvf scala-2.2.12.12.tgz

(2)设置环境变量

vim /etc/profile

#SCALA

export SCALA_HOME=/usr/local/soft/scala-2.12.12

export PATH=$PATH:${SCALA_HOME}/bin

source /etc/profile使环境变量生效

(3)验证scala 启动成功

scala启动成功

  • 17
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Spark 基础环境是指安装和配置 Spark 所需的软件和硬件环境。Spark 运行需要 Java 环境和 Hadoop 环境,同时也需要配置 Spark 的相关参数,如内存大小、CPU 核数等。在安装和配置好基础环境后,我们才能使用 Spark 进行数据处理和分析。 ### 回答2: Spark是一个快速、可扩展且容错的大数据处理框架,提供了丰富的API和工具,可以处理大规模的数据集。 搭建Spark基础环境包括以下几个步骤: 1. 安装Java:Spark是基于Java开发的,因此首先需要安装Java开发环境。可以从Oracle官网下载并安装适合操作系统的Java版本。 2. 下载Spark:在Apache Spark官网下载最新版本的Spark压缩包,并解压到指定目录。 3. 配置环境变量:将Spark的bin目录添加到系统的环境变量中。这样可以方便地在任意位置运行Spark的命令。 4. 配置Spark集群:如果需要在多台机器上运行Spark应用程序,需要进行集群配置。首先,在每台机器上安装好Java,并将Spark解压到相同的目录。然后,编辑Spark的配置文件,设置集群的主节点和从节点。 5. 验证安装:通过在终端运行spark-shell命令,验证Spark是否正确安装。spark-shell命令会启动一个Scala解释器,并连接到Spark集群。 6. 运行第一个Spark应用程序:编写一个简单的Spark应用程序,如WordCount,用于统计文本文件中单词的个数。将程序保存为Scala文件,并使用spark-submit命令来运行。 以上就是搭建Spark基础环境的主要步骤。搭建好Spark环境后,可以使用Spark提供的丰富API和工具来进行大数据处理和分析,如数据清洗、转换、机器学习等。Spark的功能强大且易于使用,适用于各种大规模数据处理场景。 ### 回答3: Spark是一个快速通用的集群计算系统,它提供了高效的数据处理和分析能力。要运行Spark,我们需要配置和搭建一些基础环境。 首先,我们需要安装Java JDK。Spark运行在Java虚拟机上,因此我们需要安装适当版本的Java开发工具包。通常建议使用Oracle JDK的最新稳定版本,然后设置JAVA_HOME环境变量。 其次,我们需要安装Spark本身。Spark官方网站提供了预编译的二进制发行版,我们可以从网站上下载并解压缩到我们喜欢的位置。然后,我们可以设置SPARK_HOME环境变量,以便在终端窗口中使用Spark命令。 接下来,我们需要选择一个合适的集群管理器来运行Spark应用程序,比如Standalone模式、Hadoop YARN和Apache Mesos等。我们需要根据自己的需求进行选择和配置。例如,在Standalone模式下,我们需要启动一个Spark Master和多个Spark Worker来管理和运行任务。 最后,在运行Spark应用程序之前,我们需要通过编写一个Spark应用程序来使用Spark的功能。Spark提供了Java、Scala和Python等多种编程语言的API。我们可以使用任何一种编程语言来编写应用程序并在Spark上运行。 总之,Spark基础环境搭建包括安装Java JDK、安装Spark本身、选择和配置集群管理器,以及编写Spark应用程序。搭建好这些基础环境后,我们就可以开始使用Spark进行快速、高效的集群计算了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值