spark入门

1. 下载

在spark下载地址,下载spark二进制包。
http://spark.apache.org/downloads.html
spark入门
这里不仅仅需要选择spark版本,也需要选择spark编译环境的包。
spark中文文档
http://spark.apachecn.org/#/
spark英文文档
http://spark.apache.org/docs/latest/

这里借用网络上的一张图片来描述spark的生态圈:
spark入门
之前在hadoop安装中安装好了hadoop。不过,spark有自己的资源调度,所以,我们只需要启动hadoop的hdfs即可。

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

2. 二进制包目录

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

  • bin: 和spark进行交互的可执行文件
    spark入门
  • conf: 配置目录
    spark入门
  • data: 一些spark计算的配置数据
    spark入门
  • examples: spark一些例子
    spark入门
    spark入门
  • jars: spark的自己的jar包
    spark入门
  • kuberbetes: spark对于k8s的支持,包含一些dockerfile等
    spark入门
  • LICENSE:开源协议
  • licenses:开源授权协议等文件
  • logs:spark的日志文件
  • NOTICE:公告信息
  • python: spark对python做的兼容支持
  • R: spark对R语言做的兼容支持
  • README.md:使用须知?^v^
  • RELEASE:发布包编译环境
    spark入门
  • sbin:启动脚本,spark的一些启动的脚本,主要是使用配置文件里面设置的参数,启动bin目录里面的二进制文件。
    spark入门
  • work: 记录了spark提交的作业历史
    spark入门
    主要保存了作业的日志,包括输出与异常。
  • yarn: spark对yarn的集成,之前就说过,spark自己集成了资源调度,所以我们安装好hadoop后,只需要启动hdfs即可,yarn可以交给spark自己管理。
    spark入门

3. 配置

因为spark是基于hadoop的,所以,如果你将hadoop的环境搭建好了,那么在hadoop的基础上搭建spark就很容易,甚至说,非常的简单(简单配置,不包含调优):
首先,conf是spark的配置目录:
spark入门
这里面是一个个的template文件,默认是不存在任何配置文件的。
为了让spark能够启动,我们需要配置一些环境变量
cp spark-env.sh.template spark-env.sh
首先,拷贝模板,得到环境变量的配置文件
vim spark-env.sh
然后进行配置
spark入门
主要是配置JAVA_HOME(JAVA_HOME可以省去,因为在hadoop中,已经配置了JAVA_HOME),SPARK_MASTER_HOST,SPARK_MASTER_IP,SPARK_MASTER_PORT
然后配置worker:
cp slaves.template slaves
得到worker的配置文件
spark入门
在这个文件里面填入worker的主机名即可。

4. 启动

将配置好的spark二进制解压目录,拷贝到worker机器上的相同目录下。
然后在spark的sbin目录下执行 ./start-all.sh即可
使用jps验证
master
spark入门
worker
spark入门
访问界面http://master-host:8080/
spark入门

5. 体验

5.1 数据准备

我准备了一个log文件,大小是460M左右
spark入门
首先我们使用hdfs的命令,将文件存入hdfs中:
hadoop fs -mkdir /data
hadoop fs -put /data/ /study/data/real.log
存入成功后,使用hadoop fs -ls /data可以查看在hdfs中的文件
spark入门

5.2 spark-shell

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

编程语言 对应shell
scala spark-shell
java spark-class
python pyspark
R sparkR

spark-shell在bin目录下:
spark入门
这种方式启动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入门
此时在```http://10.0.228.117:8080/上可以看到一个活动:
spark入门
这个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已经将log文件加载为了RDD[String]了

5.4 简单体验

println(lines.count())计算日志文件有多少行
spark入门
spark入门
println(lines.filter(l => l.contains("Stop")).count())统计包含指定字符的日志的行数
spark入门
这里展示了将这个任务分为几个子任务进行处理
spark入门
这是执行结果
println(lines.flatMap(l => l.split(" ").toStream).count())日志文件有多少个单词
spark入门
spark入门

6. spark UI

6.1 UI 入口

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

6.2 作业汇总

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

6.3 作业计算过程

计算过程描述
spark入门

6.4 作业DAG

job的dag
spark入门

6.5 作业描述指标

job描述指标
spark入门

6.6 作业调度

job调度(基于6.5的指标)
spark入门

6.7 作业拆分

job拆分任务描述
spark入门

6.8 作业执行

job执行worker
spark入门

6.9 任务执行详细

job拆分任务执行详细
spark入门

6.10 任务日志

job某个拆分任务的日志
spark入门