Spark学习

1.Spark概述

  1.1 什么是Spark

   http://​ Apache Spark™ - Unified Engine for large-scale data analytics

        Spark是基于内存的大数据计算框架。主要是为交互式查询和迭代算法而设计的,支持内存存储和高效的容错回复。

   1.2 Spark的特点

        ·快速

                与Hadoop的MapReduce相比,Spark基于内存的计算要快100倍以上。Spark 实现了高效的 DAG 执行引擎,可以通过基于内存来高效处理数据流。

        ·易用

                Spark支持使用Scala、Python、Java、R等语言快速编写应用。此外,Spark提供超过80种算法,使用户可以快速构建不同的应用。并且Spark提供Scala、Python和R等语言的交互模式界面,使Spark编程学习更加简洁。

        ·通用

                Spark 提供了统一的解决方案。Spark 可以用于批处理、交互式查询(Spark SQL)、实时流处理(Spark Streaming)、机器学习(Spark MLlib)和图计算(GraphX),这些不同类型的处理都可以在同一个应用中无缝使用。

        ·随处运行

                用户可以使用Spark的独立集群模式运行Spark,也可以在Hadoop YARN资源管理器或Apache Mesos上运行Spark。Spark作为一个分布式计算框架,本身并没有存储功能,但是Spark可以从HDFS、HIVE等数据源中读取数据。

  1.3 Spark生态圈

        以Spark Core 为核心,可以从HDFS、Amazon S3 和 HBase等数据源中读取数据,并支持不同的程序运行模式,Spark应用程序计算的整个过程可以调用不同的组件。

如图:

Spark生态圈中重要组件介绍:

a.Spark Core : Spark的核心,提供底层框架及核心支持。

b.Blink DB : 一个用于在海量数据上进行交互式SQL查询的大规模并行查询引擎,允许用户通过权衡数据精度缩短查询响应时间,数据的精度将被控制在允许的误差范围内。

c.Spark SQL : 可以执行SQL查询,支持基本的SQL语法和HiveQL语法,可读取的数据源包括Hive、HDFS、关系型数据库(如MySQL)等。

d.Spark Streaming : 可以进行实时数据流计算。例如:网站的流量计算。

e.MLBase : MLBase是Spark生态圈的一部分,专注于机器学习领域,学习门槛低。有四部分组成:MLBase、MLI、MLOptimizer和MLRuntime。

f.GraphX : 提供了图计算需要的便捷API,同时兼具并行计算的性能,是做大规模图计算的一把利器。如在移动社交关系分析中可使用图计算相关算法进行处理和分析。

g.SparkR : SparkR是一个R语言开发包,使得R语言编写的程序不知可以在单机上运行,也可以作为Spark的作业运行在集群上,极大地提升了R语言的数据处理能力。

拓展:结构化数据与非结构化数据

        1.结构化数据

                能够以二维表存储,可以用数据库二维逻辑表来表现的数据。它是高度组织和整齐格式化的数据。如学生基本信息这样一些数据就是结构化数据。

        2.非结构化数据

                不能以二维表存储的数据,不方便用数据库二维逻辑表来表现的数据。如音频、图片、文档等数据。

2.Spark运行架构与原理

  2.1了解Spark架构

                Spark框架的核心是一个计算引擎。

        架构中的基本组件:

                ·Application:Spark应用程序

                指的是用户编写的Spark应用程序,包含了Driver功能代码和分布在集群中多个节点上运行的Executor代码。

                ·Driver: 负责运行应用程序(Application)的main函数并创建SparkContext,应用程序上包含了Driver功能的代码和分布在集群中多个节点上的Executor代码。

                ·SparkContext:应用上下文,控制整个生命周期。

                ·Cluster Manager: 资源管理器,即在集群上获取资源的外部服务,目前主要有Standalone和YARN。

                ·Spark Worker:集群中任何可以运行应用程序的节点,运行一个或多个Executor进程。

                ·Executor:运行在Spark Worker上的任务(Task)执行器。Executor启动线程池运行Task,并负责将数据存在内存或磁盘上,每个应用程序都会申请各自的Executor以处理任务。

                ·Task:被发送到某个Executor的具体任务。

             

  2.2Spark作业运行流程  

        Spark有三种运行模式,即Standlone、YARN和Mesos。

        1.Standalone模式

                Standalone模式‘是Spark自带的资源管理器。在Standalone模式下,Driver既可以运行在主节点上,也可以运行在本地客户端(Client)上。

        2.YARN模式

                YARN是一种统一资源管理机制,在其上面可以运行多套计算框架。 YARN模式根据Driver在集群中的位置又分为两种,一种是YARN-Client模式(YARN客户端模式),另一种是YARN-Cluster模式(YARN集群模式)

           (1)YARN客户端模式的作业运行流程:

             (2)YARN集群模式的作业运行流程:

  2.3Spark的核心数据集RDD

        弹性分布式数据集(Resilient Distributed  Dataset,RDD),可以简单理解成一个提供了许多操作接口的数据集合。是Spark中最基本的数据抽象,代表一个不可变类型、可分区、里面的元素可并行计算的集合。

        可以认为RDD是分布式的"列表List或数组Array"(与其说是列表不如说是元组【其本身是不可变类型,只能通过血缘追踪】)

        RDD被划分为一到多个分区,所有分区数据分布存储在不同机器的内存或磁盘中。

RDD支持两种操作,分别为转换操作和行动操作。

        (1)转换操作

   将原始数据集加载为RDD数据或将一个RDD转换为另外一个RDD的操作。

        (2)行动操作

   将RDD存储至硬盘中或触发转换操作执行的操作。

        常见的转换操作:map(),filter(),flatMap(),union(),groupByKey()等方法。

  2.4 Spark核心原理

        一、宽依赖与窄依赖

        1、宽依赖

               宽依赖(Shuffle Dependency):父RDD的每个分区都可能被子RDD的多个分区使用。(即子RDD的每一个分区都依赖于父RDD中的一个以上的分区)

        2.窄依赖

                窄依赖(Narrow Dependency):指父RDD的每个分区只被子RDD的一个分区所使用。(即子RDD的一个分区只依赖于某个父RDD中的一个分区)

关系图如下:

二、阶段(Stage)

        一般而言,一个作业会被划分为一定数量的Stage,各个Stage之间按照顺序执行。

        两类任务:ShuffleMapTask和ResultTask。ShuffleMapTask的输出是Shuffle所需的数据,ResultTask的输出则是最终的结果。所有Stage是以任务的类型为依据进行划分的。

        Spark任务会根据RDD之间的依赖关系,形成一个DAG有向无环图,DAG会提交给DAGScheduler,DAGScheduler会把DAG划分相互依赖的多个stage,划分stage的依据就是RDD之间的宽窄依赖。遇到宽依赖就划分stage,每个stage包含一个或多个task任务。然后将这些task以taskSet的形式提交给TaskScheduler运行。stage是由一组并行的task组成。        

你想要学习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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值