Spark学习

Spark 概述

1.什么是 Spark

1、定义
Spark 是一种基于 内存 的快速、通用、可扩展的大数据分析引擎。
2、历史
2009 年诞生于加州大学伯克利分校 AMPLab ,项目采用 Scala 编写
2010 年开源 ;
2013 6 月成为 Apache 孵化项目
2014 2 月成为 Apache 顶级项目。

2 Spark 内置模块

Spark Core 实现了 Spark 的基本功能,包含任务调度、内存管理、错误恢复、与存储
系统交互等模块。 Spark Core 中还包含了对弹性分布式数据集 (Resilient Distributed
DataSet ,简称 RDD) API 定义。
Spark SQL Spark 用来操作结构化数据的程序包。通过 Spark SQL ,我们可以使用
SQL 或者 Apache Hive 版本的 SQL 方言 (HQL) 来查询数据。 Spark SQL 支持多种数据源,
比如 Hive 表、 Parquet 以及 JSON 等。
Spark Streaming Spark 提供的对实时数据进行流式计算的组件。提供了用来操作数
据流的 API ,并且与 Spark Core 中的 RDD API 高度对应。
Spark MLlib 提供常见的机器学习 (ML) 功能的程序库。包括分类、回归、聚类、协同
过滤等,还提供了模型评估、数据 导入等额外的支持功能。
集群管理器: Spark 设计为可以高效地在一个计算节点到数千个计算节点之间伸缩计
算。为了实现这样的要求,同时获得最大灵活性, Spark 支持在各种集群管理器 (Cluster
Manager) 上运行,包括 Hadoop YARN Apache Mesos ,以及 Spark 自带的一个简易调度
器,叫作独立调度器。
Spark 得到了众多大数据公司的支持,这些公司包括 Hortonworks IBM Intel
Cloudera MapR Pivotal 、百度、阿里、腾讯、京东、携程、优酷土豆。当前百度的
Spark 已应用于大搜索、直达号、百度大数据等业务;阿里利用 GraphX 构建了大规模的图
计算和图挖掘系统,实现了很多生产系统的推荐算法;腾讯 Spark 集群达到 8000 台的规
模,是当前已知的世界上最大的 Spark 集群。

3 Spark 特点

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

Spark 运行模式

1.Spark 安装地址

1 .官网地址
http://spark.apache.org/
2 .文档查看地址
https://spark.apache.org/docs/2.1.1/
3 .下载地址
https://spark.apache.org/downloads.html

Local 模式

1 概述

概述
Local 模式就是运行在一台计算机上的模式,通常就是用于在本机上练手和测试。
它可以通过以下集中方式设置 Master
local: 所有计算都运行在一个线程当中,没有任何并行计算,通常我们在本机执行
一些测试代码,或者练手,就用这种模式 ;
local[K]: 指定使用几个线程来运行计算,比如 local[4] 就是运行 4 Worker 线程。通
常我们的 Cpu 有几个 Core ,就指定几个线程,最大化利用 Cpu 的计算能力 ;
local[*]: 这种模式直接帮你按照 Cpu 最多 Cores 来设置线程数了。

2 安装使用

1)上传并解压 spark 安装包
[wzw@hadoop102 sorfware]$ tar
-zxvf spark-2.1.1-bin
hadoop2.7.tgz -C /opt/module/
[wzw@hadoop102 module]$ mv spark-2.1.1-bin-hadoop2.7 spark
2)官方求 PI 案例
[wzw@hadoop102 spark]$ bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--executor-memory 1G \
--total-executor-cores 2 \
./examples/jars/spark-examples_2.11-2.1.1.jar \
100
1 )基本语法
bin/spark-submit \
--class <main-class>
--master <master-url> \
--deploy-mode <deploy-mode> \
--conf <key>=<value> \
... # other options
<application-jar> \
[application-arguments]
2 )参数说明:
--master 指定 Master 的地址,默认为 Local
--class: 你的应用的启动类 ( org.apache.spark.examples.SparkPi)
--deploy-mode: 是否发布你的驱动到 worker 节点 (cluster) 或者作为一个本地客户端
(client) (default: client)*
--conf: 任意的 Spark 配置属性, 格式 key=value. 如果值包含空格,可以加引号
“key=value”
application-jar: 打包好的应用 jar, 包含依赖 . 这个 URL 在集群中全局可见。 比如
hdfs:// 共享存储系统, 如果是 file:// path , 那么所有的节点的 path 都包含同样的 jar
application-arguments: 传给 main() 方法的参数
--executor-memory 1G 指定每个 executor 可用内存为 1G
--total-executor-cores 2 指定每个 executor 使用的 cup 核数为 2
3)结果展示
该算法是利用蒙特·卡罗算法求 PI
4)准备文件
[wzw@hadoop102 spark]$ mkdir input
input 下创建 3 个文件 1.txt 2.txt ,并输入以下内容
hello atguigu
hello spark
5)启动 spark-shell
[wzw@hadoop102 spark]$ bin/spark-shell
Using Spark's default log4j profile: org/apache/spark/log4j
defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR,
use setLogLevel(newLevel).
18/09/29 08:50:52 WARN NativeCodeLoader: Unable to load native
hadoop library for your platform... using builtin-java classes
where applicable
18/09/29 08:50:58 WARN ObjectStore: Failed to get database
global_temp, returning NoSuchObjectException
Spark context Web UI available at http://192.168.9.102:4040
Spark context available as 'sc' (master = local[*], app id = local-
1538182253312).
Spark session available as 'spark'.
Welcome to
____ __
/ __/__ ___ _____/ /
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 2.1.1
/_/
Using Scala version 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java
1.8.0_144)
Type in expressions to have them evaluated.
Type :help for more information.
scala>
开启另一个 CRD 窗口
[wzw@hadoop102 spark]$ jps
3627 SparkSubmit
4047 Jps
可登录 hadoop102:4040 查看程序运行
6)运行 WordCount 程序
scala>sc.textFile("input").flatMap(_.split("
")).map((_,1)).reduceByKey(_+_).collect
res0: Array[(String, Int)] = Array((hadoop,6), (oozie,3), (spark,3),
(hive,3), (atguigu,3), (hbase,6))
scala>
可登录 hadoop102:4040 查看程序运行

3.提交流程

1)提交任务分析:
重要角色:
Driver (驱动器)
Spark 的驱动器是执行开发程序中的 main 方法的进程。它负责开发人员编写的用来创
SparkContext 、创建 RDD ,以及进行 RDD 的转化操作和行动操作代码的执行。如果你
是用 spark shell ,那么当你启动 Spark shell 的时候,系统后台自启了一个 Spark 驱动器程
序,就是在 Spark shell 中预加载的一个叫作 sc SparkContext 对象。如果驱动器程序终
止,那么 Spark 应用也就结束了。主要负责:
1 )把用户程序转为任务
2 )跟踪 Executor 的运行状况
3 )为执行器节点调度任务
4 UI 展示应用运行状况
Executor (执行器)
Spark Executor 是一个工作进程,负责在 Spark 作业中运行任务,任务间相互独立。
Spark 应用启动时, Executor 节点被同时启动,并且始终伴随着整个 Spark 应用的生命周
期而存在。如果有 Executor 节点发生了故障或崩溃, Spark 应用也可以继续执行,会将出
错节点上的任务调度到其他 Executor 节点上继续运行。主要负责:
1 )负责运行组成 Spark 应用的任务,并将结果返回给驱动器进程;
2 )通过自身的块管理器( Block Manager )为用户程序中要求缓存的 RDD 提供内存式
存储。 RDD 是直接缓存在 Executor 进程内的,因此任务可以在运行时充分利用缓存数据加
速运算.

4 数据流程

textFile("input") :读取本地文件 input 文件夹数据;
flatMap(_.split(" ")) :压平操作,按照空格分割符将一行数据映射成一个个单词;
map((_,1)) :对每一个元素操作,将单词映射为元组;
reduceByKey(_+_) :按照 key 将值进行聚合,相加;
collect :将数据收集到 Driver 端展示。

Standalone 模式

1 概述

构建一个由 Master+Slave 构成的 Spark 集群,Spark 运行在集群中。

2 安装使用

1)进入 spark 安装目录下的 conf 文件夹
[wzw@hadoop102 module]$ cd spark/conf/
2)修改配置文件名称
[wzw@hadoop102 conf]$ mv slaves.template slaves
[wzw@hadoop102 conf]$ mv spark-env.sh.template spark-env.sh
3)修改 slave 文件,添加 work 节点:
[wzw@hadoop102 conf]$ vim slaves
hadoop102
hadoop103
hadoop104
4)修改 spark-env.sh 文件,添加如下配置:
[wzw@hadoop102 conf]$ vim spark-env.sh
SPARK_MASTER_HOST=hadoop101
SPARK_MASTER_PORT=7077
5)分发 spark
[wzw@hadoop102 module]$ xsync spark/
6)启动
[wzw@hadoop102 spark]$ sbin/start-all.sh
[wzw@hadoop102 spark]$ util.sh
================wzw@hadoop102================
3330 Jps
3238 Worker
3163 Master
================wzw@hadoop103================
2966 Jps
2908 Worker
================atguigu@hadoop104================
2978 Worker
3036 Jps
网页查看: hadoop102:8080
注意: 如果遇到 “JAVA_HOME not set” 异常,可以在 sbin 目录下的 spark-config.sh 文件
中加入如下配置:
export JAVA_HOME=XXXX
7)官方求 PI 案例
[wzw@hadoop102 spark]$ bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://hadoop102:7077 \
--executor-memory 1G \
--total-executor-cores 2 \
./examples/jars/spark-examples_2.11-2.1.1.jar \
100
8)启动 spark shell
/opt/module/spark/bin/spark-shell \
--master spark://hadoop101:7077 \
--executor-memory 1g \
--total-executor-cores 2
参数: --master spark://hadoop102:7077 指定要连接的集群的 master
执行 WordCount 程序
scala>sc.textFile("input").flatMap(_.split("
")).map((_,1)).reduceByKey(_+_).collect
res0: Array[(String, Int)] = Array((hadoop,6), (oozie,3), (spark,3),
(hive,3), (atguigu,3), (hbase,6))
scala>

3 JobHistoryServer 配置

1)修改 spark-default.conf.template 名称
[wzw@hadoop102 conf]$ mv spark-defaults.conf.template spark
defaults.conf
2)修改 spark-default.conf 文件,开启 Log
[wzw@hadoop102 conf]$ vi spark-defaults.conf
spark.eventLog.enabled true
spark.eventLog.dir hdfs://hadoop102:9000/directory
注意: HDFS 上的目录需要提前存在。
3)修改 spark-env.sh 文件,添加如下配置:
[wzw@hadoop102 conf]$ vi spark-env.sh
export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080
-Dspark.history.retainedApplications=30
-Dspark.history.fs.logDirectory=hdfs://hadoop101:9000/directory"
参数描述:
spark.eventLog.dir Application 在运行过程中所有的信息均记录在该属性指定的路径下
spark.history.ui.port=18080 WEBUI 访问的端口号为 18080
spark.history.fs.logDirectory=hdfs://hadoop102:9000/directory 配置了该属性后,在 start
history-server.sh 时就无需再显式的指定路径, Spark History Server 页面只展示该指定路径
下的信息
spark.history.retainedApplications=30 指定保存 Application 历史记录的个数,如果超过
这个值,旧的应用程序信息将被删除,这个是内存中的应用数,而不是页面上显示的应用
数。
4)分发配置文件
[wzw@hadoop102 conf]$ xsync spark-defaults.conf
[wzw@hadoop102 conf]$ xsync spark-env.sh
5)启动历史服务
[wzw@hadoop102 spark]$ sbin/start-history-server.sh
6)再次执行任务
[wzw@hadoop102 spark]$ bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://hadoop101:7077 \
--executor-memory 1G \
--total-executor-cores 2 \
./examples/jars/spark-examples_2.11-2.1.1.jar \
100
7 )查看历史服务
hadoop102:18080
  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
你想要学习Java Spark吗?Java Spark是一个用于大数据处理的开源框架,它提供了简单易用的API和工具来处理大规模数据集。如果你已经熟悉Java编程,并且对大数据处理有兴趣,学习Java Spark是一个不错的选择。 要开始学习Java Spark,你可以按照以下步骤进行: 1. 了解基本概念:首先,你需要了解什么是大数据分布式计算,以及为什么需要使用框架如Spark来处理大规模数据集。 2. 学习Java和Spark的基础知识:确保你对Java编程语言和相关的基础知识有一定的了解。然后,你可以开始学习Spark的基本概念,如RDD(弹性分布式数据集)和Spark的核心概念。 3. 安装和配置Spark:在你的开发环境中安装和配置Spark。你可以从Spark官方网站下载并按照它们提供的指南进行设置。 4. 编写Spark应用程序:使用Java编写Spark应用程序来处理大规模数据集。你可以使用Spark的API来进行数据转换、过滤、聚合等操作。 5. 调优和优化:学习如何调优和优化你的Spark应用程序,以提高性能和效率。这包括了解Spark的调优技巧、并行处理和集群配置等。 6. 实践项目:尝试使用Spark处理一些真实的大数据集,以提升你的经验和技能。 此外,还有许多在线教程、文档和资源可供你学习Java Spark。你可以参考Spark官方文档、在线教程和示例代码来加深理解和提高技能。 祝你学习Java Spark的过程愉快!如果你还有其他问题,可以继续问我。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kevin-wzw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值