Spark基础理论及安装

一、初始Spark

1、产生背景

       由于mapreduce只适用于离线数据处理(批处理),而不能支持对迭代式,交互式,流式数据的处理,因此,spark就诞生了

                  hive的产生就是为了解决mapreduce的编程复杂的问题

                  spark的产生就是为了解决mapreduce的计算缓慢的问题

 Spark和MapReduce的对比之后的优势:

  1、减少磁盘IO

                        MapReduce:基于磁盘        Spark:基于内存  (尽量把临时数据缓存在内存中)

 2、增加并行度

                      MapReduce: MapTask  ReduceTask  JVM  一个进程一个Task 默认情况下

                      Spark            : ShuffleMapTask   ResultTask   使用的是一个线程执行

3、避免重复计算

                     可以把数据强制的持久化到内存中,以供其他的task使用

4、可选的shuffle和排序

                   可选的shuffle   :            MapReduce:提供的是一种通用的shuffle     combiner partitioner sorter

                                                           Spark:提供四种shuffle策略,分别有对应不同的需求场景 HashShuffle   SortShuffle

                  可选的排序        :   mapreducer如果有Reduce阶段的话,那么sorter的数据排序一定会执行

 5、灵活的内存管理策略

         要多少给多少。可以合理的分配到底哪个阶段,哪个组件,使用多少

2、Spark的概念 (一栈式的通用计算框架)

    官网:http://spark.apache.org/

      Spark是一快速、通用、可扩展的大数据分析引擎

       2009年诞生于加州大学伯克利分校

3、Hadoop生态和Spark生态的区别

      Hadoop生态:

              hdfs+zookeeper+mapreduce/hive+hbase+storm+mahout+其他工具

Spark生态体系:

     hdfs+zookeeper+spark+hbase+storm+mahout+其他工具

      spark的产生就是为了替代Mapreduce

4、特点

1)Speed:快速高效

2)Ease of Use:简单易用

3)Generality:全栈式数据处理

  1. 支持批处理(Spark Core):Spark Core 是 Spark 的核心功能实现,包括:SparkContext 的初始化(DriverApplication 通过 SparkContext 提交)、部署模式、存储体系、任务提交与执行、计算引擎等
  2. 支持交互式查询(Spark SQL)。Spark SQL 是 Spark 来操作结构化数据的程序包,可以让我们使用 SQL 语句的方式来查询数据,Spark 支持多种数据源,包含 Hive 表,parquet 以及 JSON等内容
  3. 支持流式计算(Spark Streaming)。与 MapReduce 只能处理离线数据相比,Spark 还支持实时的流计算。Spark 依赖 Spark Streaming 对数据进行实时的处理。
  4. 支持机器学习(Spark MLlib)。提供机器学习相关的统计、分类、回归等领域的多种算法实现。其一致的 API 接口大大降低了用户的学习成本
  5. 支持图计算(Spark GraghX)。提供图计算处理能力,支持分布式, Pregel 提供的 API 可以解决图计算中的常见

4)Run EveryWhere:兼容

  

二、Spark集群的安装

1、集群规划

server Master Worker
qyl01
qyl02
qyl03  

2、具体步骤

1、上传下载好的 Spark 到集群中的一个节点,比如是 qyl01

put c:/spark-2.3.0-bin-hadoop2.7.tgz

2、使用之前安装 hadoop 集群相同的 hadoop 用户安装 spark 集群,现在规划安装目录/home/qyl/apps/,解压缩进行安装

tar -zxvf spark-2.3.0-bin-hadoop2.7.tgz -apps /home/qyl/apps/

3、修改配置文件 spark-env.sh

进入 SPARK_HOME 的 conf 目录中,进行如下更改:
cd /home/qyl/apps/spark-2.3.0-bin-hadoop2.7/conf
mv spark-env.sh.template spark-env.sh
然后修改 spark-env.sh:
export JAVA_HOME=/usr/local/java/jdk1.8.0_73
export SPARK_MASTER_HOST=qyl01
export SPARK_MASTER_PORT=7077

4、修改配置文件 slave

修改配置文件 slave
进入 SPARK_HOME 的 conf 目录中,进行如下更改:
cd /home/qyl/apps/spark-2.3.0-bin-hadoop2.7/conf
mv slaves.template slaves
在 slaves 的最后添加所有 worker 节点的主机名
qyl01
qyl02
qyl03

5、将spark安装包copy到所有安装节点

scp -r spark-2.3.0-bin-hadoop2.7 qyl02:/home/qyl/apps/
scp -r spark-2.3.0-bin-hadoop2.7 qyl03:/home/qyl/apps/

6、修改配置文件

vim /etc/profile
export SPARK_HOME=/home/qyl/apps/spark-2.3.0-bin-hadoop2.7
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
source /etc/profile

7、配置zookeeper集群,并且启动zookeeper集群

8、修改SPARK_HOME/conf目录中的spark-env.sh配置文件

删掉:
export SPARK_MASTER_HOST=qyk01
增加一行:
 export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -
Dspark.deploy.zookeeper.url=qyl01,qyl02,qyl03 -
Dspark.deploy.zookeeper.dir=/spark"

  9、把core-site.xml和hdfs-site.xml放置在$SPARK_HOME/conf目录下,然后所有节点要同步

10、同步配置文件

 scp -r spark-env.sh qyl02:$PWD
 scp -r spark-env.sh qyl03:$PWD

11、启动集群

[hadoop@qyl01 spark-2.3.0-bin-hadoop2.7]$ sbin/start-all.sh

三、核心概念

1、Master

    就如同名字一样,是spark集群的管理者,或者管理节点

    在Spark基于Yarn的方式运行过程中,master就是resourcemanager,基于自身的standalone模式运行就是集群中查看到的master节点

2、Work

      是spark集群的工作节点,在spark基于Yarn的方式运行过程中,work就是nodemanager,基于自身的standalone模式运行就是集群中查看到的work节点

      作用:调动本台机器上面的资源

3、Application

         提交到spark集群中取运行的完整应用就是一个Application,当然一个Application由多个job组成

4、Job

        每提交到比较会提交一个Spark的job作业,或者说,每触发一次action操作,就会提交一次spark作业job,从这个角度而言,一个application又多个Job组成,这里的job,就可以理解MapReduce中的Job

5、SparkContext

         整个一个Application的应用上下文对象

         一个spark应用的入口就是sparkcontext,是spark作业最要的概念

6、Driver

           驱动,简单理解,就是用来提交代码,提交job作业

            再换句话说,jobs是在集群中运行的,而这些dirver是在本地提交这些job作业的

7、RDD:弹性分布式数据集(resilient distributed dataset)

        RDD就能够被并行计算的,被分区存储在集群中各个节点的数据集

  RDD其实不存储真是的数据,只存储数据的获取的方法,以及分区的方法,还有就是数据的类型。

   分布式:数据存储在rdd对应的各个partition分区中

   弹性:spark的数据在内存中存储或者计算,当内存存储不了的时候,对应的数据外溢到磁盘进行存储和计算

   RDD的创建方式:可以hdfs文件创建,还可以通过并行对scala的集合创建,在编码过程中还可以通过转化,将一个rdd转化为其他的rdd

 

四、SparkRDD运行架构图

以wordcount为例:

在spark-shell中执行
sc.textFile("hdfs://myha01/spark/word.txt")flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).foreach(println)

五、创建Spark作业

1、maven项目

   2、导入依赖  在pom.xml中添加

<properties>
     <scala.version>2.11.8<scala.version>
     <spark.version>2.3.2<spark.version>
     <hadoop.version>2.7.6<hadoop.version>
<properties>

<dependency>
     <groupid>org.apache.spark</groupid>
     <artifactId>spark-core_2.11</artifactId>
     <version>${spark.version}</version>
 </dependency>

<dependency>
     <groupid>org.apache.hadoop</groupid>
     <artifactId>hadoop-client</artifactId>
     <version>${hadoop.version}</version>
 </dependency>

 

猜你喜欢

转载自blog.csdn.net/weixin_43823423/article/details/86063089