当前位置: 首页 > article >正文

Spark学习

Spark简介

1.Spark是什么

首先spark是一个计算引擎,而不是存储工具,计算引擎有很多:
第一代:MapReduce廉价机器实现分布式大数据处理
第二代:Tez基于MR优化了DAG,性能比MR快一些
第三代:Spark优先使用内存式计算引擎 ,国内目前主要应用的离线计算引擎
第四代:Flink:实时流式计算引擎 , 国内目前最主流实时计算引擎

spark的诞生原因就是因为MR太慢了,MR是基于磁盘的,而Spark是基于内存的。

2.Spark能做什么

实现离线数据批处理:类似于MapReduce、Pandas,写代码做处理:代码类的离线数据处理 。

实现交互式即时数据查询:类似于Hive、Presto、Impala,使 用SQL做即席查询分析:SQL类的离线数据处理

实现实时数据处理:类似于Storm、Flink实现分布式的实时计算:代码类实时计算或者SQL类的实时计算

实现机器学习的开发:代替传统一些机器学习工具

3.Spark组成部分

Hadoop的组成部分:common、MapReduce、Hdfs、Yarn

Spark Core:Spark最核心的模块,可以基于多种语言实现代码类的离线开发 【类似于MR】

Spark SQL:类似于Hive,基于SQL进行开发,SQL会转换为SparkCore离线程序 【类似Hive】

Spark Streaming:基于SparkCore之上构建了准实时的计算模块 【淘汰了】

Struct Streaming:基于SparkSQL之上构建了结构化实时计算模块 【替代了Spark Streaming】

Spark ML lib:机器学习算法库,提供各种机器学习算法工具,可以基于SparkCore或者SparkSQL实现开发。

 4.各大计算引擎的对比

Impala:集成Hive实现数据分析,优点是性能最好,缺点数据接口比较少,只支持Hive和Hbase数据源 。 是一个基于CDH的一个软件,Impala 能写sql,它写出来的sql,叫 Impala SQL (大部分跟我们普通的sql没啥区别) ,操作hive或者hbase 速度非常快!

Presto:集成Hive实现数据分析,优点性能适中,支持数据源非常广泛,与大数据接口兼容性比较差 。Presto也可以写sql,只是写的sql叫做 Presto SQL (大部分跟我们普通的sql没啥区别) ,特点:可以跨数据源。比如mysql的表可以和oracle中的一个表关联查询。

SparkSQL:集成Hive实现数据分析,优点功能非常全面、开发接口多,学习成本低,缺点实时计算不够完善。实时计算交给了Flink。

5.Spark的应用

spark可以做数仓,数仓中也可以分层。

离线场景:实现离线数据仓库中的数据清洗、数据分析、即席查询等应用

实时场景:实现实时数据流数据处理,相对而言功能和性能不是特别的完善,工作中建议使用Flink替代。

6.spark五种模式

本地模式Local:一般用于做测试,验证代码逻辑,不是分布式运行,只会启动1个进程来运行所有任务。

集群模式Cluster:一般用于生产环境,用于实现PySpark程序的分布式的运行
        Standalone:Spark自带的分布式资源平台,功能类似于YARN
        YARN:Spark on YARN,将Spark程序提交给YARN来运行,工作中主要使用的模式
        Mesos:类似于YARN,国外见得多,国内基本见不到
        K8s:基于分布式容器的资源管理平台,运维层面的工具。

7.Spark为什么比MR快

1、MR不支持DAG【有向无环图】,计算过程是固定,一个MR 只有1个Map和1个Reduce构成。 一个Map和Reduce是一个过程,和另一个Map和Reduce是不一样的。


 

从落地到磁盘的那一刻,上一个过程已经结束了,下一个过程和上一个过程没有关系了。

2、MR是一个基于磁盘的计算框架,读写效率比较低

3、MR的Task计算是进程级别的,每次运行一个Task都需要启动一个进程,然后运行结束还是释放进程,比较慢。【一个进程可以包含多个线程,比如qq是一个进程,发消息,传文件是一个个线程】

MapTask:进程

ReduceTask:进程

进程启动和销毁是比较耗时的

spark为什么那么快?

1、Spark支持DAG,一个Spark程序中的过程是不固定,由代码 所决定。

2、Task任务都是线程级别

3、计算是基于内存的。

MR和Spark区别
区别MapReduceSpark
计算流程结构1个Map+1个Reduce,每步
结果都必须进入磁盘
支持DAG,一个程序中可以有多个Map、Reduce过程,多个Map之间的操作可以
直接在内存中完成
Shuffle过程分区、排序、分组会根据具体的操作来经过不同的过程
Task运行方式进程:
MapTask
ReduceTask
进程之启动一次,所有的Task都以线程方式存在,不需要频繁启动、申请资源


http://www.kler.cn/a/378652.html

相关文章:

  • 嵌入式开发之文件I/O
  • c语言 变量类型总结
  • Docker可视化管理面板DPanel的安装
  • 2024 Rust现代实用教程Generic泛型
  • LeetCode 第422场个人周赛
  • 笔记-利率学习记录
  • centos 选什么Distribution?flash安装
  • 机器学习初学者指南:Scikit-Learn基础到实战
  • python的安装环境Miniconda(Conda 命令管理依赖配置)
  • Python学习的自我理解和想法(25)
  • mysql--多表查询
  • 4种鼓励创业创新的方法
  • 【设计模式系列】组合模式(十二)
  • 【系统设计】提升Kafka系统性能:Spring Boot实现Lag感知的生产者与消费者
  • HTML 基础标签——分组标签 <div>、<span> 和基础语义容器
  • 【设计模式】结构型模式(二):代理模式
  • 【Axure视频教程】中继器控制显示不同内容
  • 学习笔记——三小时玩转JQuery
  • 安利一款开源企业级的报表系统SpringReport
  • 关于游戏加加不可以在cs2中显示的解决方案
  • Harmony OS搭建广告展示页
  • FastAPI 从0到1(中间件和跨域篇)筛选
  • 上海亚商投顾:沪指缩量调整 华为概念股午后爆发
  • C++算法练习-day31——二叉树的前/中/后序遍历
  • CentOS系统查看CPU、内存、操作系统等信息
  • 第三百零一节 Lucene教程 - Lucene索引文件