----本节内容-------

1.Spark背景介绍

2.Spark是什么

3.Spark有什么

4.Spark部署

4.1.Spark部署的2方面

4.2.Spark编译

4.3.Spark Standalone部署

4.4.Standalone HA配置

4.5.伪分布式部署

5.Spark任务提交

5.1.Spark-shell

5.2.Spark-submit

6、参考资料

---------------------

1.Spark背景介绍

Spark是AMLab实验室贡献出的代码,是Apache的顶级项目之一。AMLab实验室,提交了很多项目,追求人、机器、数据的完美整合,Spark是Amlab2009年提交的代码,后来AMLab的开发人员成立了专门的公司Databricks,主要是推广spark,目标是建立一个计算云,建立一个大数据处理的统一平台。目前,已经有非常多的互联网公司加入,如硬件IBM、Intel,数据库公司ORACLE,SAP公司等。

2.Spark是什么

Spark是什么,可以通过官网查询:

Spark官网地址:http://Spark.apache.org

Spark gitHub地址: http://Spark.databricks.com

Spark是 快速大数据处理通用引擎,具有有如下特征:

1) Speed非常快

Spark是Mapreduce处理速度的100倍以上,原因是spark基于内存的计算,Mapreduce的每次计算将中间结果写到硬盘,然后又从硬盘读取数据,磁盘IO非常很。

当然Spark处理速度快,也不仅仅是基于内存的原因,还有其他很多方面,比如运算步骤统筹性的优化,而不是MR的一步一步的来执行,先形成一个DAG图,对整个运算过程进行优化,RDD Linger血缘图的快速恢复等,后面进一步总结。

2)非常容易使用

主要表现在代码简洁和丰富的API上面,看wordCount代码,Mapreduce有80多行的代码,而spark只有几10行,Spark只有一句代码就可以行实现wordCount操作,节省了大量的开发时间,阅读和维护的工作量也减少很多。

3)通用性

可以和spark sql,spark streaming进行无缝的集成,是一个通用平台和开发库,实现通用型的根本就是RDD.通过RDD的转化和action可以进行各种计算,可以进行流计算,图计算,机器学习等,RDD技术的出现,使得Spark成为统一处理平台成为可能。

spark是一个开发库SDK,提供各种应用场景支持以及完整解决方案,可以跑多个集群上的开发库,简单且容易开发的开发库。开发者可以开发各种大数据应用程序,可以使用python,scala,java,r等调用spark各种API,构建一个完整的大数据应用处理程序。

Spark 可以处理hdfs,s3等数据源,也可以通过jdbc处理hive数据,还可以处理cassandara等nosql程序,可以运行在亚马逊、hadoop等平台

Spark执行的是Spark应用程序,Spark应用程序包含2个部分 spark driver和sparkexecutor2部分

Spark总结起来,有如下几点:

1)spark是一个开发库,具有丰富的API

2)可提供交互式的开发和部署

3)集成了各个领域的平台流处理、图计算、机器学习等,是一个强大的综合型数据处理平台。

3.Spark有什么

AMLab勃勃雄心,希望建立一个利用大量机器通过大量算法处理大量数据的大数据平台,并贡献出了Spark给Apache,包含很多组件,以spark为核心,整合了Spark Streaming,MLib,Graphx构成的大数据平台。

1)Spark Core-基础平台

Spark程序一般由2部分组成,1.驱动程序,2.Executor,驱动程序比较标准Executor实现各种计算逻辑,Executor主要是针对RDD编程,RDD通过各种算子进行转换,还提供了缓存、广播变量,关键的2个核心算子主要是transformation和acton, Spark编程模型如图所示,

Spark运行架构和流程

实际上都是对RDD进行操作,首先用RDD勾画DAG图,DAG图分解成stage,stage交付给Executor运行,整个过程RDD会不断的进行变换,RDD Linger特性,如果中间有一步发生错误,可以从前一步重新构建,具有非常好的容错性。通过对编程模型和运行架构的了解,明白了Spark为什么更快了,总结起来有一下几点(面试会被问到):

a.Spark基于内存计算,避免了过多的磁盘IO,减少IO开销;

b.提供了支持DAG图的分布式并行框架,DAG图可以减少不同阶段的中间结果IO开销,重复利用中间计算结果,DAG图可以优化中最佳的计算调度策略。

c.提供cache机制,支持多次迭代计算或者数据共享,减少IO开销

d.RDD之间维护血统关系,一旦RDD失败,可以通过父RDD重新构建,保证容错。

e.移动计算,而非移动数据,RDD partition可以就近读取分布式文件系统中的数据块到各个节点内存中进行计算

d.使用多线程池模型来减少task启动开销

f.shuffle过程中避免不必要的sort操作

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

2)spark sql

spark sql的前身是spark shark,因shark太依赖hive了,制约了shark的发展,shark是hive的100倍速度,但已经停止开发了,以脱离对第三方工具的依赖,shark查询速度之快,可以从下图看出,蓝色是shark。

目前Spark sql支持Hive和SQL-92标准,还引入Schema RDD,可以直接在内存中构建表,能够将关系型数据库和nosql数据库关联在一起。  spark sql原理:

a.SQL语句解析

b.优化SQL

c.转成RDD运算

总结起来,1.0版本的Spark SQL有如下几点:

·引入了Schema RDD,可以像传统数据库定义表一样来定义Schema RDD,Schema RDD由定义了列数据类型的行对象构成。

·Schema RDD有三种方式转换过来,a.从parquet文件读入,b.从HiveQL从Hive中获取,c.从RDD转换过来

· 在应用程序中可以混合使用不同来源的数据,如可以将来自HiveQL的数据和来自SQL的数据进行join。

· 内嵌的catalyst优化器对用户查询语句自动进行优化

· 后面会支持JDBC

· 对多种数据类型的支持,是spark里面发展最迅猛的组件

3)Spark Sreaming

Spark Streaming 通过分布在各个节点上的接收器,缓存接收到的流数据,并将流数 据 包 装 成 Spark 能 够 处 理 的 RDD 的 格 式, 输 入 到 Spark Streaming, 之 后 由 Spark Streaming 将作业提交到 Spark 集群进行执行

· 将流计算分解成一系列短小的批处理作业

· 将失败或执行较慢的任务在其他节点上并行执行

· 较强的容错能力,基于RDD继承关系Lineage

· 使用和RDD一样的予以

Spark Streaming 具有RDD的所有特性,可以处理Kafka,flumeHDFS,ZeroMQ,等数据源

4)MLib

MLib 是MLBase发展的一个底层库,是机器学习的一个通用平台,使用简单的语句,就可以做机器学习的开发,MLib底层机器学习库,转为spark程序执行。

5)Graphx

有三种核心的DD,对RDD的操作可以对图处理

6)BlinkDB

比较有意思的查询系统,运行速度和精度之间进行权衡的一个查询系统

7)SparkR

使得R能运行在Spark集群上上面,极大的提高了R的运算能力,spark1.3正式发布了

以spark为核心,其他组件为外援的一个处理平台,spark通过RDD将各个组件融合到spark平台

不同组件提供不同功能,可以应付各种数据场景

4.Spark部署

4.1.Spark部署的2方面

1) spark集群的部署

standalone部署:主从式部署,单点故障

HA部署:消除主节点的单点故障,有基于文件系统的HA和基于Zookeeper的HA

standalone为分布式部署:主节点和子节点在一台机器上,方便测试,资源消耗更少

2)Spark 应用程序部署

应用程序 = 驱动程序+Executor;

应用程序提交程序给集群后,由驱动程序向集群注册、申请资源,集群根据自身资源情况 分配资源给spark应用程序,spark应用程序就会在各个资源生开启Executor,开启各种任务进行计算,spark应用程序可以泡在本地,standaloone,yarn,mesos,EC2上

4.2.Spark编译

1)部署包下载,

从官网直接下载,或者从github下载

源码编译有2种方式

·SBT编译

· Maven编译:编译前要对Maven各种参数进行,-DskipTests:编译时不要进行测试,没有测试环境会报错

4.3.Spark Standalone部署

· Java环境配置

· ssh免密码登录配置

· 解压Spark安装

· 修改配置文件:conf/slaves和conf/spark-env.sh

· 分发Spark安装包

· 启动集群,检验

· spark客户端启动

1.修改conf/slaves ,填写spark集群子节点的机器名

2.修改conf/spark-env.sh

export SPARK_MASTER_IP=hadoop1  ###Spark master节点名

export SPARK_MASTER_PORT=7077  ###集群访问端口

export SPARK_WORKER_CORES=1 ###子节点使用的cpu核数

export  SPARK_WORKER_INSTANCES=1 ###子节点运行的实例个数

export SPARK_WORKER_MEMORY=2g ###子节点的内存

注意要使用export, 拷贝的时候注意一些特殊字符的生成

3.将配置好的spark环境拷贝到各个节点去

使用scp命令分发

4.启动集群

sbin/start-all.sh

5.客户端访问spark

http://hadoop1:8080

6.安装spark客户端

从子节点将安装文件拷贝到客户机,客户端访问spark集群,监控界面可以看到,缺省I情况下,会使用所有内存,使用如下启动客户端访问spark集群。

命令:  bin/spark-shell --master spark://hadoop1:7077

4.4.Standalone HA配置

有两种HA的方式:基于文件系统的HA和基于zookeeper的HA,用的比较多的是基于zookeeper的HA。

1)基于文件系统的HA

基于文件系统的HA的原理:master在运行过程中将work的运行监控状态信息都写到文件系统的目录中,一旦master挂掉,恢复之后从文件目录中将信息恢复。 修改spark_env.sh,修改2个关键的参数。

spark.deploy.recoveryMode 设置为FILESYSTEM

spark.deploy.recoveryDirectory Spark保存恢复状态的目录

执行步骤如下:

a.  在spark_env.sh中修改SPARK_DAEMON_JAVA_OPTS设置

export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=FILESYSTEM -Dspark.deploy.recoveryDirectory=/app/hadoop/spark100/recovery"

b.将修改后的文件分发到子节点

c.启动集群:sbin/start-all.sh

d.启动spark-shell客户端,启动一个spark-shell客户端并做部分操作后,然后用sbin/stop-master.sh杀死Master进程

启动客户端:bin/spark-shell --master spark://hadoop1:7077

执行操作:val a=2;  val b=3; val c=a+b;

e.用sbin/stop-master.sh 杀死master,杀死完后在客户端可以看到

命令:sbin/start-master.sh

f.过段时间用sbin/start-master.sh启动master

g.观察客户端和浏览器监控,发现spark-shell可以使用杀死master进程之前的变量c。

2).基于Zookeeper的 HA部署

要修改三个参数分别是

spark.deploy.recoveryMode 设置为ZOOKEEPER

spark.deploy.zookeeper.url zookeeper的url

spark.deploy.zookeeper.dir zookeeper保存恢复状态的木乱转,缺省为/spark

执行步骤如下:

a.  在spark_env.sh中修改SPARK_DAEMON_JAVA_OPTS设置

export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark。deploy.zookeeper.url=hadoop01:2181,hadoop2:2181,hadoop3:2181 -Dspark.deploy.recoveryDirectory=/spark"

另外注意:conf/spark_env.sh中master参数不用设置,因为集群会通过zk从多个master中选择一个出来

b. 将配置好的spark_env.sh分发到各个子节点

c. 配置了ZK ha的集群启动

· 启动zk集群,在每个zk节点上执行:bin/zkServer.sh start

· 启动spark集群:sbin/start-all.sh

· 启动一个master standby节点:sbin/start-master.sh

· 从界面监控,主master监控界面

standaby监控界面,这里是么有一个work节点在运行的,如果杀死主master就会切换到这里来,一旦主msater死掉,那么其他standby就会通过zk获得集群子节点信息

4.5.伪分布式部署

在一台机器上部署,ssh就是自己对自己的无密码登录

1.对slaves配置

只配置自己机器名就可以了

2.修改spark_env.sh文件

不需要分发了,只有他自己一台机器

3监控

4.启动spark shell

6.Spark任务提交

spark-shell交互工具,spark-submit部署工具,实际上spark shell调用的是spark-sbumit,因此他们都有相同的参数。

6.1 Spark-shell提交任务

针对运行环境的配置,缺省会使用所有的资源,查看spark-shell各种参数的含义

bin/spark-shell --help,bin/sjpark-submit --help

当zk多个master时,写多个master,启动的时候,会对每个master都连接轮询,只有当action提交时,spark才会提交任务,执行任务。

spark-shell启动命令:

bin/spark-shell --master spark://hadoop1:7077,hadoop2:7077 --executor-memory 2g

6.2 spark-submit运行

没做HA 提交任务:

bin/spark-submit --master spark://hadoop1:7077 --class org.apache.spark.examples.SparkPi --executor-memory 2g lib/spark-examples-1.0.0-hadoop2.2.0.jar

做HA 提交任务: bin/spark-submit --master spark://hadoop1:7077,hadoop2:7077 --class org.apache.spark.examples.SparkPi --executor-memory 2g lib/spark-examples-1.0.0-hadoop2.2.0.jar

7.参考资料

1).spark-sql执行原理:http://www.itnose.net/detail/6472074.html

2).Spark Streaming执行过程:http://www.cnblogs.com/zlslch/p/5725374.html

3).Spark基于文件系统的HA:http://blog.csdn.net/kinger0/article/details/46315375

4).基于zookeeper的HA:http://blog.csdn.net/panguoyuan/article/details/

5).DataGru教育spark相关资料

【Spark 深入学习 -09】Spark生态组件及Master节点HA的更多相关文章

  1. Spark master节点HA配置

    Spark master节点HA配置 1.介绍 Spark HA配置需要借助于Zookeeper实现,因此需要先搭建ZooKeeper集群. 2.配置 2.1 修改所有节点的spark-evn.sh文 ...

  2. spark SQL学习(spark连接 mysql)

    spark连接mysql(打jar包方式) package wujiadong_sparkSQL import java.util.Properties import org.apache.spark ...

  3. spark SQL学习(spark连接hive)

    spark 读取hive中的数据 scala> import org.apache.spark.sql.hive.HiveContext import org.apache.spark.sql. ...

  4. Spark学习之基础相关组件(1)

    Spark学习之基础相关组件(1) 1. Spark是一个用来实现快速而通用的集群计算的平台. 2. Spark的一个主要特点是能够在内存中进行计算,因而更快. 3. RDD(resilient di ...

  5. 【Spark深入学习-11】Spark基本概念和运行模式

    ----本节内容------- 1.大数据基础 1.1大数据平台基本框架 1.2学习大数据的基础 1.3学习Spark的Hadoop基础 2.Hadoop生态基本介绍 2.1Hadoop生态组件介绍 ...

  6. Spark入门,概述,部署,以及学习(Spark是一种快速、通用、可扩展的大数据分析引擎)

    1:Spark的官方网址:http://spark.apache.org/ Spark生态系统已经发展成为一个包含多个子项目的集合,其中包含SparkSQL.Spark Streaming.Graph ...

  7. Spark入门学习

    1. Spark Overview(spark概述) Apache spark是一个快速和通用的集群计算系统.它提供了Java,Scala,Python和R的高级APIs,以及支持通用执行图的优化引擎 ...

  8. 【Spark深入学习 -16】官网学习SparkSQL

    ----本节内容-------1.概览        1.1 Spark SQL        1.2 DatSets和DataFrame2.动手干活        2.1 契入点:SparkSess ...

  9. 【Spark深入学习 -14】Spark应用经验与程序调优

    ----本节内容------- 1.遗留问题解答 2.Spark调优初体验 2.1 利用WebUI分析程序瓶颈 2.2 设置合适的资源 2.3 调整任务的并发度 2.4 修改存储格式 3.Spark调 ...

随机推荐

  1. ASP.NET MVC5+EF6+EasyUI 后台管理系统(74)-微信公众平台开发-自定义菜单

    系列目录 引言 1.如果不借用Senparc.Weixin SDK自定义菜单,编码起来,工作量是非常之大 2.但是借助SDK似乎一切都是简单得不要不要的 3.自定义菜单无需要建立数据库表 4.自定义菜 ...

  2. Office2016体验

    Microsoft又迎来了更新的季节.对于我来说,win10就算了,不太稳定,特别是遇到一些专业的程序,因为很多行业软件开发.测试环境都是winxp或win7等:VS2015也安上了,但还没用,一直用 ...

  3. Device ID

    参考文章 一.CFUUID (Deprecated) 二.UDID (Deprecated) 三.NSUUID (ios6.0 and later) NSString *uuid = [[NSUUID ...

  4. 【英语】Bingo口语笔记(67) - turn系列

  5. 微信公共服务平台开发(.Net 的实现)9-------处理二维码

    今天我们来共同学习一下微信公共服务平台中一个重要内容---二维码扫描.众所周知二维码目前应用范围很广,在这里不再叙述背景了,但是值得一提的是目前大家手机上面应用的二维码扫描工具是支持的都是QR码和PD ...

  6. 如何在Android中使用OpenCV

    如何在Android中使用OpenCV 2011-09-21 10:22:35 标签:Android 移动开发 JNI OpenCV NDK 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始 ...

  7. mysqld_multi配置MySQL多实例

    # This is an example of a my.cnf file for mysqld_multi.# Usually this file is located in home dir ~/ ...

  8. html和css 基础梳理之一

    原图出处:http://www.cnblogs.com/jiasongmao/archive/2016/08/24/5804298.html

  9. Hadoop1.0.3安装部署

    0x00 大数据平台相关链接 官网:http://hadoop.apache.org/ 主要参考教程:http://www.cnblogs.com/xia520pi/archive/2012/05/1 ...

  10. Linux系统编程---实现目录或者文件拷贝

    关于拷贝文件,前面写过一个例子:点击打开链接 ,可以看看,实现cp命令. 这次我们实现一个目录和文件的拷贝,综合点. #include <stdio.h> #include <fcn ...