大数据核心技术(程序员月入5000小技巧)

1.什么是spark?

Spark是一种快速、通用、可扩展的大数据分析引擎。

2.spark和marpreduce的区别

Spark处理数据是基于内存的,而MapReduce是基于磁盘处理数据的

Spark在处理数据时构建了DAG有向无环图,减少了shuffle和数据落地磁盘的次数

Spark比MapReduce快
Spark是粗粒度资源申请,而MapReduce是细粒度资源申请

MapReduce的Task的执行单元是进程,Spark的Task执行单元是线程

3.什么是结构化数据,什么是非结构化数据?

传统的关系数据库里存放的内容就是结构化数据,而图片、音频、视频、文档等以普通文件形式存放的数据,就是非结构化数据

4.spark特点

运行速度迅速,容易上手开发,超强的通用性,集成Hadoop,极高的活跃度、

5.spark用途

数据分析 通过对多种组件的综合应用,Spark 可支持数据建模师进行数据分析任务。 路径上,Spark 可借助 Python, Scala 接口支持数据交互。

高频操作 基于迭代计算框架,Spark 可高效地处理大规模任务,所获取的效益与数据读取量成正比。

实时统计 在面对实时处理中小规模的数据体量时,可选择 Spark 来分析统计数据流的具体信息。

机器学习 Spark 提供机器学习库 Mllib 和机器学习 API,开发人员可以在大规模数据集执行分类、回归、聚类等任务。

架构及生态:

  • 通常当需要处理的数据量超过了单机尺度(比如我们的计算机有4GB的内存,而我们需要处理100GB以上的数据)这时我们可以选择spark集群进行计算,有时我们可能需要处理的数据量并不大,但是计算很复杂,需要大量的时间,这时我们也可以选择利用spark集群强大的计算资源,并行化地计算,其架构示意图如下:

  • Spark Core:包含Spark的基本功能;尤其是定义RDD的API、操作以及这两者上的动作。其他Spark的库都是构建在RDD和Spark Core之上的
  • Spark SQL:提供通过Apache Hive的SQL变体Hive查询语言(HiveQL)与Spark进行交互的API。每个数据库表被当做一个RDD,Spark SQL查询被转换为Spark操作。
  • Spark Streaming:对实时数据流进行处理和控制。Spark Streaming允许程序能够像普通RDD一样处理实时数据
  • MLlib:一个常用机器学习算法库,算法被实现为对RDD的Spark操作。这个库包含可扩展的学习算法,比如分类、回归等需要对大量数据集进行迭代的操作。
  • GraphX:控制图、并行图操作和计算的一组算法和工具的集合。GraphX扩展了RDD API,包含控制图、创建子图、访问路径上所有顶点的操作
  • Spark架构的组成图如下:

  • Cluster Manager:在standalone模式中即为Master主节点,控制整个集群,监控worker。在YARN模式中为资源管理器
  • Worker节点:从节点,负责控制计算节点,启动Executor或者Driver。
  • Driver: 运行Application 的main()函数
  • Executor:执行器,是为某个Application运行在worker node上的一个进程

Spark与hadoop:

  • Hadoop有两个核心模块,分布式存储模块HDFS和分布式计算模块Mapreduce
  • spark本身并没有提供分布式文件系统,因此spark的分析大多依赖于Hadoop的分布式文件系统HDFS
  • Hadoop的Mapreduce与spark都可以进行数据计算,而相比于Mapreduce,spark的速度更快并且提供的功能更加丰富
  • 关系图如下:

运行流程及特点:

  1. 构建Spark Application的运行环境,启动SparkContext
  2. SparkContext向资源管理器(可以是Standalone,Mesos,Yarn)申请运行Executor资源,并启动StandaloneExecutorbackend,
  3. Executor向SparkContext申请Task
  4. SparkContext将应用程序分发给Executor
  5. SparkContext构建成DAG图,将DAG图分解成Stage、将Taskset发送给Task Scheduler,最后由Task Scheduler将Task发送给Executor运行
  6. Task在Executor上运行,运行完释放所有资源

Spark运行特点:

  1. 每个Application获取专属的executor进程,该进程在Application期间一直驻留,并以多线程方式运行Task。这种Application隔离机制是有优势的,无论是从调度角度看(每个Driver调度他自己的任务),还是从运行角度看(来自不同Application的Task运行在不同JVM中),当然这样意味着Spark Application不能跨应用程序共享数据,除非将数据写入外部存储系统
  2. Spark与资源管理器无关,只要能够获取executor进程,并能保持相互通信就可以了
  3. 提交SparkContext的Client应该靠近Worker节点(运行Executor的节点),最好是在同一个Rack里,因为Spark Application运行过程中SparkContext和Executor之间有大量的信息交换
  4. Task采用了数据本地性和推测执行的优化机制
  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值