spark的初步认识

课程介绍

Spark入门、环境搭建、WordCount

Spark 概述

1- spark 历史

  • 2009年诞生于美国加州大学伯克利分校AMP 实验室,
  • 2014年2月,Spark 成为 Apache 的顶级项目

HADOOP复习回顾

HDFS:分布式存储系统

文件分区、分片:把大文件按 128M 切分成若干个小文件保存起来,一:便于存储,二:便于分布式计算

Yarn:资源调度系统

​ 调度的方式:

FIFO \ Fair \Capacity

spark 与 hadoop 的区别

HadoopSpark
类型基础平台, 包含计算, 存储, 调度分布式计算工具
场景大规模数据集上的批处理迭代计算, 交互式计算, 流计算
价格对机器要求低, 便宜对内存有要求, 相对较贵
编程范式Map+Reduce, API 较为底层, 算法适应性差RDD组成DAG有向无环图, API 较为顶层, 方便使用
数据存储结构MapReduce中间计算结果存在HDFS磁盘上, 延迟大RDD中间运算结果存在内存中 , 延迟小
运行方式Task以进程方式维护, 任务启动慢Task以线程方式维护, 任务启动快

Spark 运行模式

Spark运行模式

1.local 本地模式(单机)–开发测试使用

​ 分为local单线程和local-cluster多线程

2.standalone 独立集群模式–开发测试使用

​ 典型的Mater/slave模式

3.standalone-HA高可用模式–生产环境使用

​ 基于standalone模式,使用zk搭建高可用,避免Master是有单点故障的

4.on yarn集群模式–生产环境使用

​ 运行在 yarn 集群之上,由 yarn 负责资源管理,Spark 负责任务调度和计算,

​ 好处:计算资源按需伸缩,集群利用率高,共享底层存储,避免数据跨集群迁移。

​ FIFO

​ Fair

​ Capacity

5.on mesos集群模式–国内使用较少

​ 运行在 mesos 资源管理器框架之上,由 mesos 负责资源管理,Spark 负责任务调度和计算

6.on cloud 集群模式–中小公司未来会更多的使用云服务

​ 比如 AWS 的 EC2,使用这个模式能很方便的访问 Amazon的 S3

Spark 运行环境

#本地模式

1- 下载,解压、改名(可选)
2- 开箱即用

直接启动bin目录下的spark-shell:

./spark-shell

3- 退出

​ :quit

4- 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,node02:7077
5.退出spark-shell
使用 :quit

读取本地文件

val textFile = sc.textFile("本地文件的路径名")
val counts = textFile.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ + _)
counts.collect//收集结果
// Array[(String, Int)] = Array((you,2), (hello,4), (me,1), (her,3))

读取 hdfs 文件

// 读取 hdfs 中的文件
val textFile = sc.textFile("hdfs的文件输入路径名")
// 对文件中的数据进行处理
val counts = textFile.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ + _)
// 将结果保存至文件
counts.saveAsTextFile("hdfs的文件输出路径名")

Standalone 集群模式

一:配置

修改Spark配置文件

1- 修改 spark-env.sh 文件

cd /export/servers/spark/conf

mv spark-env.sh.template spark-env.sh

vim spark-env.sh

#配置java环境变量 ( 注意修改为 你自己的 java 地址)
export JAVA_HOME=/export/servers/jdk1.8.0_141
#指定spark老大Master的IP
export SPARK_MASTER_HOST=node01
#指定spark老大Master的端口
export SPARK_MASTER_PORT=7077

2- 修改 slaves 文件

mv slaves.template slaves

vim slaves

node02
node03

3- 分发文件

●通过scp 命令将配置文件分发到其他机器上
scp -r /export/servers/spark node02:/export/servers
scp -r /export/servers/spark node03:/export/servers

二:启动 集群

●集群启动和停止
在主节点上启动spark集群
/export/servers/spark/sbin/start-all.sh 

在主节点上停止spark集群
/export/servers/spark/sbin/stop-all.sh

三: 查看web界面

正常启动spark集群后,查看spark的web界面,查看相关信息。

http://node01:8080/

四:测试

启动 Spark-shell

/export/servers/spark/bin/spark-shell --master spark://node01:7077

输入代码并执行

sc.textFile("hdfs://node01:8020/wordcount/input/words.txt")
.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ + _)
.saveAsTextFile("hdfs://node01:8020/wordcount/output222")

五:查看面板

Saprk 程序运行状态查看: web UI

http://node01:4040/jobs/

  • 注意,只有当 spark 程序 运行时,该页面才能看到结果,结束以后,该页面就打不开了
  • 集群模式下程序是在集群上运行的,不要直接读取本地文件,应该读取hdfs上的

Standalone-HA 集群模式

zookeeper 回顾:

/spark/standalone-ha/master001

订阅节点、发布节点

临时节点:主机A 创建临时节点 B ,如果A 宕机了,节点B 自动会被删除

其他节点 订阅 节点 B 的状态,当节点B 删除时,就知道 主机A 宕机

zookeeper 一键启动脚本:

Standalone-HA 配置

1- 修改 spark-env. sh 文件

●注释掉Master配置
#export SPARK_MASTER_HOST=node01

●在spark-env.sh添加SPARK_DAEMON_JAVA_OPTS,内容如下(注意 以下代码是一行 ):
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER  -Dspark.deploy.zookeeper.url=node01:2181,node02:2181,node03:2181  -Dspark.deploy.zookeeper.dir=/spark"

2- scp到其他节点

scp /export/servers/spark/conf/spark-env.sh node02:/export/servers/spark/conf/

scp /export/servers/spark/conf/spark-env.sh node03:/export/servers/spark/conf/

启动zk集群

分别启动三台zookeeper 主机

zkServer.sh start // 启动

zkServer.sh status // 查看状态

zkServer.sh stop // 停止

启动Spark_HA集群

node01上启动Spark集群执行

/export/servers/spark/sbin/start-all.sh

在node02 上单独启动 master 进程

/export/servers/spark/sbin/start-master.sh
  • 在启动的时候注意观察 node01:8080 和 node02:8080 中的信息

  • 启动成功后,node01 中显示 ALIVE 状态,node02 中显示 STANDBY 状态

●注意:

在普通模式下启动spark集群

	只需要在主节点上执行start-all.sh 就可以了

在高可用模式下启动spark集群

	先需要在任意一台主节点上执行start-all.sh 

	然后在另外一台主节点上单独执行start-master.sh

测试程序

一: 启动 spark-shell

/export/servers/spark/bin/spark-shell --master spark://node01:7077,node02:7077

二:执行程序

sc.textFile("hdfs://node01:8020/wordcount/input/words.txt")
.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ + _)
.saveAsTextFile("hdfs://node01:8020/wordcount/output3")

Spark 程序运行在 Yarn 集群中

Yarn集群运行模式要求:

  • 只需要有一台机器安装好spark即可
  • yarn 集群安装置完成

1- 修改配置文件 spark-env.sh

vim /export/servers/spark/conf/spark-env.sh

# 注意,路径要改为 你的 hadoop 配置文件所在路径
export HADOOP_CONF_DIR=/export/servers/hadoop-2.7.5/etc/hadoop

2- cluster 模式

在生产环境中用的最多的模式
执行命令:

/export/servers/spark/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/examples/jars/spark-examples_2.11-2.2.0.jar \
10

查看程序运行状态的界面:

http://node01:8088/cluster

3- client 模式[了解]

执行命令:

/export/servers/spark/bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode client \
--driver-memory 1g \
--executor-memory 1g \
--executor-cores 2 \
--queue default \
/export/servers/spark/examples/jars/spark-examples_2.11-2.2.0.jar \
10

4- cluster 模式与 client 模式的区别

Cluster 和 Client 模式最最本质的区别是:Driver程序运行在哪里!

运行在YARN集群中就是Cluster模式,

运行在客户端就是Client模式

配置历史日志

1- 当 spark 程序 运行时,通过 node01:4040 可以查看运行状态,程序结束后就看不到了。

使用 spark-submit 提交的方式 ,把任务 提交给 spark 集群

/export/servers/spark/bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://node01:7077,node02:7077 \
--executor-memory 1g \
--total-executor-cores 8 \
/export/servers/spark/examples/jars/spark-examples_2.11-2.2.0.jar \
10

Spark 历史服务器

1- 修改配置文件

●修改文件名
cd /export/servers/spark/conf
cp spark-defaults.conf.template spark-defaults.conf
●修改配置
vim spark-defaults.conf

spark.eventLog.enabled true
spark.eventLog.dir hdfs://node01:8020/sparklog

* 要手工创建 sparklog 目录
hdfs dfs -mkdir -p /sparklog

修改 spark-env.sh

vim spark-env.sh

export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=4000 -Dspark.history.retainedApplications=3 -Dspark.history.fs.logDirectory=hdfs://node01:8020/sparklog"

2- 同步配置文件

scp  -r /export/servers/spark/conf/ node02:/export/servers/spark/conf/
scp  -r /export/servers/spark/conf/ node03:/export/servers/spark/conf/

3- 启动历史服务器程序

/export/servers/spark/sbin/stop-all.sh
/export/servers/spark/sbin/start-all.sh 

在master上启动日志服务器

/export/servers/spark/sbin/start-history-server.sh

4- 查看页面:

http://node01:4000/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值