Spark 简介

1. 什么是 Spark

官网:http://spark.apache.org
Spark 是一个快速、通用、可扩展的大数据分析引擎。
Spark 是基于内存计算的大数据并行计算框架

1.1 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 可以使用 Hadoop 的 YARN 和 Apache Mesos 作为它的资源管理和调度器,并且可以处理所有 Hadoop 支持的数据,包括 HDFS, HBase 和 Cassandra 等

1.2 Spark 的子项目

Spark Core: 以下子项目都基于 Spark Core, Spark Core 实现了 Spark 的基本功能,包含任务调度、内存管理、错误恢复、与存储系统交互等模块。Spark Core 中还包含了对弹性分布式数据集(RDD: Resilient Distributed Dataset)的 API 定义
Spark SQL: 结构化数据处理。是 Spark 用来操作结构化数据的程序包,通过 Spark SQL,可以使用 SQL 或者 Apache Hive 版本的 SQL 来查询数据。Spark SQL 支持多种数据源,比如:Hive 表、Parquet 以及 JSON 等
Spark Streaming: 实时计算。是 Spark 提供的对实时数据进行流式计算的组件。提供了用来操作数据流的 API,并且与 Spark Core 中的 RDD API 高度对应
Spark MLlib: 机器学习。提供常见的机器学习(ML)功能的程序库。包括分类、回归、聚类、协同过滤等,还提供了模型评估、数据导入等额外的支持功能

2. Spark 集群安装

2.1 Spark 集群的角色

  1. 从物理层面上来看,Spark 主要分为以下两种节点
  • Master 节点
  • Worker 节点
    Master 节点主要运行集群管理器的中心化部分,所承载的作用是分配 Application 到 Worker 节点,维护 Worker 节点,Driver, Application 的状态。
    Worker 节点负责具体的业务运行。
  1. 从 Spark 程序运行的层面来看,Spark 主要分为以下两种节点
    驱动节点
    执行器节点

2.2 Spark 的部署方式

Spark 的部署方式主要有:Local, Local-Cluster, Standalone, Yarn, Mesos,其中最具有代表性的是 Standalone 部署模式。

3. 执行 Spark 程序

3.1 执行第一个 Spark 程序

cd ${SPARK_HOME}
./bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://hdp01:7077 \
--executor-memory 1G \
--total-executor-cores 2 \
${SPARK_HOME}/examples/jars/spark-examples_2.11-2.2.2.jar \
100

参数说明:

  • –master: 指定 Master 的地址
  • –executor-memory: 指定每个 executor 可用内存大小
  • –total-executor-cores: 指定每个 executor 使用的 CPU 核心数

Note: 该算法用的是蒙特·卡罗算法求 PI

3.2 Spark 应用提交

打包好自己编写的程序后,就可以使用 ./bin/spark-submit 脚本来启动应用了。这个脚本负责设置 Spark 使用的 classpath 和依赖,支持不同类型的集群管理器和发布模式。

./bin/spark-submit \
--class <main-class> \
--master <master-url> \
--deploy-mode <deploy-mode> \
--conf <key>=<value> \
... # other options
<application-jar> \
[application-arguments]

一些常用的选项:
--class: 应用的启动类(如 org.apache.spark.example.SparkPi)
--master:集群的 Master URL(如 spark://hdp01:7077)
--deploy-mode:是否发布你的驱动程序到 worker 节点(Cluster),或者作为一个本地客户端(Client),默认为 Client
--conf:任意的 Spark 配置属性,格式为:Key-Value。如果值包含空格,可以加引号:“key=value”.
application-jar: 打包好的应用 jar 包,包含依赖。这个 URL 在集群中全局可见。比如 hdfs:// 共享存储系统,如果是 file://path,那么所有的节点的 path 下都包含同样的 jar 包
application-argument:传给 main() 方法的参数

Master URL 可以有如下设置:

  • local  本地以一个 worker 线程运行(例如非并行的情况)
  • local[n]  本地以 K worker 线程运行(理想情况下,n 设置为机器的 CPU 核心数)
  • spark://HOST:PORT  连接到指定的 Spark standalone cluster master。端口是 Master 配置的端口,缺省值为 7077
  • mesos://HOST:PORT   连接到指定的 Mesos 集群。PORT 是配置的 Mesos 端口,缺省为 5050,或者如果 Mesos 使用 ZooKeeper, 格式为:mesos://zk//…
  • yarn-client  以 Client 模式连接到 YARN Cluster,集群的位置基于 HADOOP_CONF_DIR 变量找到
  • yarn-cluster  以 Cluster 模式连接到 YARN Cluster,集群的位置基于 HADOOP_CONF_DIR 变量找到

查看 spark-submit 的全部参数:

./bin/spark-submit -h

3.3 启动 Spark Shell

spark-shell 是 Spark 自带的交互式 Shell 程序,方便用户进行交互式编程,用户可以在该命令行下用 Scala 编写 Spark 程序。

启动 Spark Shell

./bin/spark-shell \
--master spark://hdp01:7077 \
--executor-memory 2G \
--total-executor-cores 2

Note: 如果启动 Spark Shell 时没有指定 Master 地址,但是也可以正常启动 Spark Shell 和执行 Spark Shell 中的程序,其实是启动了 Spark 的 Local 模式,该模式仅在本机启动一个进程,没有与集群建立联系。
Spark Shell 中已经默认将 SparkContext 类初始化为对象 sc, 用户代码如果需要用到,则直接用 sc 即可。

4. 提交 WordCount 应用

cd jars;
~/apps/spark/bin/spark-submit \
--class cn.gldwolf.spark.WordCount \
--master spark://hdp01:7077 \
--executor-memory 1G \
--total-executor-cores 2 \
wordcount-jar-with-dependencies.jar \
hdfs://bd1810/in/day0518/1/word-count.txt \
hfds://bd1810/out/day0518/1

5. Spark 核心概念

每个 Spark 应用都由一个驱动器程序(Driver Program)来发起集群上的各种并行操作。驱动器程序包含应用的 mian() 方法,并且定义了集群上的分布式数据集(RDD),还对这些分布式数据集应用了相关操作。
驱动器程序通过一个 SparkContext 对象来访问 Spark,这个对象代表对计算集群的一个连接。Spark Shell 启动时已经自动创建了一个 SparkContext 对象,是一个叫 sc 的变量。
驱动器程序一般要管理多个执行器(executor)节点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/557395.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux环境下安装Mysql5.7

本文记录下我近期在Linux环境下安装Mysql5.7的实践经历。 服务器版本Mysql版本Centos 7.65.7.32 1. 下载Mysql 下载地址&#xff1a;https://downloads.mysql.com/archives/community/ 进入页面后选择你需要的版本进行下载&#xff0c;这里提供了2种格式&#xff1a;tar.gz和…

Redis 入门及实战

目录 1. Redis 基本概念 2. Redis 的优势 3. Redis 适用场景 4. Redis-3.2.6 安装(未整理)与测试 5. 使用 Redis 的 Java API 客户端——Jedis 6. 数据结构 6.1 String -- 字符串 6.1.1 String 使用概述 6.1.2 String 常用操作 6.1.3 String 使用案例 6.2 List -- 列…

HBase 简介

HBase 是一个通过大量廉价机器解决海量数据的调整存储和读取的分布式数据库解决方案 HBase 的特点&#xff1a; 高并发&#xff0c;易扩展&#xff0c;解决海量数据集的随机实时增删改查HBase 本质依然是 Key-Value 数据库&#xff0c;不支持 join 等复杂操作不支持复杂的事务…

Flink官网自学笔记

1. What is Apache Flink? Apache Flink 是一款用来进行分布式流数据和批数据处理的开源平台。Apache Flink 是一个对有界数据流和无界数据流进行有状态计算的框架和分布式处理引擎。Flink 被设计用于在所有常见的集群环境中运行&#xff0c;以内存中的速度和任意规模进行计算…

HBase Java API 代码开发

1. API 介绍 几个主要 HBase API 类和数据模型之间的对应关系&#xff1a; Java 类 HBase 数据模型 Admin 数据库&#xff08;Database&#xff09; HBaseConfiguration Table 表&#xff08;Table&#xff09; HTableDescriptor 列簇&#xff08;Column Family&#…

HBase 原理

1. HBase 底层原理 1.1 系统架构 1.1.1 Client 职责 1. HBase 有两张特殊的表&#xff1a; .META.: 记录了用户所有表拆分出来的 Region 映射信息&#xff0c;.META. 可以有多个 Region -ROOT-(新版中已去掉这一层): 记录了 .META. 表的 Region 信息&#xff0c;-ROOT- 只有…

用IDEA debug按键功能

用IDEA debug按键功能 一、断点 断点键&#xff0c;是用户在所选行代码处标记的功能点&#xff0c;表示在debug时代码执行到此处暂停。 注&#xff1a;断点可设置多个 二、启动debug 在设置好断点后单击此功能键&#xff0c;启动debug功能。 三、中止任务 点击该功能键&a…

HBase 的表设计

1 ColumnFamily 设计 追求的原则是&#xff1a;在合理的范围内能尽量少的减少列簇就尽量减少列簇。 最优设计是&#xff1a;将所有相关性很强的 Key-Value 都放在同一个列簇下&#xff0c;这样既能做到查询效率最高&#xff0c;也能保持尽可能少的访问不同的磁盘文件。 以用…

shiro原理及其运行流程介绍

什么是shiro shiro是apache的一个开源框架&#xff0c;是一个权限管理的框架&#xff0c;实现 用户认证、用户授权。 spring中有spring security (原名Acegi)&#xff0c;是一个权限框架&#xff0c;它和spring依赖过于紧密&#xff0c;没有shiro使用简单。 shiro不依赖于sp…

shiro中文api_Shiro

1 shiro Apache shiro 是一个 Java 安全框架。 功能&#xff1a;认证、授权、加密和会话管理功能 应用环境&#xff1a;JavaEE、JavaSE Subject 可看做成一个用户 SecurityManager 框架的核心API Reaim 域对象&#xff0c;用于取数据库中的数据&#xff0c;进行权限比对。…

Java Lambda 表达式讲解

Lambda 表达式 Lambda 表达式的基础语法 Java8 中引入了一个新的操作符&#xff1a;-> 该操作符称为箭头操作符或者 Lambda 操作符 Lambda 操作符将表达式拆分成两部分&#xff1a; 左侧&#xff1a;Lambda 表达式的参数列表右侧: Lambda 表达式的"函数体" --&…

方法引用、构造器引用和数组引用

方法引用 若 Lambda 体中的内有方法已经实现了&#xff0c;我们可以使用“方法引用”&#xff08;可以理解为方法引用是 Lambda 表达式的另外一种表现形式&#xff09; 语法格式 主要有以下三种语法格式&#xff1a; 对象&#xff1a;&#xff1a;实例方法名 注意&#xff1…

JVM 学习一:JVM 的构架模型及生命周期

JVM 的架构模型 Java 编译器输入的指令流基本上是一种基于栈的指令集架构&#xff0c;另外一种指令集架构则是基于寄存器的指令集架构。 具体来说&#xff0c;这两种架构之间的区别&#xff1a; 基于栈式架构的特点&#xff1a; 设计和实现更简单&#xff0c;适用于资源受限…

JVM 学习二:类加载器子系统

1 类加载器子系统的作用 类加载器子系统负责从文件系统或者网络中加载 Class 文件&#xff0c;Class 文件在文件开关有特定的文件标识ClassLoader 只负责 Class 文件的加载&#xff0c;至于它是否可以运行&#xff0c;则由 Execution Engine&#xff08;执行引擎&#xff09;决…

JVM 学习三:类加载器

类加载器 1 类加载器的分类 JVM 支持两种类型的类加载器&#xff1a;引导类加载器&#xff08;Bootstrap ClassLoader&#xff09;和自定义类加载器&#xff08;User-Defined ClassLoader&#xff09; 从概念上来讲&#xff0c;自定义类加载器一般指的是程序中由开发人员自定…

JVM 学习四:类加载之双亲委派机制与沙箱安全机制

1 双亲委派机制 Java 虚拟机对 Class 文件的加载采用的是按需加载的方式&#xff0c;也就是说&#xff1a;当需要使用该类时才会将它的 Class 文件加载到内存生成 Class 对象&#xff0c;而且加载某个类的 Class 文件时&#xff0c;Java 虚拟机采用的是双亲委派模式&#xff0c…

数据结构之线性表:顺序线性表 Java 实现(底层基于数组)

代码实现 package top.gldwolf.java.datastructure.lineartable;/*** 顺序线性表* param <T> 存储的元素类型*/ public class LinearTable<T> {private static final int INITIAL_SIZE 20; // 线性表的初始容量private Object[] data null; // 真正存储数据的数…

Java8新特性:Stream介绍和总结

Java8新特性&#xff1a;Stream介绍和总结 什么是Stream 流&#xff08;Stream&#xff09;是数据渠道&#xff0c;用于操作数据源&#xff08;集合、数组等&#xff09;所生成的元素序列。 集合讲的是数据&#xff0c;流讲的是计算 注意&#xff1a; Stream自己不会存储元素…

数据结构之线性表:单链表

代码实现 package top.gldwolf.java.datastructure.linkedtable;/*** author: Gldwolf* email: ZengqiangZhaosina.com* date: 2020/4/15 12:39*//*** 线性表的链式存储结构** param <T> 存储的数据类型*/ public class LinkedTable<T> {private Node head new N…

使用 Akka 实现 Master 与 Worker 之间的通信

MessageProtocol.scala package top.gldwolf.scala.akkademo.sparkmasterandworker.common/*** author: Gldwolf* email: ZengqiangZhaosina.com* date: 2020/4/17 10:54*//*** 用于 Work 注册时发送注册信息*/ case class WorkerRegisterInfo(id: String, cpu: Int, ram: Int…