49
Redoop CRH 5.0 ARM Spark 使使使使 1 使使 www.redoop.com

Web viewRedoop CRH 5.0 ARM Spark使用手册. 1. 北京红象云腾系统技术有限公司

  • Upload
    dotuyen

  • View
    281

  • Download
    27

Embed Size (px)

Citation preview

Page 1: Web viewRedoop CRH 5.0 ARM Spark使用手册. 1. 北京红象云腾系统技术有限公司

Redoop CRH 5.0 ARM Spark 使用手册

1北京红象云腾系统技术有限公司 www.redoop.com

Page 2: Web viewRedoop CRH 5.0 ARM Spark使用手册. 1. 北京红象云腾系统技术有限公司

Redoop CRH 5.0 ARM Spark 使用手册

目录版权所有......................................................................................................................3

一、简介......................................................................................................................4

1.1 主要功能........................................................................................................4

1.2 关于本手册....................................................................................................4

二、Spark 入门............................................................................................................4

2.1 安装 Spark......................................................................................................4

2.2 Spark 服务的角色..........................................................................................4

2.3 Spark 性能......................................................................................................5

2.3.1 性能特点.............................................................................................5

2.3.2 Spark 生态系统...................................................................................5

2.4 Spark 组件......................................................................................................6

2.4.1 紧密集成的优点.................................................................................7

三、Spark Shell............................................................................................................7

3.1 基础................................................................................................................8

3.2 RDD.................................................................................................................9

3.2.1 RDD 介绍.............................................................................................9

3.2.2 RDD 的作用和意义............................................................................10

3.2.3 RDD 的创建方法...............................................................................10

3.2.4 RDD 的特点.......................................................................................11

3.2.5 RDD 的基础数据类型........................................................................11

3.2.4 Scala 的基础......................................................................................12

2北京红象云腾系统技术有限公司 www.redoop.com

Page 3: Web viewRedoop CRH 5.0 ARM Spark使用手册. 1. 北京红象云腾系统技术有限公司

Redoop CRH 5.0 ARM Spark 使用手册

3.2.5 内存计算...........................................................................................12

3.2.6 RDD 使用...........................................................................................13

3.3 缓存..............................................................................................................14

3.4 初始化 Spark................................................................................................14

四、spark 测试..........................................................................................................15

五、 Spark 的运维.....................................................................................................17

5.1 Spark 服务的管理........................................................................................17

5.1.1 启动,停止,重启 Spark 服务.........................................................17

5.2 Spark 服务的监控........................................................................................18

5.2.1 指标监控...........................................................................................18

5.2.2 Spark 服务的概要监控......................................................................18

5.3 Spark 服务的配置........................................................................................19

六、Spark 安全..........................................................................................................20

6.1 Web UI..........................................................................................................20

6.2 事件日志......................................................................................................20

6.3 加密..............................................................................................................21

6.4 YARN 模式.....................................................................................................21

6.5 独立模式......................................................................................................22

6.6 配置 SASL 加密.............................................................................................22

6.7 配置网络安全端口......................................................................................22

客户服务....................................................................................................................23

3北京红象云腾系统技术有限公司 www.redoop.com

Page 4: Web viewRedoop CRH 5.0 ARM Spark使用手册. 1. 北京红象云腾系统技术有限公司

Redoop CRH 5.0 ARM Spark 使用手册

版权所有 © 北京红象云腾系统技术有限公司。保留所有权利。

© 北京红象云腾系统技术有限公司版权所有 ,并保留对本说明书及本声明的最终解释权和修改权。本说明书的版权归北京红象云腾系统技术有限公司所有。未得到北京红象云腾系统技术有限公司的书面许可,任何人不得以任何方式或形式对本说明书内的任何部分进行复制、摘录、备份、修改、传播、翻译成其他语言、或将其全部或部分用于商业用途

4北京红象云腾系统技术有限公司 www.redoop.com

Page 5: Web viewRedoop CRH 5.0 ARM Spark使用手册. 1. 北京红象云腾系统技术有限公司

Redoop CRH 5.0 ARM Spark 使用手册

一、简介红象大数据平台 CRH 提供基于 Hadoop,Spark 的高可用解决方案,提供海量数据秒级查询和检索速度,提供支持和 PB 级别的数据存储和分析。

1.1 主要功能红象大数据平台为公司核心产品,具备分布式存储和计算等基础功能。同时在在线(Online)、近线(Nearline)、离线(Offline)三大应用场景做场景优化,为用户提供全场景的大数据平台解决方案。红象云腾 2016 年加入OpenPower 联 盟 , 并 提 出 +HADOOP 战 略 , 成 为 支 持 底 层 芯 片 最 多 的HADOOP 发行版之一,提出【芯片、OS、存储、Cloud、算法、应用、行业】+HADOOP,将 HADOOP 技术融入更多技术和应用场景。

1.2 关于本手册本手册主要介绍了 Spark 的基础知识和使用方法。

二、Spark 入门2.1 安装 Spark

Spark 的安装通过管理界面完成,可以在第一次安装集群时安装,也可以后续需要时在添加向集群添加服务进行安装,Spark 的安装在《Redoop CRH 5.0 ARM

5北京红象云腾系统技术有限公司 www.redoop.com

Page 6: Web viewRedoop CRH 5.0 ARM Spark使用手册. 1. 北京红象云腾系统技术有限公司

Redoop CRH 5.0 ARM Spark 使用手册

安装手册》中有详细的介绍,这里不赘述。

2.2 Spark 服务的角色登录您的 Redoop CRH 集群,点击 Spark 服务,进入服务主页

Spark 使用 RDD来表达数据集,可以直接从HDFS 或者Hbase 中读取数据。由于启用了内存分布数据集,Spark 大大优化了迭代类工作负载,适合机器学习、数据挖掘等高级智能分析应用,根据业务需求可定制化。

角色 描述SparkHistory Server 通过配置可以在 Application执行的过程中记录下了日志

事件信息。

6北京红象云腾系统技术有限公司 www.redoop.com

Page 7: Web viewRedoop CRH 5.0 ARM Spark使用手册. 1. 北京红象云腾系统技术有限公司

Redoop CRH 5.0 ARM Spark 使用手册

2.3 Spark 性能

2.3.1 性能特点

更快的速度内存计算下,Spark 比 Hadoop 快 100倍。

易用性Spark 提供了 80 多个高级运算符。

通用性Spark 提供了大量的库,包括 SQL 、DataFrames、MLlib、GraphX、Spark

Streaming。 开发者可以在同一个应用程序中无缝组合使用这些库。 支持多种资源管理器

Spark 支持 Hadoop YARN,Apache Mesos,及其自带的独立集群管理器

7北京红象云腾系统技术有限公司 www.redoop.com

Page 8: Web viewRedoop CRH 5.0 ARM Spark使用手册. 1. 北京红象云腾系统技术有限公司

Redoop CRH 5.0 ARM Spark 使用手册

2.3.2 Spark 生态系统

Shark:Shark 基本上就是在 Spark 的框架基础上提供和 Hive 一样的 HiveQL

命令接口,为了最大程度的保持和 Hive 的兼容性,Shark 使用了 Hive 的 API

来实现 query Parsing 和 Logic Plan generation,最后的 PhysicalPlan execution

阶段用 Spark代替 HadoopMapReduce。通过配置 Shark参数,Shark 可以自动在内存中缓存特定的 RDD,实现数据重用,进而加快特定数据集的检索。同时,Shark 通过 UDF 用户自定义函数实现特定的数据分析学习算法,使得SQL 数据查询和运算分析能结合在一起,最大化 RDD 的重复使用。

SparkR:SparkR是一个为 R 提供了轻量级的 Spark前端的 R包。 SparkR 提供了一个分布式的 data frame 数据结构,解决了 R 中的 data frame只能在单机中 使 用 的瓶颈,它和 R 中 的 data frame 一样支 持 许 多操作 ,比如select,filter,aggregate 等等。(类似 dplyr包中的功能)这很好的解决了 R 的大数据级瓶颈问题。 SparkR 也支持分布式的机器学习算法,比如使用 MLib

机器学习库。SparkR 为 Spark引入了 R 语言社区的活力,吸引了大量的数据科学家开始在 Spark 平台上直接开始数据分析之旅。

8北京红象云腾系统技术有限公司 www.redoop.com

Page 9: Web viewRedoop CRH 5.0 ARM Spark使用手册. 1. 北京红象云腾系统技术有限公司

Redoop CRH 5.0 ARM Spark 使用手册

2.4 Spark 组件

Spark Core

包含 Spark 的基本功能,包含任务调度,内存管理,容错机制等。Spark Core 内部定义了 RDDs(resilient distributed datasets,弹性分布式数据集)。RDDs代表横跨多工作节点的数据集和,RDDs 可以被并行的处理。Spark Core 提供了很多 APIs来创建和操作这些集合(RDDs)。

Spark Sql

是 Spark处理结构化数据的库,它支持通过 SQL 查询数据,就像 HQL(Hive

SQL)一样,并且支持很多数据源,像 Hive表,JSON 等。除了为 Spark 提供一个 SQL 接口外, Spark SQL 允许开发 人员将 SQL 查 询 和由 RDDs 通 过Python、Java 和 Scala 支持的数据编程操作混合进一个单一的应用中,进而将 SQL与复杂的分析结合。与计算密集型环境紧密集成使得 Spark SQL 不同于任何其他开源的数据仓库工具。Shark是一种较老的基于 Spark 的 SQL项目,它是基于 Hive 修改的,它现在已经被 Spark SQL替代了。

Spark Streaming

是实时数据流处理组件,类似 Storm。9北京红象云腾系统技术有限公司 www.redoop.com

Page 10: Web viewRedoop CRH 5.0 ARM Spark使用手册. 1. 北京红象云腾系统技术有限公司

Redoop CRH 5.0 ARM Spark 使用手册

Spark Streaming 提供了 API来操作实时流数据。Spark流作为 Spark 的一个组件,可以处理实时流数据。流数据的例子有生产环境的 Web 服务器生成的日志文件,用户向一个Web 服务请求包含状态更新的消息。Spark流提供一个和 Spark 核心 RDD API非常匹配的操作数据流的 API,使得编程人员可以更容易地了解项目,并且可以在操作内存数据、磁盘数据、实时数据的应用之间快速切换。Spark流被设计为和 Spark 核心组件提供相同级别的容错性,吞吐量和可伸缩性。

MLlib

Spark 有一个包含通用机器学习功能的包,就是 MLlib(machine learning

lib)。MLlib包含了分类,聚类,回归,协同过滤算法,还包括模型评估和数据导入。MLlib 也提供一个低层的机器学习原语,包括一个通用的梯度下降优化算法。所有这些方法都可以应用到一个集群上。它还提供了一些低级的机器学习原语,包括通用梯度下降优化算法。MLlib 提供的以上方法,都支持集群上的横向扩展。

Graphx

是处理图的库(例如,社交网络图),并进行图的并行计算,就像 Spark

Streaming 和 Spark SQL 一样,Graphx 也继承了 Spark RDD API,同事允许创建有向图。Graphy 提供了各种图的操作,例如 subgraph 和 mapVertices,也包含了常用的图算法,例如 PangeRank 等。

Cluster Managers

Cluster Managers就是集群管理,Spark 能够运行在很多 cluster managers上10北京红象云腾系统技术有限公司 www.redoop.com

Page 11: Web viewRedoop CRH 5.0 ARM Spark使用手册. 1. 北京红象云腾系统技术有限公司

Redoop CRH 5.0 ARM Spark 使用手册

面,包括 Hadoop YARN,Apache Mesos 和 spark自带的单独调度器。如果你把 Spark 安装在了裸机上面,单独调度器能够提供简单的方式,让你开始 Spark 之旅。如果你已经有了 Hadoop Yarn 或者Mesos 集群,那么,Spark 对这些集群管理工具的支持,使你的 Spark 应用程序能够在这些集群上面运行。

2.4.1 紧密集成的优点

如果 Spark 底层优化了,那么基于 Spark 底层的组件,也得到了相应的优化,例如,Spark 底层增加了一个优化算法,那么 Spark 的 SQL 和机器学习包也会自动的优化。

紧密集成,节省了各个组件组合使用时的部署,测试等时间。 当向 Spark增加新的组件时,其它的组件,可以立刻享用新组建的功能。 无缝连接不同的处理模型。

三、Spark Shell

Spark 的 shell 使你能够处理分布在集群上的数据(这些数据可以是分布在硬盘上或者内存中)。可以把数据加载到工作节点的内存中,因此,许多分布式处理(甚至是分布式的 1T 数据的处理)都可以在几秒内完成。

11北京红象云腾系统技术有限公司 www.redoop.com

Page 12: Web viewRedoop CRH 5.0 ARM Spark使用手册. 1. 北京红象云腾系统技术有限公司

Redoop CRH 5.0 ARM Spark 使用手册

3.1 基础

Spark 的交互式脚本是一种学习 API 的简单途径,也是分析数据集交互的有力工具。Spark抽象的分布式集群空间叫做 Resilient Distributed Dataset (RDD)弹性数据集。其中,RDD 有两种创建方式:(1)、从 Hadoop 的文件系统输入(例如 HDFS);(2)、有其他已存在的 RDD转换得到新的 RDD;

Spark 的 Shell 作为一个强大的交互式数据分析工具,提供了一个简单的方式来学习,他可以使用 Scala(在 Java虚拟机上运行现有的 Java库的一个很好方式)或者 Python。在 Spark目录里使用下面的方式开始运行:./bin/spark-shell

Spark 最主要的抽象视角 Resilient Distributed Dataset(RDD)的弹性分布式集合,RDDs 可以使用 Hadoop InputFormats(例如 HDFS文件)创建,也可以从其他的RDDs转换,让我们在 Spark源代码目录从 README文本文件中创建一个新的RDD。scala> val textFile = sc.textFile("README.md")textFile: spark.RDD[String] = spark.MappedRDD@2ee9b6e3

RDD 的 actions从 RDD 中返回值,transformations 可以转换成一个新 RDD 并返回它的引用,让我们开始使用几个操作:

12北京红象云腾系统技术有限公司 www.redoop.com

Page 13: Web viewRedoop CRH 5.0 ARM Spark使用手册. 1. 北京红象云腾系统技术有限公司

Redoop CRH 5.0 ARM Spark 使用手册

scala> textFile.count() // RDD 的数据条数res0: Long = 126

scala> textFile.first() // RDD 的第一行数据res1: String = # Apache Spark

现在让我们使用一个 transformation,我们使用 filter 在这个文件里返回一个包含自数据集的心 RDD。scala> val linesWithSpark = textFile.filter(line => line.contains("Spark")) linesWithSpark: spark.RDD[String] = spark.FilteredRDD@7dd4af09

我们可以把 actions 和 transformations链接在一起:

scala> textFile.filter(line => line.contains("Spark")).count() // 有 多 少 行 包 括“spark”?

res3: Long = 15

RDD 有两种类型的操作 ,分别是 Action(返回 values)和 Transformations(返回一个新的 RDD)(1) Action相当于执行一个动作,会返回一个结果:RDD 中有多少行scala> textFile.count()

输出结果res1: Long = 2

RDD 第一行的内容scala> textFile.first()

13北京红象云腾系统技术有限公司 www.redoop.com

Page 14: Web viewRedoop CRH 5.0 ARM Spark使用手册. 1. 北京红象云腾系统技术有限公司

Redoop CRH 5.0 ARM Spark 使用手册

输出结果:res3: String = hello world

(2) Transformation相当于一个转换,会将一个 RDD转换,并返回一个新的RDD:

有多少行含有 hello

scala> textFile.filter(line => line.contains("hello")).count()

结果输出:res4: Long = 2

3.2 RDD

Spark 核心的概念是 Resilient Distributed Dataset(RDD):一个可并行操作的有容错机制的数据集合,有 2种方式创建 RDDs:第一种在你的驱动程序中并行化一个已经存在的集合:另外一种是引用一个外部存储系统的数据集,例如共享的文件系统,HDFS,HBase 或者其他 Hadoop 数据格式的数据源。RDDs(Resilient

Distributed Datasets)。

3.2.1 RDD 介绍

Resilient distributed datasets(弹性分布式数据集,简写 RDDs)。 一个 RDD就是一个不可改变的分布式集合对象,内部由许多 partitions(分

14北京红象云腾系统技术有限公司 www.redoop.com

Page 15: Web viewRedoop CRH 5.0 ARM Spark使用手册. 1. 北京红象云腾系统技术有限公司

Redoop CRH 5.0 ARM Spark 使用手册

片)组成,每个 partition都包括一部分数据,这些 partitions 可以在集群的不同节点上计算。

Partitions 是 Spark 中 的 并 行处理 的单元, Spark 顺序的 , 并 行 的处理partitions。

RDDs是 Spark 的分布数据和计算的基础抽象类,是 Spark 的核心概念。 RDD 可以包含 Python,Java 或者 Scala 中的任何数据类型,包括用户自定义

的类。 在 Spark 中,所有的计算都是通过 RDDs 的创建,转换,操作完成的。 RDD 具有 lineage graph(血统关系图)。

3.2.2 RDD 的作用和意义

RDD 可以解决两类常见的应用问题,一类叫做 iterative(迭代)计算,比如machine learning 、 graph algorithm (机器学习和图形 算 法 ) ,另一 类叫做interactive(交互)计算,比如对一份大数据进行大量的 ad-hoc 查询。第一类计算遇到的问题是中间结果会被重复使用,如果使用 MR框架,这些中间结果需要持久化到磁盘,每次使用需要再次读磁盘,太慢了!第二类计算遇到的问题是,这一份数据放在磁盘中,我每次查询都得读磁盘,太慢了!所以内存计算应运而生。RDD 将这些需要重复使用的数据放置到内存中,使得数据的计算速度大大加快。而我们可以看到,这个 RDD 的根本出发点就在于,有些数据我们往往会多次使用,放到内存必然能够加快访问速度。

15北京红象云腾系统技术有限公司 www.redoop.com

Page 16: Web viewRedoop CRH 5.0 ARM Spark使用手册. 1. 北京红象云腾系统技术有限公司

Redoop CRH 5.0 ARM Spark 使用手册

3.2.3 RDD 的创建方法

3.2.3.1 Driver program 中创建 RDDs:

把一个存在的集合传给 SparkContext’s parallelize()方法。例子:val lines=sc.Parallelize(List(“spark”,”bigdatastudy”))val rdd=sc.parallelize(Array(1,2,2,4),4)…

注意一下 RDD 的类型第一个参数是:待并行化处理的集合第二个参数是:分区个数

3.2.3.2 加载外部数据集

例子:使用 testFile()加载val rddText=sc.textFile(“../../testfile/helloSpark”)val rddHdfs=sc.textFile(“hdfs:///some/path.txt”)

3.2.4 RDD 的特点

1.来源:一种是从持久存储获取数据,另一种是从其他 RDD 生成2.只读:状态不可变,不能修改3.分区:支持元素根据 Key 来分区 ( Partitioning ) ,保存到多个结点上,还原时只会重新计算丢失分区的数据,而不会影响整个系统

16北京红象云腾系统技术有限公司 www.redoop.com

Page 17: Web viewRedoop CRH 5.0 ARM Spark使用手册. 1. 北京红象云腾系统技术有限公司

Redoop CRH 5.0 ARM Spark 使用手册

4.路径:在 RDD 中叫世族或血统 ( lineage ) ,即 RDD 有充足的信息关于它是如何从其他 RDD 产生而来的5.持久化:可以控制存储级别(内存、磁盘等)来进行持久化6.操作:丰富的动作 ( Action ) ,如 Count、Reduce、Collect 和 Save 等

3.2.5 RDD 的基础数据类型

3.2.5.1 并行集合

并行集合(Parallelized collections)的创建是通过一个已有的集合(Scala Seq)上调用 SparkContext 的 parallelize 方法实现的。集合中的元素被复制到一个可并行操作的分布式数据集中,例如:这里演示了如何一个包含 1 到 5 数组种创建并行集合:Val data=Array(1,2,3,4,5)Val distData=sc.parallelize(data)

一旦创建完成,这个分布式数据集(distData)就可以被并行操作,例如:我们可以调用 distData.reduce(a,b)=>a+b,将这个数组中的元素相加,我们以后在描述在分布式上的一些操作。

并行集合一个很重要的参数是切片书(slices),表示一个数据集切分的分数,Spark会在集群上运行一个任务。你可以在集群上为每个 CPU设置 2-4个切片(slices),正常情况下,Spark会试着基于你的集群状况自动地设置切片的数目,然而,你也 可 以 通 过 parallelize 的 第 二个参数 手 动地设置 (例如:

17北京红象云腾系统技术有限公司 www.redoop.com

Page 18: Web viewRedoop CRH 5.0 ARM Spark使用手册. 1. 北京红象云腾系统技术有限公司

Redoop CRH 5.0 ARM Spark 使用手册

sc.parallelize(data,10))。

3.2.5.2 外部数据集

Spark 可以从任何一个 Hadoop 支持的存储源创建分布式数据集,包括你的本地文件系统,HDFS,Cassandra,HBase,Amazon S3 等,Spark 支持文本文件(text

files),SequenceFiles 和其他 Hadoop InputFormat。文本文件 RDDs 可以使用 SparkContext 的 textFile 方法创建,在这个方法里传入文件的 URI(机器上的本地路径或 hdfs://,s3n://等),然后他会将文件读取成一个行集合,这里是一个调用例子:Scala> val distFile=sc.textFile(“data.txt”)distFile:RDD[String]=MappedRDD@ 1d4cee08

一旦创建完成,distFile就能做数据库操作,例如:我们可以用下面的方式使用map 和 reduce操作将所有行的长度相加:DistFile.map(ss.length).reduce(a,b)=>a+b

注意,Spark读文件时如果使用本地文件系统路径,文件必须能在 work节点上用相同的路径访问到,要么复制文件到所有的 workers,要么使用网络的方式共享文件系统。所有 Spark 的基于文件的方法,包括 textFile,能很好的支持文件目录,压缩过的文件 和 通 配符,例如,你可 以 使 用 textFile (“ /my/文件目录”)textFile(“/my/文件目录/*.gz”).

textFile 方法也可以选择第二个可选参数来控制切片(slices)的目录,默认情况下,Spark 为每一个文件块(创建一个切片,但是你也可以通过一个更大的值来

18北京红象云腾系统技术有限公司 www.redoop.com

Page 19: Web viewRedoop CRH 5.0 ARM Spark使用手册. 1. 北京红象云腾系统技术有限公司

Redoop CRH 5.0 ARM Spark 使用手册

设置一个更高的切片数目,你不能设置一个小于文件块数目的切片值。

3.2.4 Scala 的基础

3.2.4.1 Scala 的变量声明

在 Scala 中创建变量的时候,必须使用 val 或者 var

Val,变量值不可修改,一旦分配不能重新指向别的值Var,分配后,可以指向类型相同的值Val lines=sc.textFile(“../../testfile/helloSpark”)Lines=sc.textFile(“../../testfile/helloSpark2”)…<console>:error:reassignment to val

Var lines2=sc.textFile(“../../testfile/helloSpark”)Lines2=sc.textFile(“../../testfile/helloSpark2”)

可以重新声明变量Val lines=sc.textFile(“../../testfile/helloSpark2”)

3.2.5 内存计算

内存计算就是把数据放到内存中。更详细的,Spark 中将计算分为两类:Action

和 Transformation。Action是指不产生新数据集的计算,比如 count(统计行数)、比如 reduce(汇集数据,是的,它不产出新的数据,只是汇集而已)。而相应的 Transformation则是产生新数据集的计算,比如 map、filter、union

(拼接)。显然可以看到 Transformation才是我们要关注的内容,因为涉及到中间数据的问题。那么 Transformation 可以认为是从一个或多个 RDD 到另一个或

19北京红象云腾系统技术有限公司 www.redoop.com

Page 20: Web viewRedoop CRH 5.0 ARM Spark使用手册. 1. 北京红象云腾系统技术有限公司

Redoop CRH 5.0 ARM Spark 使用手册

者多个 RDD 的操作。那么这些操作可以用一个 DAG图来完全描述,所有的节点都是一个 RDD,而有向边则是 transformation。这样我们就可以将其中那些出度( Out-degree )较大 的节点 存 到 内 存 中 , 这样, 这些使 用此节点 的transformation都可以得到更高的执行速度。回到前面说的 interactive 计算,就是这个情况的最好样例,大量的 ad-hoc 查询都会访问基础数据,所以将其放置在内存中是个 great idea!需要注意的是,Spark 为我们提供了最大的自由度,所有的数据都可以由我们来进行 cache 的设置,包括是否要 cache 以及如何 cache。cache 有几种:MEMORY_ONLY:内存、非序列化方式,最快,但是如果超过内存限制,则会将某些数据丢弃,在需要的时候再计算(recomputed on the fly)MEMORY_AND_DISK:基本同上,唯一不同是,如果超过内存限制,存到磁盘MEMORY_ONLY_SER:和 MEMORY_ONLY 一致,但是会序列化MEMORY_AND_DISK_SER:和 MEMORY_AND_DISK 类似,但是会序列化DISK_ONLY:磁盘最后 cache还可以做副本,防止数据丢失重算。我们可以看到这个 cache 的方案相当完善,自由度相当大。最后还有一个问题是内存中的数据 expire,如果有大量的数据要进入内存,那么 Spark会采用 LRU(least recent used)算法清除某些 RDD,据论文介绍,LRU

还是非常好使的。

20北京红象云腾系统技术有限公司 www.redoop.com

Page 21: Web viewRedoop CRH 5.0 ARM Spark使用手册. 1. 北京红象云腾系统技术有限公司

Redoop CRH 5.0 ARM Spark 使用手册

3.2.6 RDD 使用

RDD actions 和 tranformations 能被用在更多的复杂计算中,比方说,我们想要找到一行中最多的单词数量:scala> textFile.map(line => line.split(" ").size).reduce((a, b) => if (a > b) a else b)res4: Long = 15

首先履行映射成一个整形数值产生一个新 RDD上调用 reduce找到行中最大的个数,map 和 reduce 的参数是 Scala 的函数串(闭包),并且可以使用任何语言特性或者 Scala/Java 类库,例如,我们可以很方便的调用其他的函数声明,我们使用 Math.max()函数让代码更容易理解:scala> import java.lang.Mathimport java.lang.Mathscala> textFile.map(line => line.split(" ").size).reduce((a, b) => Math.max(a, b))

res5:Int=15

Hadoop流行的一个通用的数据流模式是 MapReduce。Spark 能够很容易的实现MapReduce

scala> val wordCounts = textFile.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey((a, b) => a + b)wordCounts: spark.RDD[(String, Int)] = spark.ShuffledAggregatedRDD@71f027b8

这里,我们结合 flatMap,map 和 reduceByKey来计算文件里每个单词出现的数量,他的结果是包含一组(String,int)键值对的 RDD,我们可以使用[collect]

操作在我们的 shell 中手机单词的数量:scala> wordCounts.collect()res6: Array[(String, Int)] = Array((means,1), (under,2), (this,3), (Because,1), (Python,2), (agree,1), (cluster.,1), ...)

21北京红象云腾系统技术有限公司 www.redoop.com

Page 22: Web viewRedoop CRH 5.0 ARM Spark使用手册. 1. 北京红象云腾系统技术有限公司

Redoop CRH 5.0 ARM Spark 使用手册

3.3 缓存

Spark 支持把数据集拉到集群内的内存缓存中。当要重复访问时这是非常有用的,例如当我们在一个小的热数据集中查询,或者运行一个像网页搜索排序这样的重复算法,作为一个简单的例子,让我们把 linesWithSpark 数据集标记在缓存中;scala> linesWithSpark.cache()res7: spark.RDD[String] = spark.FilteredRDD@17e51082scala> linesWithSpark.count()res8: Long = 15scala> linesWithSpark.count()res9: Long = 15

缓存 100 行的文本文件来研究 Spark 这看起来很傻,真正让人感兴趣的部分是我们可以在非常大型的数据集中使用同样的函数,甚至在 10个或者 100个节点交叉计算,你同样可以使用 bin/spark-shell链接到一个 cluster来替换掉编程指南中的方法进行交互操作。

3.4 初始化 Spark

Spark编程的第一步是需要创建一个 SparkContext 对象,用来告诉 Spark如何访问集群,在创建 SparkContext 之前,你需要构建一个 SparkConf 对象,SparkConf

对象包含了一些你应用程序的信息。val conf = new SparkConf().setAppName(appName).setMaster(master)new SparkContext(conf)

appName 参数是你程序的名字,它会显示在 cluster UI 上, master 是22北京红象云腾系统技术有限公司 www.redoop.com

Page 23: Web viewRedoop CRH 5.0 ARM Spark使用手册. 1. 北京红象云腾系统技术有限公司

Redoop CRH 5.0 ARM Spark 使用手册

Spark,Mesos 或 YARN 集群的 URL,或运行在本地模式时,使用专用字符串“local”。在实践中,当应用程序运行在一个集群中时,你并不想要把 master硬编码到你的程序中,你可以用 Spark-submit 启动你的应用程序的时候传递他,然而,你可以在本地测试和单元测试中使用“local”运行 spark 进程。

四、spark 测试

进入 spark shell

hdfs@Kylin:~$ spark-shell17/08/29 10:08:09 INFO SecurityManager: Changing view acls to: hdfs17/08/29 10:08:09 INFO SecurityManager: Changing modify acls to: hdfs17/08/29 10:08:09 INFO SecurityManager: SecurityManager: authentication disabled; ui acls disabled; users with view permissions: Set(hdfs); users with modify permissions: Set(hdfs)17/08/29 10:08:10 INFO HttpServer: Starting HTTP Server17/08/29 10:08:10 INFO Server: jetty-8.y.z-SNAPSHOT17/08/29 10:08:10 INFO AbstractConnector: Started [email protected]:4200617/08/29 10:08:10 INFO Utils: Successfully started service 'HTTP class server' on port 42006.Welcome to ____ __ / __/__ ___ _____/ /__ _\ \/ _ \/ _ `/ __/ '_/ /___/ .__/\_,_/_/ /_/\_\ version 1.6.2 /_/

Using Scala version 2.10.5 (OpenJDK 64-Bit Server VM, Java 1.8.0_77-Ubuntu)Type in expressions to have them evaluated.Type :help for more information.17/08/29 10:08:23 INFO SparkContext: Running Spark version 1.6.217/08/29 10:08:23 INFO SecurityManager: Changing view acls to: hdfs17/08/29 10:08:23 INFO SecurityManager: Changing modify acls to: hdfs17/08/29 10:08:23 INFO SecurityManager: SecurityManager: authentication disabled; ui acls disabled; users with view permissions: Set(hdfs); users with modify permissions: Set(hdfs)

23北京红象云腾系统技术有限公司 www.redoop.com

Page 24: Web viewRedoop CRH 5.0 ARM Spark使用手册. 1. 北京红象云腾系统技术有限公司

Redoop CRH 5.0 ARM Spark 使用手册

17/08/29 10:08:24 INFO Utils: Successfully started service 'sparkDriver' on port 44574.17/08/29 10:08:25 INFO Slf4jLogger: Slf4jLogger started17/08/29 10:08:25 INFO Remoting: Starting remoting17/08/29 10:08:25 INFO Remoting: Remoting started; listening on addresses :[akka.tcp://[email protected]:40914]17/08/29 10:08:25 INFO Utils: Successfully started service 'sparkDriverActorSystem' on port 40914.17/08/29 10:08:25 INFO SparkEnv: Registering MapOutputTracker17/08/29 10:08:26 INFO SparkEnv: Registering BlockManagerMaster17/08/29 10:08:26 INFO DiskBlockManager: Created local directory at /tmp/blockmgr-15a7e195-dea9-4fef-a48e-8cd2c47a2cde17/08/29 10:08:26 INFO MemoryStore: MemoryStore started with capacity 511.1 MB17/08/29 10:08:26 INFO SparkEnv: Registering OutputCommitCoordinator17/08/29 10:08:26 INFO Server: jetty-8.y.z-SNAPSHOT17/08/29 10:08:26 INFO AbstractConnector: Started [email protected]:404017/08/29 10:08:26 INFO Utils: Successfully started service 'SparkUI' on port 4040.17/08/29 10:08:26 INFO SparkUI: Started SparkUI at http://192.168.0.97:404017/08/29 10:08:27 INFO Executor: Starting executor ID driver on host localhost17/08/29 10:08:27 INFO Executor: Using REPL class URI: http://192.168.0.97:4200617/08/29 10:08:27 INFO Utils: Successfully started service 'org.apache.spark.network.netty.NettyBlockTransferService' on port 36227.17/08/29 10:08:27 INFO NettyBlockTransferService: Server created on 3622717/08/29 10:08:27 INFO BlockManagerMaster: Trying to register BlockManager17/08/29 10:08:27 INFO BlockManagerMasterEndpoint: Registering block manager localhost:36227 with 511.1 MB RAM, BlockManagerId(driver, localhost, 36227)17/08/29 10:08:27 INFO BlockManagerMaster: Registered BlockManager17/08/29 10:08:31 INFO EventLoggingListener: Logging events to hdfs:///spark-history/local-150397250693117/08/29 10:08:31 INFO SparkILoop: Created spark context..Spark context available as sc.17/08/29 10:08:35 INFO HiveContext: Initializing execution hive, version 1.2.117/08/29 10:08:35 INFO ClientWrapper: Inspected Hadoop version: 2.7.317/08/29 10:08:35 INFO ClientWrapper: Loaded org.apache.hadoop.hive.shims.Hadoop23Shims for Hadoop version 2.7.317/08/29 10:08:37 INFO HiveMetaStore: 0: Opening raw store with implemenation class:org.apache.hadoop.hive.metastore.ObjectStore17/08/29 10:08:37 INFO ObjectStore: ObjectStore, initialize called17/08/29 10:08:38 INFO Persistence: Property hive.metastore.integral.jdo.pushdown unknown - will be ignored17/08/29 10:08:38 INFO Persistence: Property datanucleus.cache.level2 unknown - will be ignored

24北京红象云腾系统技术有限公司 www.redoop.com

Page 25: Web viewRedoop CRH 5.0 ARM Spark使用手册. 1. 北京红象云腾系统技术有限公司

Redoop CRH 5.0 ARM Spark 使用手册

17/08/29 10:08:39 WARN Connection: BoneCP specified but not present in CLASSPATH (or one of dependencies)17/08/29 10:08:41 WARN Connection: BoneCP specified but not present in CLASSPATH (or one of dependencies)17/08/29 10:08:46 INFO ObjectStore: Setting MetaStore object pin classes with hive.metastore.cache.pinobjtypes="Table,StorageDescriptor,SerDeInfo,Partition,Database,Type,FieldSchema,Order"17/08/29 10:08:49 INFO Datastore: The class "org.apache.hadoop.hive.metastore.model.MFieldSchema" is tagged as "embedded-only" so does not have its own datastore table.17/08/29 10:08:49 INFO Datastore: The class "org.apache.hadoop.hive.metastore.model.MOrder" is tagged as "embedded-only" so does not have its own datastore table.17/08/29 10:08:55 INFO Datastore: The class "org.apache.hadoop.hive.metastore.model.MFieldSchema" is tagged as "embedded-only" so does not have its own datastore table.17/08/29 10:08:55 INFO Datastore: The class "org.apache.hadoop.hive.metastore.model.MOrder" is tagged as "embedded-only" so does not have its own datastore table.17/08/29 10:08:56 INFO MetaStoreDirectSql: Using direct SQL, underlying DB is DERBY17/08/29 10:08:56 INFO ObjectStore: Initialized ObjectStore17/08/29 10:08:56 WARN ObjectStore: Version information not found in metastore. hive.metastore.schema.verification is not enabled so recording the schema version 1.2.017/08/29 10:08:57 WARN ObjectStore: Failed to get database default, returning NoSuchObjectException17/08/29 10:08:58 INFO HiveMetaStore: Added admin role in metastore17/08/29 10:08:58 INFO HiveMetaStore: Added public role in metastore17/08/29 10:08:58 INFO HiveMetaStore: No user is added in admin role, since config is empty17/08/29 10:08:58 INFO HiveMetaStore: 0: get_all_databases17/08/29 10:08:58 INFO audit: ugi=hdfs ip=unknown-ip-addr

cmd=get_all_databases17/08/29 10:08:58 INFO HiveMetaStore: 0: get_functions: db=default pat=*17/08/29 10:08:58 INFO audit: ugi=hdfs ip=unknown-ip-addr cmd=get_functions: db=default pat=*17/08/29 10:08:58 INFO Datastore: The class "org.apache.hadoop.hive.metastore.model.MResourceUri" is tagged as "embedded-only" so does not have its own datastore table.17/08/29 10:08:59 INFO SessionState: Created HDFS directory: /tmp/hive/hdfs17/08/29 10:09:00 INFO SessionState: Created local directory: /tmp/hdfs17/08/29 10:09:00 INFO SessionState: Created local directory: /tmp/64feb891-e177-4fd2-a1c1-ded0e9f2c80b_resources

25北京红象云腾系统技术有限公司 www.redoop.com

Page 26: Web viewRedoop CRH 5.0 ARM Spark使用手册. 1. 北京红象云腾系统技术有限公司

Redoop CRH 5.0 ARM Spark 使用手册

17/08/29 10:09:00 INFO SessionState: Created HDFS directory: /tmp/hive/hdfs/64feb891-e177-4fd2-a1c1-ded0e9f2c80b17/08/29 10:09:00 INFO SessionState: Created local directory: /tmp/hdfs/64feb891-e177-4fd2-a1c1-ded0e9f2c80b17/08/29 10:09:00 INFO SessionState: Created HDFS directory: /tmp/hive/hdfs/64feb891-e177-4fd2-a1c1-ded0e9f2c80b/_tmp_space.db17/08/29 10:09:00 INFO HiveContext: default warehouse location is /user/hive/warehouse17/08/29 10:09:00 INFO HiveContext: Initializing HiveMetastoreConnection version 1.2.1 using Spark classes.17/08/29 10:09:00 INFO ClientWrapper: Inspected Hadoop version: 2.7.317/08/29 10:09:00 INFO ClientWrapper: Loaded org.apache.hadoop.hive.shims.Hadoop23Shims for Hadoop version 2.7.317/08/29 10:09:03 INFO metastore: Trying to connect to metastore with URI thrift://test02:908317/08/29 10:09:03 INFO metastore: Connected to metastore.17/08/29 10:09:04 INFO SessionState: Created local directory: /tmp/4cc67792-d3c6-4dda-9fcf-b6c34ab66d50_resources17/08/29 10:09:04 INFO SessionState: Created HDFS directory: /tmp/hive/hdfs/4cc67792-d3c6-4dda-9fcf-b6c34ab66d5017/08/29 10:09:04 INFO SessionState: Created local directory: /tmp/hdfs/4cc67792-d3c6-4dda-9fcf-b6c34ab66d5017/08/29 10:09:04 INFO SessionState: Created HDFS directory: /tmp/hive/hdfs/4cc67792-d3c6-4dda-9fcf-b6c34ab66d50/_tmp_space.db17/08/29 10:09:04 INFO SparkILoop: Created sql context (with Hive support)..SQL context available as sqlContext.

scala>

接下来,我们读取“demo”这个文件:scala> val rdd1=sc.textFile("hdfs://Kylin:8020/tmp/demo") 17/08/30 08:43:57 INFO MemoryStore: Block broadcast_0 stored as values in memory (estimated size 309.7 KB, free 309.7 KB)17/08/30 08:43:57 INFO MemoryStore: Block broadcast_0_piece0 stored as bytes in memory (estimated size 25.8 KB, free 335.5 KB)17/08/30 08:43:58 INFO BlockManagerInfo: Added broadcast_0_piece0 in memory on localhost:36999 (size: 25.8 KB, free: 511.1 MB)17/08/30 08:43:58 INFO SparkContext: Created broadcast 0 from textFile at <console>:27rdd1: org.apache.spark.rdd.RDD[String] = hdfs://Kylin:8020/tmp/demo MapPartitionsRDD[1] at textFile at <console>:27

scala> val rdd2=rdd1.flatMap(_.split(" ")).map(x=>(x,1)).reduceByKey(_+_)26北京红象云腾系统技术有限公司 www.redoop.com

Page 27: Web viewRedoop CRH 5.0 ARM Spark使用手册. 1. 北京红象云腾系统技术有限公司

Redoop CRH 5.0 ARM Spark 使用手册

17/08/30 08:45:13 INFO FileInputFormat: Total input paths to process : 1rdd2: org.apache.spark.rdd.RDD[(String, Int)] = ShuffledRDD[4] at reduceByKey at <console>:29

scala> rdd2.collect17/08/30 08:45:46 INFO SparkContext: Starting job: collect at <console>:3217/08/30 08:45:47 INFO DAGScheduler: Registering RDD 3 (map at <console>:29)17/08/30 08:45:47 INFO DAGScheduler: Got job 0 (collect at <console>:32) with 2 output partitions17/08/30 08:45:47 INFO DAGScheduler: Final stage: ResultStage 1 (collect at <console>:32)17/08/30 08:45:47 INFO DAGScheduler: Parents of final stage: List(ShuffleMapStage 0)17/08/30 08:45:47 INFO DAGScheduler: Missing parents: List(ShuffleMapStage 0)17/08/30 08:45:47 INFO DAGScheduler: Submitting ShuffleMapStage 0 (MapPartitionsRDD[3] at map at <console>:29), which has no missing parents17/08/30 08:45:47 INFO MemoryStore: Block broadcast_1 stored as values in memory (estimated size 4.2 KB, free 339.7 KB)17/08/30 08:45:47 INFO MemoryStore: Block broadcast_1_piece0 stored as bytes in memory (estimated size 2.3 KB, free 342.0 KB)17/08/30 08:45:47 INFO BlockManagerInfo: Added broadcast_1_piece0 in memory on localhost:36999 (size: 2.3 KB, free: 511.1 MB)17/08/30 08:45:47 INFO SparkContext: Created broadcast 1 from broadcast at DAGScheduler.scala:100617/08/30 08:45:47 INFO DAGScheduler: Submitting 2 missing tasks from ShuffleMapStage 0 (MapPartitionsRDD[3] at map at <console>:29)17/08/30 08:45:47 INFO TaskSchedulerImpl: Adding task set 0.0 with 2 tasks17/08/30 08:45:47 INFO TaskSetManager: Starting task 0.0 in stage 0.0 (TID 0, localhost, partition 0,ANY, 2117 bytes)17/08/30 08:45:47 INFO TaskSetManager: Starting task 1.0 in stage 0.0 (TID 1, localhost, partition 1,ANY, 2117 bytes)17/08/30 08:45:47 INFO Executor: Running task 1.0 in stage 0.0 (TID 1)17/08/30 08:45:47 INFO Executor: Running task 0.0 in stage 0.0 (TID 0)17/08/30 08:45:47 INFO HadoopRDD: Input split: hdfs://Kylin:8020/tmp/demo:0+1017/08/30 08:45:47 INFO HadoopRDD: Input split: hdfs://Kylin:8020/tmp/demo:10+1017/08/30 08:45:47 INFO deprecation: mapred.tip.id is deprecated. Instead, use mapreduce.task.id17/08/30 08:45:47 INFO deprecation: mapred.task.id is deprecated. Instead, use mapreduce.task.attempt.id17/08/30 08:45:47 INFO deprecation: mapred.task.is.map is deprecated. Instead, use mapreduce.task.ismap17/08/30 08:45:47 INFO deprecation: mapred.task.partition is deprecated. Instead, use mapreduce.task.partition

27北京红象云腾系统技术有限公司 www.redoop.com

Page 28: Web viewRedoop CRH 5.0 ARM Spark使用手册. 1. 北京红象云腾系统技术有限公司

Redoop CRH 5.0 ARM Spark 使用手册

17/08/30 08:45:47 INFO deprecation: mapred.job.id is deprecated. Instead, use mapreduce.job.id17/08/30 08:45:48 INFO Executor: Finished task 1.0 in stage 0.0 (TID 1). 2254 bytes result sent to driver17/08/30 08:45:48 INFO Executor: Finished task 0.0 in stage 0.0 (TID 0). 2254 bytes result sent to driver17/08/30 08:45:48 INFO TaskSetManager: Finished task 1.0 in stage 0.0 (TID 1) in 851 ms on localhost (1/2)17/08/30 08:45:48 INFO TaskSetManager: Finished task 0.0 in stage 0.0 (TID 0) in 945 ms on localhost (2/2)17/08/30 08:45:48 INFO TaskSchedulerImpl: Removed TaskSet 0.0, whose tasks have all completed, from pool 17/08/30 08:45:48 INFO DAGScheduler: ShuffleMapStage 0 (map at <console>:29) finished in 1.090 s17/08/30 08:45:48 INFO DAGScheduler: looking for newly runnable stages17/08/30 08:45:48 INFO DAGScheduler: running: Set()17/08/30 08:45:48 INFO DAGScheduler: waiting: Set(ResultStage 1)17/08/30 08:45:48 INFO DAGScheduler: failed: Set()17/08/30 08:45:48 INFO DAGScheduler: Submitting ResultStage 1 (ShuffledRDD[4] at reduceByKey at <console>:29), which has no missing parents17/08/30 08:45:48 INFO MemoryStore: Block broadcast_2 stored as values in memory (estimated size 2.6 KB, free 344.6 KB)17/08/30 08:45:48 INFO MemoryStore: Block broadcast_2_piece0 stored as bytes in memory (estimated size 1590.0 B, free 346.1 KB)17/08/30 08:45:48 INFO BlockManagerInfo: Added broadcast_2_piece0 in memory on localhost:36999 (size: 1590.0 B, free: 511.1 MB)17/08/30 08:45:48 INFO SparkContext: Created broadcast 2 from broadcast at DAGScheduler.scala:100617/08/30 08:45:48 INFO DAGScheduler: Submitting 2 missing tasks from ResultStage 1 (ShuffledRDD[4] at reduceByKey at <console>:29)17/08/30 08:45:48 INFO TaskSchedulerImpl: Adding task set 1.0 with 2 tasks17/08/30 08:45:48 INFO TaskSetManager: Starting task 0.0 in stage 1.0 (TID 2, localhost, partition 0,NODE_LOCAL, 1894 bytes)17/08/30 08:45:48 INFO TaskSetManager: Starting task 1.0 in stage 1.0 (TID 3, localhost, partition 1,NODE_LOCAL, 1894 bytes)17/08/30 08:45:48 INFO Executor: Running task 0.0 in stage 1.0 (TID 2)17/08/30 08:45:48 INFO Executor: Running task 1.0 in stage 1.0 (TID 3)17/08/30 08:45:48 INFO ShuffleBlockFetcherIterator: Getting 1 non-empty blocks out of 2 blocks17/08/30 08:45:48 INFO ShuffleBlockFetcherIterator: Getting 2 non-empty blocks out of 2 blocks17/08/30 08:45:48 INFO ShuffleBlockFetcherIterator: Started 0 remote fetches in 19 ms17/08/30 08:45:48 INFO ShuffleBlockFetcherIterator: Started 0 remote fetches in 19

28北京红象云腾系统技术有限公司 www.redoop.com

Page 29: Web viewRedoop CRH 5.0 ARM Spark使用手册. 1. 北京红象云腾系统技术有限公司

Redoop CRH 5.0 ARM Spark 使用手册

ms17/08/30 08:45:48 INFO Executor: Finished task 0.0 in stage 1.0 (TID 2). 1337 bytes result sent to driver17/08/30 08:45:48 INFO Executor: Finished task 1.0 in stage 1.0 (TID 3). 1311 bytes result sent to driver17/08/30 08:45:48 INFO TaskSetManager: Finished task 0.0 in stage 1.0 (TID 2) in 171 ms on localhost (1/2)17/08/30 08:45:48 INFO TaskSetManager: Finished task 1.0 in stage 1.0 (TID 3) in 164 ms on localhost (2/2)17/08/30 08:45:48 INFO DAGScheduler: ResultStage 1 (collect at <console>:32) finished in 0.177 s17/08/30 08:45:48 INFO TaskSchedulerImpl: Removed TaskSet 1.0, whose tasks have all completed, from pool 17/08/30 08:45:48 INFO DAGScheduler: Job 0 finished: collect at <console>:32, took 1.678901 sres1: Array[(String, Int)] = Array((three 3,1), (one 1,1), (two 2,1))

demo 中的数据已经被转为Array[(String, Int)] = Array((three 3,1), (one 1,1), (two 2,1))

五、 Spark 的运维

Spark 使用 RDD来表达数据集,可以直接从HDFS 或者Hbase 中读取数据。由于启用了内存分布数据集,Spark 大大优化了迭代类工作负载,适合机器学习、数据挖掘等高级智能分析应用,根据业务需求可定制化。

29北京红象云腾系统技术有限公司 www.redoop.com

Page 30: Web viewRedoop CRH 5.0 ARM Spark使用手册. 1. 北京红象云腾系统技术有限公司

Redoop CRH 5.0 ARM Spark 使用手册

5.1 Spark 服务的管理

5.1.1 启动,停止,重启 Spark 服务

您也可以进入服务状态页面进行操作,有两种进入服务状态页面的方法:1. 直接点击“状态”主页面上的 Spark框2. 选择顶部菜单栏中的“服务”,在下拉菜单中选择操作目标服务.

30北京红象云腾系统技术有限公司 www.redoop.com

Page 31: Web viewRedoop CRH 5.0 ARM Spark使用手册. 1. 北京红象云腾系统技术有限公司

Redoop CRH 5.0 ARM Spark 使用手册

5.2 Spark 服务的监控

5.2.1 指标监控

进入 Spark 服务状态页面,页面的下端会有很多监控控件,你可以查看不同时间段的指标。如下图所示:

5.2.2 Spark 服务的概要监控

点击 Spark状态页面左边的菜单栏,弹出 HDFS 完整的菜单栏。点击概要,如下图所示:

31北京红象云腾系统技术有限公司 www.redoop.com

Page 32: Web viewRedoop CRH 5.0 ARM Spark使用手册. 1. 北京红象云腾系统技术有限公司

Redoop CRH 5.0 ARM Spark 使用手册

Spark 角色:角色 描述SparkHistory Server 通过配置可以在 Application执行的过程中记录下了日志

事件信息。

5.3 Spark 服务的配置

点击 Spark 服务,进入配置。如下图所示:

32北京红象云腾系统技术有限公司 www.redoop.com

Page 33: Web viewRedoop CRH 5.0 ARM Spark使用手册. 1. 北京红象云腾系统技术有限公司

Redoop CRH 5.0 ARM Spark 使用手册

六、Spark 安全

Spark目前已经支持以共享秘钥的方式进行身份认证。开启身份认证配置参数为 spark.authenticate 。这个配置参数决定了 Spark 通讯协议是否使用共享秘钥做身份验证。验证过程就是一个基本的握手过程,确保通讯双方都有相同的秘钥并且可以互相通信。如果共享秘钥不同,双方是不允许通信的。共享秘钥可用以下方式创建:

对于以 YARN 方式部署的 Spark,将 spark.authenticate 设为 true 可以自动生成并分发共享秘钥。每个 Spark 应用会使用唯一的共享秘钥。而对于其他部署类型,需要在每个节点上设置 spark.authenticate.secret 参数。这个秘钥将会在由所有 Master/Workers 以及各个 Spark 应用共享。

33北京红象云腾系统技术有限公司 www.redoop.com

Page 34: Web viewRedoop CRH 5.0 ARM Spark使用手册. 1. 北京红象云腾系统技术有限公司

Redoop CRH 5.0 ARM Spark 使用手册

6.1 Web UI

Spark UI 也可以通过配置 spark.ui.filters 来使用 javax servlet filters 确保安全性,因为某些用户可能希望 web UI上的某些数据应该保密,并对其他用户不可见。用户可以自定义 javax servlet filter 来对登陆用户进行认证,Spark会根据用户的ACL(访问控制列表)来确保该登陆用户有权限访问某个 Spark 应用的 web

UI。Spark ACL 的行为可由 spark.acls.enable 和 spark.ui.view.acls 共同控制。注意,启动 Spark 应用的用户总是会有权限访问该应用对应的 UI。而在 YARN 模式下,Spark web UI会使用 YARN 的 web 应用代理机制,通过 Hadoop 过滤器进行认证。

Spark还支持修改运行中的 Spark 应用对应的 ACL 以便更改其权限控制,不过这可能会导致杀死应用或者杀死任务的动作。这一特性由 spark.acls.enable 和 spark.modify.acls 共同控制。注意,如果你需要 web UI 的认证,比如为了能够在web UI上使用杀死应用的按钮,那么就需要将用户同时添加到 modify ACL 和view ACL 中。在 YARN上,控制用户修改权限的 modify ACL是通过 YARN接口传进来的。

Spark 可以允许多个管理员共同管理 ACL,而且这些管理员总是能够访问和修改所有的 Spark 应用。而管理员本身是由 spark.admin.acls 配置的。在一个共享的多用户集群中,你可能需要配置多个管理员,另外,该配置也可以用于支持开发人员调试 Spark 应用。

34北京红象云腾系统技术有限公司 www.redoop.com

Page 35: Web viewRedoop CRH 5.0 ARM Spark使用手册. 1. 北京红象云腾系统技术有限公司

Redoop CRH 5.0 ARM Spark 使用手册

6.2 事件日志

如果你启用了事件日志(event logging),那么这些日志对应的目录(spark.eventLog.dir)需要事先手动创建并设置好权限。如果你要限制这些日志文件的权限,首先还是要将日志目录的权限设为 drwxrwxrwxt,目录 owner 应该是启动 history server 的超级用户,对应的组限制为该超级用户所在组。这样其他所有用户就只能往该目录下写日志,但同时又不能删除或改名。事件日志文件只有在用户或者用户组具有读写权限时才能写入。

6.3 加密

Spark 对 Akka 和 HTTP协议(广播和文件服务器中使用)支持 SSL。同时,对数据块传输服务(block transfer service)支持 SASL 加密。Spark web UI暂时还不支持任何加密。

Spark 的临时数据存储,如:混洗中间文件、缓存数据或其他应用相关的临时文件,目前也没有加密。如果需要加密这些数据,只能通过配置集群管理器将数据存储到加密磁盘上。

SSL 配置

Spark SSL相关配置是层级式的。用户可以配置 SSL 的默认配置,以便支持所有的相关通讯协议,当然,如果设置了针对某个具体协议配置值,其值将会覆盖默认配置对应的值。这种方式主要是为了方便用户,用户可以轻松地为所有协

35北京红象云腾系统技术有限公司 www.redoop.com

Page 36: Web viewRedoop CRH 5.0 ARM Spark使用手册. 1. 北京红象云腾系统技术有限公司

Redoop CRH 5.0 ARM Spark 使用手册

议都配置好默认值,同时又不会影响针对某一个具体协议的特殊配置需求。通用的 SSL默认配置在 spark.ssl 这一配置命名空间下,对于 Akka 的 SSL 配置,在spark.ssl.akka 下,而对 用 于广播 和文件 服 务器中 的 HTTP 协议, 其 配 置 在 spark.ssl.fs 下。

SSL必须在每个节点上都配置好,并且包括各个使用特定通讯协议的相关模块。

6.4 YARN 模式

key-store 文件可以由客户端准备好,然后作为 Spark 应用的一部分分发到各个执行器( executor )上使 用 。 用 户 也 可 以 在 Spark 应 用 启 动前, 通 过 配 置 spark.yarn.dist.files 或者 spark.yarn.dist.archives 来部署 key-store文件。这些文件传输过程的加密是由 YARN 本身负责的,和 Spark就没什么关系了。

对于一些长期运行并且可以写 HDFS 的 Spark 应用,如:Spark Streaming 上的应用,可以用 spark-submit 的 –principal 和 –keytab 参数分别设置 principal 和 keytab 信息。keytab文件将会通过 Hadoop Distributed Cache(如果 YARN 配置了 SSL 并且 HDFS 启用 了加 密,那么分布 式缓 存的 传输也会被加 密) 复 制到Application Master 所在机器上。Kerberos 的登陆信息将会被 principal 和 keytab

周期性地刷新,同时 HDFS 所需的代理 token 也会被周期性的刷新,这样 Spark

应用就能持续地写入 HDFS 了。

36北京红象云腾系统技术有限公司 www.redoop.com

Page 37: Web viewRedoop CRH 5.0 ARM Spark使用手册. 1. 北京红象云腾系统技术有限公司

Redoop CRH 5.0 ARM Spark 使用手册

6.5 独立模式

独立模式下,用户需要为 master 和 worker 分别提供 key-store 和相关配置选项。这些配 置 可 以 通 过 在 SPARK_MASTER_OPTS 和 SPARK_WORKER_OPTS , 或者 SPARK_DEAMON_JAVA_OPTS环境变量中添加相应的 java 系统属性来设置。独立模式下,用户可以通过 worker 的 SSL设置来改变执行器(executor)的配置,因为这些执行器进程都是 worker 的子进程。不过需要注意的是,执行器如果需要启用本地 SSL 配置值(如:从 worker 进程继承而来的环境变量),而不是用户在客户端设置的值,就需要将 spark.ssl.userNodeLocalConf 设为 true。

准备 key-stores

key-stores 文件可以由 keytool 程序生成。keytool 相关参考文档见这里:here。独立模式下,配置 key-store 和 trust-store至少有这么几个基本步骤:

为每个节点生成一个秘钥对导出各节点秘钥对中的公匙(public key)到一个文件将所有这些公匙导入到一个 trust-store 文件中将该 trust-store文件发布到所有节点

6.6 配置 SASL 加密

启用认证后(spark.authenticate),数据块传输服务(block transfer service)可以 支 持 SASL 加 密 。如需 启 用 SASL 加 密 的话,还需 要 在 Spark 应 用 中设置

37北京红象云腾系统技术有限公司 www.redoop.com

Page 38: Web viewRedoop CRH 5.0 ARM Spark使用手册. 1. 北京红象云腾系统技术有限公司

Redoop CRH 5.0 ARM Spark 使用手册

spark.authenticate.enableSaslEncryption 为 true。

如果是开启 了外部混洗服 务 ( external shuffle service ) ,那么只需 要 将 spark.network.sasl.serverAlwaysEncrypt 设为 true即可禁止非加密的网络连接。因为这个配置一旦启用,所有未使用 SASL 加密的 Spark 应用都无法连接到外部混洗服务上。

6.7 配置网络安全端口

Spark 计算过程中大量使用网络通信,而有些环境中对网络防火墙的设置要求很严格。

客户服务

技术支持

感谢您使用北京红象云腾系统技术有限公司的产品和服务,如您在产品使用或服务中有任何技术问题,可以通过以下途径找到我们,我们的相关技术人员会给予解答。

38北京红象云腾系统技术有限公司 www.redoop.com

Page 39: Web viewRedoop CRH 5.0 ARM Spark使用手册. 1. 北京红象云腾系统技术有限公司

Redoop CRH 5.0 ARM Spark 使用手册

技术支持热线电话: 400-0389-155

微信公众号: redoop

官方网址: www.redoop.com

感谢您的支持,我们一直在努力!将服务做到极致是红象对用户的承诺。

39北京红象云腾系统技术有限公司 www.redoop.com