A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始


一、初始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:全栈式数据处理

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

1 个回复

倒序浏览
奈斯
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马