spark 入门

1. 下载

在spark下载地址,下载spark二进制包。

​http://spark.apache.org/downloads.html​

spark入门_spark使用教程


这里不仅仅需要选择spark版本,也需要选择spark编译环境的包。

spark中文文档

​http://spark.apachecn.org/#/​

spark英文文档

​http://spark.apache.org/docs/latest/​​这里借用网络上的一张图片来描述spark的生态圈:

spark入门_spark体验_02


之前在hadoop安装中安装好了hadoop。不过,spark有自己的资源调度,所以,我们只需要启动hadoop的hdfs即可。

因为spark是基于hadoop的,所以在第一步选择了hadoop的版本后,需要选择编译二进制包的hadoop的环境。选择之后,第三部会给出下载地址,点击进去,选择一个镜像,下载二进制包即可。

2. 二进制包目录

spark入门_spark入门_03


在这个位置解压缩,接下来看下spark二进制包的目录结构。

spark入门_spark可视化界面_04

  • bin: 和spark进行交互的可执行文件
  • spark入门_spark可视化界面_05

  • conf: 配置目录
  • spark入门_spark使用教程_06

  • data: 一些spark计算的配置数据
  • spark入门_spark使用教程_07

  • examples: spark一些例子
  • spark入门_spark可视化界面_08


  • spark入门_spark可视化界面_09

  • jars: spark的自己的jar包
  • spark入门_spark可视化界面_10

  • kuberbetes: spark对于k8s的支持,包含一些dockerfile等
  • spark入门_spark入门_11

  • LICENSE:开源协议
  • licenses:开源授权协议等文件
  • logs:spark的日志文件
  • NOTICE:公告信息
  • python: spark对python做的兼容支持
  • R: spark对R语言做的兼容支持
  • README.md:使用须知?​​^v^​
  • RELEASE:发布包编译环境
  • spark入门_spark可视化界面_12

  • sbin:启动脚本,spark的一些启动的脚本,主要是使用配置文件里面设置的参数,启动bin目录里面的二进制文件。
  • spark入门_spark入门_13

  • work: 记录了spark提交的作业历史
  • spark入门_spark集群安装_14

  • 主要保存了作业的日志,包括输出与异常。
  • yarn: spark对yarn的集成,之前就说过,spark自己集成了资源调度,所以我们安装好hadoop后,只需要启动hdfs即可,yarn可以交给spark自己管理。
  • spark入门_spark可视化界面_15

3. 配置

因为spark是基于hadoop的,所以,如果你将hadoop的环境搭建好了,那么在hadoop的基础上搭建spark就很容易,甚至说,非常的简单(简单配置,不包含调优):

首先,conf是spark的配置目录:

spark入门_spark入门_16


这里面是一个个的template文件,默认是不存在任何配置文件的。

为了让spark能够启动,我们需要配置一些环境变量

​cp spark-env.sh.template spark-env.sh​​ 首先,拷贝模板,得到环境变量的配置文件

​vim spark-env.sh​

然后进行配置

spark入门_spark入门_17


主要是配置JAVA_HOME(JAVA_HOME可以省去,因为在hadoop中,已经配置了JAVA_HOME),SPARK_MASTER_HOST,SPARK_MASTER_IP,SPARK_MASTER_PORT

然后配置worker:

​cp slaves.template slaves​

得到worker的配置文件

spark入门_spark使用教程_18


在这个文件里面填入worker的主机名即可。

4. 启动

将配置好的spark二进制解压目录,拷贝到worker机器上的相同目录下。

然后在spark的sbin目录下执行 ​​./start-all.sh​​即可

使用​​jps​​验证

master

spark入门_spark可视化界面_19


worker

spark入门_spark入门_20


访问界面​​http://master-host:8080/​

spark入门_spark入门_21

5. 体验

5.1 数据准备

我准备了一个log文件,大小是460M左右

spark入门_spark体验_22


首先我们使用hdfs的命令,将文件存入hdfs中:

​hadoop fs -mkdir /data​​​​hadoop fs -put /data/ /study/data/real.log​

存入成功后,使用​​hadoop fs -ls /data​​可以查看在hdfs中的文件

spark入门_spark使用教程_23

5.2 spark-shell

spark提供了交互界面,供开发人员开发调试等使用。
如果你不是使用scala开发,而是其他语言,需要启动对应语言的交互shell

编程语言

对应shell

scala

spark-shell

java

spark-class

python

pyspark

R

sparkR

spark-shell在bin目录下:

spark入门_spark体验_24


这种方式启动spark-shell是默认启动单机模式的spark。

在交互式shell中使用ctrl+d退出

既然我们已将搭建好了集群的spark,那么就应该使用集群的spark。

​spark-shell --master spark://host-10-0-228-117:7077​​​ 当然:​​spark-shell --master spark://10.0.228.117:7077​​也是可以的

交互式shell连接成功后:

spark入门_spark入门_25


此时在```http://10.0.228.117:8080/上可以看到一个活动:

spark入门_spark入门_26


这个shell的一些信息在界面上都可以看到。

在启动shell的时候,也可以指定shell的资源,名字等信息。

5.3 加载数据

我们在5.1中,将一个日志文件放到了hdfs中了,此时我们在shell中使用sc对象读取文件

​val lines = sc.textFile("hdfs://host-10-0-228-117:8020/data/real.log")​

spark入门_spark入门_27


此时,spark已经将log文件加载为了RDD[String]了

5.4 简单体验

​println(lines.count())​​计算日志文件有多少行

spark入门_spark使用教程_28


spark入门_spark集群安装_29


​println(lines.filter(l => l.contains("Stop")).count())​​统计包含指定字符的日志的行数

spark入门_spark体验_30


这里展示了将这个任务分为几个子任务进行处理

spark入门_spark可视化界面_31


这是执行结果

​println(lines.flatMap(l => l.split(" ").toStream).count())​​日志文件有多少个单词

spark入门_spark集群安装_32


spark入门_spark可视化界面_33

6. spark UI

6.1 UI 入口

在```http://spark-master-host:4040/jobs可以查看我们之前执行的三次作业:

spark入门_spark体验_34

6.2 作业汇总

作业用时,作业资源消耗等都可以查看

spark入门_spark入门_35

6.3 作业计算过程

计算过程描述

spark入门_spark集群安装_36

6.4 作业DAG

job的dag

spark入门_spark可视化界面_37

6.5 作业描述指标

job描述指标

spark入门_spark体验_38

6.6 作业调度

job调度(基于6.5的指标)

spark入门_spark使用教程_39

6.7 作业拆分

job拆分任务描述

spark入门_spark集群安装_40

6.8 作业执行

job执行worker

spark入门_spark使用教程_41

6.9 任务执行详细

job拆分任务执行详细

spark入门_spark集群安装_42

6.10 任务日志

job某个拆分任务的日志

spark入门_spark可视化界面_43