【Spark 深入学习 -09】Spark生态组件及Master节点HA

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

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相关资料

时间: 2024-12-17 13:53:33

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

Spark学习9 Spark Streaming流式数据处理组件学习

目录 SparkStreaming相关概念 概述 SparkStreaming的基本数据抽象DStream 处理模式 操作流程中细节 StreamingContext StreamingContext对象的创建 StreamingContext主要用法 输入源 DStream两种转化 无状态转化操作 有状态转化操作 输出操作 实践(最简单的wordCount) 创建StreamingContext对象 创建DStream对象 对DStream对象操纵 SparkStreaming相关概念 概述

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

----本节内容------- 1.大数据基础 1.1大数据平台基本框架 1.2学习大数据的基础 1.3学习Spark的Hadoop基础 2.Hadoop生态基本介绍 2.1Hadoop生态组件介绍 2.2Hadoop计算框架介绍 3.Spark概述 3.1 Spark出现的技术背景 3.2 Spark核心概念介绍 4.Spark运行模式 4.1.Spark程序组成 4.2.Spark运行模式 5.参考资料 --------------------- 1.大数据基础 1.1 大数据平台基本框架

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

----本节内容------- 1.遗留问题解答 2.Spark调优初体验 2.1 利用WebUI分析程序瓶颈 2.2 设置合适的资源 2.3 调整任务的并发度 2.4 修改存储格式 3.Spark调优经验 3.1 Spark原理及调优工具 3.2 运行环境优化 3.2.1 防止不必要的分发 3.2.2 提高数据本地性 3.2.3 存储格式选择 3.2.4 选择高配机器 3.3 优化操作符 3.3.1 过滤操作导致多小任务 3.3.2 降低单条记录开销 3.3.3 处理数据倾斜或者任务倾斜 3.

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

----本节内容-------1.概览        1.1 Spark SQL        1.2 DatSets和DataFrame2.动手干活        2.1 契入点:SparkSession        2.2 创建DataFrames        2.3 非强类型结果集操作        2.4 程序化执行SQL查询        2.5 全局临时视图        2.6 创建DataSets        2.7 与RDD交互操作        2.8 聚集函数3.Sp

【Spark深入学习 -13】Spark计算引擎剖析

----本节内容------- 1.遗留问题解答 2.Spark核心概念 2.1 RDD及RDD操作 2.2 Transformation和Action 2.3 Spark程序架构 2.4 Spark on Yarn运行流程 2.5 WordCount执行原理 3.Spark计算引擎原理 3.1 Spark内部原理 3.2 生成逻辑执行图 3.3 生成物理执行图 4.Spark Shuffle解析 4.1 Shuffle 简史 4.2  Spark Shuffle ·Shuffle Write

【Spark深入学习 -10】基于spark构建企业级流处理系统

----本节内容------- 1.流式处理系统背景 1.1 技术背景 1.2 Spark技术很火 2.流式处理技术介绍 2.1流式处理技术概念 2.2流式处理应用场景 2.3流式处理系统分类 3.流式处理技术关键技术 3.1流式处理系统管道构建 3.2流式处理系统关键技术 3.3用户行为分析系统介绍 4.问题答疑 5.参考资料 --------------------- 1.流式处理技术 1.1 技术背景 业务驱动技术发展,脱了了业务的技术,最多就是一个研究性的东西,流式处理技术的火爆源于业内

【Spark 深入学习 01】 Spark是什么鬼?

经过一段时间的学习和测试,是时候给spark的学习经历做一个总结了,对于spark的了解相对晚了写.春节期间(预计是无大事),本博准备推出20篇左右spark系列原创文章(先把牛吹出去再说) ,尽量将枯燥无味的技术讲的通俗易懂- r.kelly 2013年的时候第一次听说spark这么个神器,那时候它还幼小,没什么人鸟它,但是它强大基因注定了它不是个凡夫俗子, 故事就是从那一小撮人群中开始的. 一.Spark何许人也 姓名:Spark 性别:未知 出生地:加州大学伯克利分校AMP实验室 出生年月

大数据学习:Spark是什么,如何用Spark进行数据分析

给大家分享一下Spark是什么?如何用Spark进行数据分析,对大数据感兴趣的小伙伴就随着小编一起来了解一下吧. 大数据在线学习 什么是Apache Spark? Apache Spark是一个为速度和通用目标设计的集群计算平台. 从速度的角度看,Spark从流行的MapReduce模型继承而来,可以更有效地支持多种类型的计算,如交互式查询和流处理.速度在大数据集的处理中非常重要,它可以决定用户可以交互式地处理数据,还是等几分钟甚至几小时.Spark为速度提供的一个重要特性是其可以在内存中运行计

从Storm和Spark Streaming学习流式实时分布式计算系统的设计要点

0. 背景 最近我在做流式实时分布式计算系统的架构设计,而正好又要参见CSDN博文大赛的决赛.本来想就写Spark源码分析的文章吧.但是又想毕竟是决赛,要拿出一些自己的干货出来,仅仅是源码分析貌似分量不够.因此,我将最近一直在做的系统架构的思路整理出来,形成此文.为什么要参考Storm和Spark,因为没有参照效果可能不会太好,尤其是对于Storm和Spark由了解的同学来说,可能通过对比,更能体会到每个具体实现背后的意义. 本文对流式系统出现的背景,特点,数据HA,服务HA,节点间和计算逻辑间