spark 入门
- 1. 下载
- 2. 二进制包目录
- 3. 配置
- 4. 启动
- 5. 体验
- 6.1 UI 入口
- 6.2 作业汇总
- 6.3 作业计算过程
- 6.4 作业DAG
- 6.5 作业描述指标
- 6.6 作业调度
- 6.7 作业拆分
- 6.8 作业执行
- 6.9 任务执行详细
- 6.10 任务日志
1. 下载
在spark下载地址,下载spark二进制包。
http://spark.apache.org/downloads.html
这里不仅仅需要选择spark版本,也需要选择spark编译环境的包。
spark中文文档
http://spark.apachecn.org/#/
spark英文文档
http://spark.apache.org/docs/latest/这里借用网络上的一张图片来描述spark的生态圈:
之前在hadoop安装中安装好了hadoop。不过,spark有自己的资源调度,所以,我们只需要启动hadoop的hdfs即可。
因为spark是基于hadoop的,所以在第一步选择了hadoop的版本后,需要选择编译二进制包的hadoop的环境。选择之后,第三部会给出下载地址,点击进去,选择一个镜像,下载二进制包即可。
2. 二进制包目录
在这个位置解压缩,接下来看下spark二进制包的目录结构。
- bin: 和spark进行交互的可执行文件
- conf: 配置目录
- data: 一些spark计算的配置数据
- examples: spark一些例子
- jars: spark的自己的jar包
- kuberbetes: spark对于k8s的支持,包含一些dockerfile等
- LICENSE:开源协议
- licenses:开源授权协议等文件
- logs:spark的日志文件
- NOTICE:公告信息
- python: spark对python做的兼容支持
- R: spark对R语言做的兼容支持
- README.md:使用须知?
^v^
- RELEASE:发布包编译环境
- sbin:启动脚本,spark的一些启动的脚本,主要是使用配置文件里面设置的参数,启动bin目录里面的二进制文件。
- work: 记录了spark提交的作业历史
- 主要保存了作业的日志,包括输出与异常。
- yarn: spark对yarn的集成,之前就说过,spark自己集成了资源调度,所以我们安装好hadoop后,只需要启动hdfs即可,yarn可以交给spark自己管理。
3. 配置
因为spark是基于hadoop的,所以,如果你将hadoop的环境搭建好了,那么在hadoop的基础上搭建spark就很容易,甚至说,非常的简单(简单配置,不包含调优):
首先,conf是spark的配置目录:
这里面是一个个的template文件,默认是不存在任何配置文件的。
为了让spark能够启动,我们需要配置一些环境变量
cp spark-env.sh.template spark-env.sh
首先,拷贝模板,得到环境变量的配置文件
vim spark-env.sh
然后进行配置
主要是配置JAVA_HOME(JAVA_HOME可以省去,因为在hadoop中,已经配置了JAVA_HOME),SPARK_MASTER_HOST,SPARK_MASTER_IP,SPARK_MASTER_PORT
然后配置worker:
cp slaves.template slaves
得到worker的配置文件
在这个文件里面填入worker的主机名即可。
4. 启动
将配置好的spark二进制解压目录,拷贝到worker机器上的相同目录下。
然后在spark的sbin目录下执行 ./start-all.sh
即可
使用jps
验证
master
worker
访问界面http://master-host:8080/
5. 体验
5.1 数据准备
我准备了一个log文件,大小是460M左右
首先我们使用hdfs的命令,将文件存入hdfs中:
hadoop fs -mkdir /data
hadoop fs -put /data/ /study/data/real.log
存入成功后,使用hadoop fs -ls /data
可以查看在hdfs中的文件
5.2 spark-shell
spark提供了交互界面,供开发人员开发调试等使用。
如果你不是使用scala开发,而是其他语言,需要启动对应语言的交互shell
编程语言 | 对应shell |
scala | spark-shell |
java | spark-class |
python | pyspark |
R | sparkR |
spark-shell在bin目录下:
这种方式启动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连接成功后:
此时在```http://10.0.228.117:8080/上可以看到一个活动:
这个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已经将log文件加载为了RDD[String]了
5.4 简单体验
println(lines.count())
计算日志文件有多少行
println(lines.filter(l => l.contains("Stop")).count())
统计包含指定字符的日志的行数
这里展示了将这个任务分为几个子任务进行处理
这是执行结果
println(lines.flatMap(l => l.split(" ").toStream).count())
日志文件有多少个单词
6. spark UI
6.1 UI 入口
在```http://spark-master-host:4040/jobs可以查看我们之前执行的三次作业:
6.2 作业汇总
作业用时,作业资源消耗等都可以查看
6.3 作业计算过程
计算过程描述
6.4 作业DAG
job的dag
6.5 作业描述指标
job描述指标
6.6 作业调度
job调度(基于6.5的指标)
6.7 作业拆分
job拆分任务描述
6.8 作业执行
job执行worker
6.9 任务执行详细
job拆分任务执行详细
6.10 任务日志
job某个拆分任务的日志