Spark随谈(一)—— 总体架构

本文介绍了Spark的核心技术,包括依赖的MapReduce模型、函数式编程特点、Mesos资源管理系统以及支持的分布式存储系统HDFS和S3。文章还详细解释了Spark中的关键概念如RDD、Local模式与Mesos模式的区别,以及Transformations和Actions的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://www.16kan.com/post/113877.html

Spark是一个小巧玲珑的项目,由Berkeley大学的Matei为主的小团队所开发。使用的语言是Scala,项目的core部分的代码只有63个Scala文件,充分体现了精简之美。

Spark之依赖

(1)Map Reduce模型
作为一个分布式计算框架,Spark采用了MapReduce模型。在它身上,Google的Map Reduce和Hadoop的痕迹很重,很明显,它并非一个大的创新,而是微创新。在基础理念不变的前提下,它借鉴,模仿并依赖了先辈,加入了一点改进,极大的提升了MapReduce的效率。

使用MapReduce模型解决大数据并行计算的问题,带来的最大优势,是它和Hadoop的同属一家人。因为同属于MapReduce并行编程模型,而不是MPI和OpenMP其它模型,因此,复杂的算法,只要能够以Java算法表达,在Hadoop上运行的,就能以Scala算法表达,在Spark上运行,而速度有倍数的提升。相比之下,在MPI和Hadoop算法之间切换,难度就大多了。

(2)函数式编程
Spark由Scala写就,而支持的语言亦是Scala。其原因之一就是Scala支持函数式编程。这一来造就了Spark的代码简洁,二来使得基于Spark开发的程序,也特别的简洁。一次完整的MapReduce,Hadoop中需要创建一个Mapper类和Reduce类,而Spark只需要创建相应的一个map函数和reduce函数即可,代码量大大降低

(3)Mesos
Spark将分布式运行的需要考虑的事情,都交给了Mesos,自己不Care,这也是它代码能够精简的原因之一。这也算是偷了一个大懒吧,呵呵

(4)HDFS和S3

Spark支持2种分布式存储系统:HDFS和S3。应该算是目前最主流的两种了。对文件系统的读取和写入功能是Spark自己提供的,借助Mesos分布式实现。如果自己想做集群试验,又没有HDFS环境,也没有EC2环境的话,可以搞个NFS,确保所有MESOS的Slave都可以访问,也可以模拟一下。

Spark的术语

(1)RDD(Resilient distributed datasets )

弹性分布式数据集,Spark中最核心的模块和类,也是设计精华所在。你将它理解为一个大的集合,将所有数据都加载到内存中,方便进行多次重用。第一,它是分布式的,可以分布在多台机器上,进行计算。第二,它是弹性的,在计算处理过程中,机器的内存不够时,它会和硬盘进行数据交换,某种程度上会减低性能,但是可以确保计算得以继续进行。关于RDD的详细阐述,后面会单独再起一篇文章。


(2)Local模式和Mesos模式

Spark支持Local调用和Mesos集群两种模式,在Spark上开发算法程序,可以在本地模式调试成功后,直接改用Mesos集群运行,除了文件的保存位置需要考虑以外,算法理论上不需要做任何修改。

Spark的本地模式支持多线程,有一定的单机并发处理能力。但是不算很强劲。本地模式可以保存结果在本地或者分布式文件系统,而Mesos模式一定需要保存在分布式或者共享文件系统。

(3)Transformations和Actions

对于RDD,有两种类型的动作,一种是Transformation,一种是Action。它们本质区别是:

  • Transformation返回值还是一个RDD。它使用了链式调用的设计模式,对一个RDD进行计算后,变换成另外一个RDD,然后这个RDD又可以进行另外一次转换。这个过程是分布式的
  • Action返回值不是一个RDD。它要么是一个Scala的普通集合,要么是一个值,要么是空,最终或返回到Driver程序,或把RDD写入到文件系统中

关于这两个动作,在Spark开发指南中会有就进一步的详细介绍,它们是基于Spark开发的核心。这里将Spark的官方ppt中的一张图略作改造,阐明一下两种动作的区别。

Spark On Mesos

为了在Mesos框架上运行,安装Mesos的规范和设计,Spark实现两个类,一个是SparkScheduler,在Spark中类名是MesosScheduler;一个是SparkExecutor,在Spark中类名是Executor。有了这两个类,Spark就可以通过Mesos进行分布式的计算。

Spark会将RDD和MapReduce函数,进行一次转换,变成标准的Job和一系列的Task。提交给SparkScheduler,SparkScheduler会把Task提交给Mesos Master,由Master分配给不同的Slave,最终由Slave中的Spark Executor,将分配到的Task一一执行,并且返回,组成新的RDD,或者直接写入到分布式文件系统。

基于Spark的项目

基于Spark的项目有2个,也是AMP实验室出品

第一个是Spark内部的Bagel,Pregel on Spark,可以用Spark进行图计算,这是个非常有用的小项目。Bagel自带了一个例子,实现了Google的PageRank算法,实验数据在http://download.freebase.com/wex/,感兴趣的可以下载试试。

第二个是Shark,Hive On Spark,将Hive的语法迁移到Spark上,将SQL翻译为Spark的mapreduce运行,并且可以直接读取hive的元数据库和对应数据。这个项目还在获得了2012的SIGMOD大会上获得最佳Demo奖,目前已经进入Alpha版本,很快将会有正式版本发布,希望它能够是一个完全兼容现有hive,速度快10x倍的牛B产品

### 大数据技术总体架构设计与实现 #### 架构概述 大数据平台的构建涉及多个层次的设计,从底层的数据存储到顶层的应用服务。个典型的大数据架构可以分为以下几个主要部分: 1. **数据采集层** 数据采集是整个流程的第步,负责收集来自不同源的数据。这些数据可能来自于日志文件、数据库记录或是通过API接口获取的信息。为了确保高效性和可靠性,在这阶段通常会采用分布式消息队列系统来缓冲传入的数据流[^2]。 2. **数据存储层** 存储层决定了如何保存所捕获的数据。考虑到成本效益及性能因素,可以选择HDFS (Hadoop Distributed File System) 或者其他NoSQL数据库作为持久化解决方案。对于结构化程度较高的关系型数据,则可考虑使用传统的关系型数据库管理系统(RDBMS)[^3]。 3. **计算框架层** 计算框架提供了强大的批处理能力和实时数据分析能力。MapReduce 是最早被广泛接受的种编程模型,它允许编写简单而有效的算法来进行大规模并行运算;除此之外还有Spark这样的内存计算引擎,能显著提高迭代式工作负载的速度和效率[^4]。 4. **资源管理层** 随着集群规模的增长,有效管理硬件资源变得至关重要。YARN(Yet Another Resource Negotiator),Kubernetes等工具可以帮助管理员动态分配CPU/GPU时间片给不同的作业任务,并监控其执行状态以优化整体利用率。 5. **应用服务层** 应用层面主要是指那些直接面向用户的前端界面或者后台逻辑模块。它们依赖于上述各层所提供的基础设施和服务支持完成特定业务目标——比如推荐系统的个性化商品展示、金融风控中的信用评分预测等等。 ```java // Java代码片段展示了简单的MapReduce WordCount例子 public class WordCount { public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); Job job = Job.getInstance(conf, "word count"); job.setJarByClass(WordCount.class); job.setMapperClass(TokenizerMapper.class); job.setCombinerClass(IntSumReducer.class); job.setReducerClass(IntSumReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); FileInputFormat.addInputPath(job, new Path(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); System.exit(job.waitForCompletion(true) ? 0 : 1); } } ``` #### 技术选型考量 当决定具体采用哪些技术和组件时,需综合评估当前项目的实际需求以及未来扩展的可能性。例如,如果侧重于低延迟查询响应,则应优先考察具备快速读取特性的NoSQL方案;而对于复杂事件处理场景而言,Storm或Flink可能是更好的选择因为二者都擅长流式数据加工转换操作[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值