★注意1:
大家之前安装的如果是CDH的Hadoop那么安装Spark的时候使用红线标出的重新编译之后的CDH版Spark即可
安装
●下载Spark安装包
下载地址:http://spark.apache.org/downloads.html
●解压重命名
解压
重命名
●注意:如果有权限问题,可以修改为root,方便学习时操作,实际中使用运维分配的用户和权限即可
chown -R root /export/servers/spark 转变文件拥有者
chgrp -R root /export/servers/spark 转变文件所属用户组
●解压目录说明:
bin 可执行脚本
conf 配置文件
data 示例程序使用数据
examples 示例程序
jars 依赖 jar 包
python pythonAPI
R R 语言 API
sbin 集群管理命令
yarn 整合yarn需要的东东
启动spark-shell
●开箱即用
直接启动bin目录下的spark-shell:
./spark-shell
●spark-shell说明
1.直接使用./spark-shell
表示使用local 模式启动,在本机启动一个SparkSubmit进程
2.还可指定参数 --master,如:
spark-shell --master local[N] 表示在本地模拟N个线程来运行当前任务
spark-shell --master local[*] 表示使用当前机器上所有可用的资源
3.不携带参数默认就是
spark-shell --master local[*]
4.后续还可以使用--master指定集群地址,表示把任务提交到集群上运行,如
./spark-shell --master spark://node01:7077
5.退出spark-shell
使用 :quit
初体验-读取本地文件
●准备数据
vim /root/words.txt
hello me you her
hello you her
hello her
hello
val textFile = sc.textFile("file:///root/words.txt")
val counts = textFile.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ + _)
counts.collect//收集结果
// Array[(String, Int)] = Array((you,2), (hello,4), (me,1), (her,3))
初体验-读取HDFS文件
●准备数据
上传文件到hdfs
hadoop fs -put /root/words.txt /wordcount/input/words.txt
目录如果不存在可以创建
hadoop fs -mkdir -p /wordcount/input
结束后可以删除测试文件夹
hadoop fs -rm -r /wordcount
val textFile = sc.textFile("hdfs://node01:8020/wordcount/input/words.txt")
val counts = textFile.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ + _)
counts.saveAsTextFile("hdfs://node01:8020/wordcount/output")
什么是spark
spark是基于内存的,用于大规模数据处理(离线计算,实时计算,快速查询(交互查询))的统一分析引擎
spark特点
Spark特点
快:
Spark计算速度是MapReduce计算速度的10-100倍
易用:(算法多)
MR支持1种计算模型,Spsark支持更多的计算模型。
通用:
Spark 能够进行离线计算、交互式查询(快速查询)、实时计算、机器学习、图计算等
兼容性:
Spark支持大数据中的Yarn调度,支持mesos。可以处理hadoop计算的数据。
Spark发展史
1、2009年诞生于美国加州大学伯克利分校AMP 实验室
2、2014年,Spark 成为 Apache 的顶级项目
Spark为什么会流行
原因1:优秀的数据模型和计算抽象
Spark将多个RDD之间的中间数据写入内存,MR将中间数据写入硬盘,内存比硬盘速度快
原因2:完善的生态圈
Spark Core:Spark基本功能
Spark SQL : 操作结构化数据
Spark Streaming: 对实时数据进行流式计算
Spark MLlib: 机器学习
GraphX:用于图计算
Hadoop与Spark的对比
| Hadoop | Spark |
类型 | 基础平台, 包含计算, 存储, 调度 | 分布式计算工具 |
场景 | 大规模数据集上的批处理 | 迭代计算, 交互式计算, 流计算 |
价格 | 对机器要求低, 便宜 | 对内存有要求, 相对较贵 |
编程范式 | Map+Reduce, API 较为底层, 算法适应性差 | RDD组成DAG有向无环图, API 较为顶层, 方便使用 |
数据存储结构 | MapReduce中间计算结果存在HDFS磁盘上, 延迟大 | RDD中间运算结果存在内存中 , 延迟小 |
运行方式 | Task以进程方式维护, 任务启动慢 | Task以线程方式维护, 任务启动快 |
Spark运行模式
1.local本地模式(单机)--开发测试使用
2.standalone独立集群模式--开发测试使用
3.standalone-HA高可用模式--生产环境使用
4.on yarn集群模式--生产环境使用
5.on mesos集群模式--国内使用较少
6.on cloud集群模式--中小公司未来会更多的使用云服务
Spark安装部署
1、local本地模式安装部署
第一步:上传并解压
第二步:开箱即用(不需要修改配置)
启动spark
./spark-shell
没有参数表示 等于 local[*]
./spark-shell --master local[*]
Local表示在本机运行。[*]表示可用的所有资源
./spark-shell --master local[n]
Local表示在本机运行。[n]表示使用n个线程
Spark初体验
1、读取本地数据计算WordCount
val textFile = sc.textFile("file:///opt/tt.txt")
val counts = textFile.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ + _)
2、读取hdfs集群数据计算WordCount
val textFile = sc.textFile("hdfs://node01:8020/tt.txt")
val counts = textFile.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ + _)
counts.saveAsTextFile("hdfs://node01:8020/ttt")
standalone集群模式
第一步:软件上传并解压
第二步修改配置文件
export JAVA_HOME=${JAVA_HOME}
export SPARK_MASTER_HOST=node01
export SPARK_MASTER_PORT=7077
修改slaves
Node02
Node03
第三步:软件包的分发
scp -r spark-2.2.0-bin-2.6.0-cdh5.14.0 node02:$PWD
scp -r spark-2.2.0-bin-2.6.0-cdh5.14.0 node03:$PWD
第四步:启动集群
./start-all.sh –master spark://node01:7077
第五步:验证
sc.textFile("hdfs://node01:8020/tt.txt")
.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ + _)
.saveAsTextFile("hdfs://node01:8020/tttt")
standalone-HA高可用模式
HA解决master的单点问题
第一步:上传解压
第二步:修改配置文件
export JAVA_HOME=${JAVA_HOME}
export SPARK_MASTER_PORT=7077
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zooke
eper.url=node01:2181,node02:2181,node03:2181 -Dspark.deploy.zookeeper.dir=/spark"
"../conf/spark-env.sh" 67L, 3966C written
第三步:同步更新的配置到其他节点
scp spark-env.sh node02:/$PWD
scp spark-env.sh node03:/$PWD
第四步:启动zookeeper
第五步:启动spark
启动集群 ./start-all.sh
启动第二个Master(node02/node03)
第六步:验证HA
on yarn集群模式
前期准备
- hadoop安装部署好
2、安装部署单机版本的spark
第一步:安装包的上传并解压
第二步:修改配置文件
export JAVA_HOME=${JAVA_HOME}
export SPARK_MASTER_HOST=node01
export SPARK_MASTER_PORT=7077
export HADOOP_CONF_DIR=/export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop
第三步测试
使用spark-submits
/export/servers/spark-2.2.0-bin-2.6.0-cdh5.14.0/bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode cluster \
--driver-memory 1g \
--executor-memory 1g \
--executor-cores 2 \
--queue default \
/export/servers/spark-2.2.0-bin-2.6.0-cdh5.14.0/examples/jars/spark-examples_2.11-2.2.0.jar \
10
参数的说明
--master local [n]/[*]/spark://HOST:PORT/YARN 指定 Master 的地址
--name "appName" 指定程序运行的名称
--class 程序的main方法所在的类
--jars xx.jar 程序额外使用的 jar 包
--driver-memory 512m Driver运行所需要的内存, 默认1g
--executor-memory 2g 指定每个 executor 可用内存为 2g, 默认1g
--executor-cores 1 指定每一个 executor 可用的核数
--total-executor-cores 2 指定整个集群运行任务使用的 cup 核数为 2 个
--queue default 指定任务的对列
--deploy-mode 指定运行模式(client/cluster)