Spark学习-入门介绍

概述

    Spark是加州大学伯克利分校AMP实验室使用Scala语言开发的大数据分布式计算引擎,Spark为Java、Python和R编程语言提供了支持。Spark为大数据应用提供了一体化四大组件,包括了Spark SQL、机器学习、图计算、流式处理。

    迷思小贴士:

     建议尽量使用原生语言Scala来玩Spark,因为使用Java会编写冗长的匿名内部类代码来适应==函数式编程==的风格,在Java8 lamda表达式推出后情况稍有改善,而对于Python和R,始终存在"支持度"一说和性能差距,所以推荐使用Scala。
## 大数据生态

    Spark作为一个高效、通用的大数据处理引擎,它在大数据生态中具有较为完备的数据计算体系,在一定程度上取代了Hadoop中的MapReduce作业,但并非完全独立于Hadoop之外,而是与Hadoop中的Yarn集群资源调度器和Hdfs分布式文件存储系统进行了有效结合,Spark能够应对绝大部分的数据计算场景,例如大数据下的机器学习任务、小批量数据流式计算以及数据关系图计算等,Spark对大数据生态中的计算整合是其成为主流趋势的重要因素。

特性

    快速性

    Spark是基于内存的分布式计算引擎,从官网截图中可以看出Spark和Hadoop同时运行逻辑回归算法,存在巨大的时间差异,Spark几乎比Hadoop快100倍左右。Spark性能好的因素主要分为如下几点:

  1. Spark是基于内存进行数据处理,对比MapReduce基于磁盘进行数据处理性能当然是更为优秀,MapReduce需要将中间结果保存在磁盘上,而Spark将中间结果缓存在内存中,在进行迭代计算时,大量的中间结果导致两者运行时差尤为明显。
  2. Spark中具有DAG有向无环图计算模型,DAG对shuffle操作的优化,有效减少了中间文件数和落地磁盘的次数。
  3. Spark消除了冗余的Hdfs读写和MapReduce阶段,并进行了JVM优化,在技术架构上具有一定的性能优势。

    易用性

    相比编写冗长的MapReduce计算,Spark封装了80多个针对数据处理的抽象算子,开发者们能够方便快捷的运用这些算子来构建应用,Spark还提供了标准化SQL支持以及统一整合的API风格,这些都极大地提高了应用程序开发效率。

    通用性

    Spark作为大数据分析通用框架,为大数据分析业务场景提供了统一的解决方案,包括交互式查询、离线计算、实时流处理和机器学习挖掘等。

    兼容性

    至2013年以来,Spark进入了高速发展期,其社区活跃度位于Apache基金会开源项目前列,Spark正不断的与大数据生态融合,运行模式可独立运行,也可运行在Hadoop YARN、EC2、Mesos和Kubernetes中。支持的数据源包括HDFS、Alluxio、Cassandra、Hbase、Hive、Kafka以及传统关系型数据库等。

集群模式

集群模式说明适应场景master url
本地模式在本地运行,只有一个工作进程,无并行计算能力测试环境local
本地模式在本地运行,有 K 个工作进程,通常设置 K 为机器的CPU 核心数量测试环境local[K]
Standalone以 Standalone模式运行,这是 Spark 自身提供的集群运行模式,默认端口号: 7077正式环境spark://HOST:PORT
Mesos在 Mesos 集群上运行,Driver 进程和 Worker 进程运行在 Mesos 集群上,部署模式必须使用固定值:–deploy-mode cluster正式环境mesos://HOST:PORT
yarn-client在 Yarn 集群上运行,Driver 进程在本地,Work 进程在 Yarn 集群上,部署模式必须使用固定值:–deploy-modeclient。Yarn 集群地址必须在相关配置变量中定义正式环境yarn-client
yarn-cluster在 Yarn 集群上运行,Driver 进程在 Yarn 集群上,Work 进程也在 Yarn 集群上,部署模式必须使用固定值:–deploy-mode cluster。Yarn 集群地址必须在相关配置变量中定义正式环境yarn-cluster

运行流程

    开发人员编写好Spark的Application应用后,将应用jar包通过spark-submit脚本提交到不同的集群资源管理器中,Driver进程构建DAG图并分解执行计划,将并行任务分发到多个工作节点的执行器进程中计算,运行完毕后收集应用的结果,并释放所有资源。

基本概念

术语说明
Application基于spark的用户程序,包含了一个driver program 和集群中多个 executor
Driver program运行application的main()函数并自动创建SparkContext。通常SparkContext 代表driver program
Executor为某个Application运行在worker node 上的一个进程。该进程负责运行task并负责将数据存储在内存或者硬盘上,每个application 都有自己独立的 executors
Cluster Mannager在集群上获得资源的外部服务(spark standalon,mesos,yarm)
Worker Node集群中任何可运行application 代码的节点
RDDspark 的基本运算单元,通过scala集合转化,读取数据集生成或者由其他RDD进过算子操作得到
Job可以被拆分成task并行计算的单元,一般为spark action 触发的一次执行作业
Stage每个job会被拆分成很多组task,每组任务被称为stage,也可称TaskSet,该属于经常在日志中看到
task被送到executor上执行的工作单元
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值