Spark 入门, 看这一篇就够了!

  1. 熟悉 Spark 相关概念
    什么是 Spark(官网:http://spark.apache.org

Spark 是一种快速、通用、可扩展的大数据分析引擎,2009 年诞生于加州大 学伯克利分校 AMPLab,2010 年开源,2013 年 6 月成为 Apache 孵化项目,2014 年 2 月成为 Apache 顶级项目。目前,Spark 生态系统已经发展成为一个包含多个 子项目的集合,其中包含 SparkSQL、Spark Streaming、GraphX、MLlib 等子项目, Spark 是基于内存计算的大数据并行计算框架。Spark 基于内存计算,提高了在大 数据环境下数据处理的实时性,同时保证了高容错性和高可伸缩性,允许用户将 Spark 部署在大量廉价硬件之上,形成集群。Spark 得到了众多大数据公司的支持, 这些公司包括 Hortonworks、IBM、Intel、Cloudera、MapR、Pivotal、百度、阿里、腾讯、京东、携程、优酷土豆。当前百度的 Spark 已应用于凤巢、大搜索、直达 号、百度大数据等业务;阿里利用 GraphX 构建了大规模的图计算和图挖掘系统, 实现了很多生产系统的推荐算法;腾讯 Spark 集群达到 8000 台的规模,是当前 已知的世界上最大的 Spark 集群。


Spark 是一个开源的类似于 Hadoop MapReduce 的通用的并行计算框架,Spark 基于 map reduce 算法实现的分布式计算,拥有 Hadoop MapReduce 所具有的优 点;但不同于 MapReduce 的是 Spark 中的 Job 中间输出和结果可以保存在内存中, 从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需 要迭代的 map reduce 的算法。


Spark 是 MapReduce 的替代方案,而且兼容 HDFS、Hive,可融入 Hadoop 的生态 系统,以弥补 MapReduce 的不足。


Spark 特点

与 Hadoop 的 MapReduce 相比,Spark 基于内存的运算要快 100 倍以上,基 于硬盘的运算也要快 10 倍以上。Spark 实现了高效的 DAG 执行引擎,可以通过 基于内存来高效处理数据流。
易用
Spark 支持 Java、Python 和 Scala 的 API,还支持超过 80 种高级算法,使用户可以快速构建不同的应用。而且 Spark 支持交互式的 Python 和 Scala 的 shell,可 以非常方便地在这些 shell 中使用 Spark 集群来验证解决问题的方法。
通用
Spark 提供了统一的解决方案。Spark 可以用于批处理、交互式查询 (Spark SQL)、实时流处理(Spark Streaming)、机器学习(Spark MLlib)和图 计算(GraphX)。这些不同类型的处理都可以在同一个应用中无缝使用。Spark 统一的解决方案非常具有吸引力,毕竟任何公司都想用统一的平台去处理遇到的 问题,减少开发和维护的人力成本和部署平台的物力成本。
兼容性
Spark 可以非常方便地与其他的开源产品进行融合。比如,Spark 可以使用 Hadoop 的 YARN 和 Apache Mesos 作为它的资源管理和调度器,器,并且可以处 理所有 Hadoop 支持的数据,包括 HDFS、HBase 和 Cassandra 等。这对于已经部 署 Hadoop 集群的用户特别重要,因为不需要做任何数据迁移就可以使用 Spark 的强大处理能力。Spark 也可以不依赖于第三方的资源管理和调度器,它实现了 Standalone 作为其内置的资源管理和调度框架,这样进一步降低了 Spark 的使用 门槛,使得所有人都可以非常容易地部署和使用 Spark。此外,Spark 还提供了在 EC2 上部署 Standalone 的 Spark 集群的工具。

  1. 搭建一个 Spark 集群
    下载 spark 安装包 下载地址: spark 官网
    在这里插入图片描述

这里我们使用 spark-2.0.2-bin-hadoop2.7 版本.


下载好之后上传, 解压
在这里插入图片描述

tar -zxvf spark-2.0.2-bin-hadoop2.7.tgz

重命名

mv spark-2.0.2-bin-hadoop2.7 spark

在这里插入图片描述
修改配置文件

#配置文件目录在 /opt/bigdata/spark/conf
#vi spark-env.sh 修改文件(先把 spark-env.sh.template 重命名 为 spark-env.sh)
#配置java环境变量
export JAVA_HOME=/export/server/jdk1.8.0_65

#指定spark老大Master的IP
#export SPARK_MASTER_HOST=node-1

#指定spark老大Master的端口
export SPARK_MASTER_PORT=7077

#通过zookeeper搭建高可用spark集群
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER  -Dspark.deploy.zookeeper.url=node-1:2181,node-2:2181,node-3:2181  -Dspark.deploy.zookeeper.dir=/spark"

#指定HDFS配置文件目录
export HADOOP_CONF_DIR=/export/server/hadoop-2.7.4/etc/hadoop

在这里插入图片描述
参数说明 spark.deploy.recoveryMode:恢复模式(Master 重新启动的模式) 有三种:
(1)ZooKeeper
(2) FileSystem
(3)NONE

spark.deploy.zookeeper.url:ZooKeeper 的 Server 地址 spark.deploy.zookeeper.dir:保存集群元数据信息的文件、目录。 包括 Worker,Driver 和 Application。
注意:在普通模式下启动 spark 集群,只需要在主机上面执行 start-all.sh 就可以了。 在高可用模式下启动 spark 集群,先需要在任意一台节点上启动 start-all.sh 命令。 然后在另外一台节点上单独启动 master。
命令

start-master.sh
#修改文件(先把 slaves.template 重命名为 slaves)
vi slaves

在这里插入图片描述
拷贝配置到其他主机

#通过 scp 命令将 spark 的安装目录拷贝到其他机器上 
scp -r /export/server/spark hdp-node-02:/export/server/ 
scp -r /export/server/spark hdp-node-03:/export/server/

配置 spark 环境变量

vi /etc/profile
#添加
export SPARK_HOME=/export/server/spark
export PATH=${
   SPARK_HOME}/bin:${
   SPARK_HOME}/sbin:$PATH

在这里插入图片描述
在这里插入图片描述
注意最后 source /etc/profile 刷新配置


高可用部署说明
Spark Standalone 集群是 Master-Slaves 架构的集群模式,和大部分的 Master-Slaves 结构集群一样,存在着 Master 单点故障的问题。如何解决这个 单点故障的问题,Spark 提供了两种方案:

(1)基 于 文 件 系 统 的 单 点 恢 复 (Single-Node Recovery with Local File System)。主要用于开发或测试环境。当 spark 提供目录保存 spark Application 和 worker 的注册信息,并将他们的恢复状态写入该目录中,这时,一旦 Master 发生故障,就可以通过重新启动 Master 进程(sbin/start-master.sh),恢复 已运行的 spark Application 和 worker 的注册信息。

(2)基于 zookeeper 的 Standby Masters(Standby Masters with ZooKeeper)。 用于生产模式。其基本原理是通过 zookeeper 来选举一个 Master,其他 的 Master 处于 Standby 状态。将 spark 集群连接到同一个 ZooKeeper 实例并启 动多个 Master,利用 zookeeper 提供的选举和状态保存功能,可以使一个 Master 被选举成活着的 master,而其他 Master 处于 Standby 状态。如果现任 Master死去,另一个 Master 会通过选举产生,并恢复到旧的 Master 状态,然后恢复调 度。整个恢复过程可能要 1-2 分钟。


#在主节点上启动 spark
spark/sbin/start-all.sh
#在从节点上启动master
start-master.sh
#在主节点上停止 spark 集群
spark/sbin/stop-all.sh
#在从节点上停止master
stop-master.sh

正常启动 spark 集群后,可以通过访问 http://node-01:8080,查看 spark 的 web 界面, 查看相关信息。


Spark 角色介绍
Spark 是基于内存计算的大数据并行计算框架。因为其基于内存计算,比 Hadoop 中 MapReduce 计算框架具有更高的实时性,同时保证了高效容错性和可伸缩性。从 2009 年诞生于 AMPLab 到现在已经成为 Apache 顶级开源项目,并成 功应用于商业集群中,学习 Spark 就需要了解其架构。 Spark 架构图如下:
在这里插入图片描述
Spark 架构使用了分布式计算中 master-slave 模型,master 是集群中含 有 master 进程的节点,slave 是集群中含有 worker 进程的节点。

Driver Program :运⾏main 函数并且新建 SparkContext 的程序。
Application:基于 Spark 的应用程序,包含了 driver 程序和集群上的 executor。
Cluster Manager:指的是在集群上获取资源的外部服务。目前有三种类型
(1)Standalone: spark 原生的资源管理,由 Master 负责资源的分配
(2)Apache Mesos:与 hadoop MR 兼容性良好的一种资源调度框架
(3)Hadoop Yarn: 主要是指 Yarn 中的 ResourceManager

Worker Node:集群中任何可以运行 Application 代码的节点,在 Standalone 模式中指的是通过 slaves 文件配置的 Worker 节点,在 Spark on Yarn 模式 下就是 NodeManager 节点
Executor:是在一个 worker node 上为某应⽤启动的⼀个进程,该进程负责 运⾏行任务,并且负责将数据存在内存或者磁盘上。每个应⽤都有各自独立 的 executor。
Task:被送到某个 executor 上的工作单元。

  1. 编写简单的 Spark 应用程序

执行第一个 spark 程序

#普通模式提交任务
bin/spark-submit --class org.apache.spark.examples.SparkPi --master spark://node-01:7077 --executor-memory 1G --total-executor-cores 2 examples/jars/spark-examples_2.11-2.0.2.jar 10

该算法是利用蒙特·卡罗算法求圆周率 PI,通过计算机模拟大量的随机数, 最终会计算出比较精确的π。


在高可用模式下,因为涉及到多个 Master,所以对于应用程序的提交就有了 一点变化,因为应用程序需要知道当前的 Master 的 IP 地址和端口。这种 HA 方 案处理这种情况很简单,只需要在SparkContext指向一个Master列表就可以了, 如 spark://host1:port1,host2:port2,host3:port3,应用程序会轮询列表,找 到活着的 Master。

bin/spark-submit --class org.apache.spark.examples.SparkPi --master spark://node-1:7077,node-2:7077  --executor-memory 1G --total-executor-cores 1 examples/jars/spark-examples_2.11-2.0.2.jar 10
[root@node-1 spark]# bin/spark-submit --class org.apache.spark.examples.SparkPi --master spark://node-1:7077,node-2:7077  --executor-memory 1G --total-executor-cores 1 examples/jars/spark-examples_2.11-2.0.2.jar 10
20
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值