2014-12-24 16:36:24 wangruoze 阅读数 1175
  • Spark数据处理

    Spark多数据源处理教程,该课程主要介绍如何通过Spark的DataSource API来读写外部数据源中的数据,并结合一些具体场景来分析和解释使用DataSource API的好处以及需要注意的问题。

    6055 人正在学习 去看看 CSDN讲师

Hadoop、Yarn、Spark是企业构建生产环境下大数据中心的关键技术,也是大数据处理的核心技术,是每个云计算大数据工程师必修课。

 

课程简介

大数据时代的精髓技术在于Hadoop、Yarn、Spark,是大数据时代公司和个人必须掌握和使用的核心内容。

Hadoop、Yarn、Spark是Yahoo!、阿里淘宝等公司公认的大数据时代的三大核心技术,是大数据处理的灵魂,是云计算大数据时代的技术命脉之所在,以Hadoop、Yarn、Spark为基石构建起来云计算大数据中心广泛运行于Yahoo!、阿里淘宝、腾讯、百度、Sohu、华为、优酷土豆、亚马逊等公司的生产环境中。

Hadoop、Yarn、Spark三者相辅相成

n  Hadoop中的HDFS是大数据时代公认的首选数据存储方式;

n  Yarn是目前公认的最佳的分布式集群资源管理框架;

n  Spark是目前公认的大数据统一计算平台;

Hadoop在云计算大数据的发展早期做出了卓越的贡献,对Hadoop的理解尤其是从源码角度掌握其架构和运行机制是每个云计算大数据从业人员的必修课;作为目前公认的集群资源管理和分配框架的Yarn发展到现在已经非常成熟了,在国内以淘宝为引领者的公司把Yarn的使用推向了新的巅峰,作为大数据从业者,Yarn是另外一项必修技术;Spark是继Hadoop之后,成为替代Hadoop的下一代云计算大数据核心技术,目前SPARK已经构建了自己的整个大数据处理生态系统,如流处理、图技术、机器学习、Interactive Ad-Hoc Query等方面都有自己的技术,并且是Apache顶级Project,可以预计的是2014年下半年到2015年在社区和商业应用上会有爆发式的增长,国外一些大型互联网公司已经部署了Spark,甚至连Hadoop的早期主要贡献者Yahoo现在也在多个项目中部署使用Spark;国内的淘宝、优酷土豆、网易、Sohu、Baidu、腾讯、皮皮网、华为等已经使用Spark技术用于自己的商业生产系统中,国内外的应用开始越来越广泛。Spark正在逐渐走向成熟,并在这个领域扮演更加重要的角色,刚刚结束的2014 Spark Summit上的信息,Spark已经获得世界20家顶级公司的支持,这些公司中包括Intel、IBM等,同时更重要的是包括了最大的四个Hadoop发行商(Cloudera, Pivotal, MapR, Hortonworks)都提供了对非常强有力的支持Spark的支持,尤其是是Hadoop的头号发行商Cloudera在2014年7月份宣布“Impala’s itfor interactive SQL on Hadoop; everything else will move to Spark”,具体链接信息 http://t.cn/Rvdsukb,不得不提的是Spark的“One stack to rule them all”的特性,Spark的特点之一就是用一个技术堆栈解决云计算大数据中流处理、图技术、机器学习、交互式查询、误差查询等所有的问题,此时我们只需要一个技术团队通过Spark就可以搞定一切问题,而如果基于Hadoop就需要分别构建实时流处理团队、数据统计分析团队、数据挖掘团队等,而且这些团队之间无论是代码还是经验都不可相互借鉴,会形成巨大的成本,而使用Spark就不存在这个问题;

工业和信息化部电信研究院于2014年5月发布的“大数据白皮书”中指出:

“2012 年美国联邦政府就在全球率先推出“大数据行动计划(Big datainitiative)”,重点在基础技术研究和公共部门应用上加大投入。在该计划支持下,加州大学伯克利分校开发了完整的大数据开源软件平台“伯克利数据分析软件栈(Berkeley Data Analytics Stack),其中的内存计算软件Spark的性能比Hadoop 提高近百倍,对产业界大数据技术走向产生巨大影响

                                   ----来源:工业和信息化部电信研究院

 

2014 SparkSummit上结束之后,整个云计算大数据就已经发声巨变:

12014524Pivotal宣布了会把整个Sparkstack包装在Pivotal HDHadoop发行版里面。这意味这最大的四个Hadoop发行商(Cloudera, Pivotal, MapR, Hortonworks)都提供了对Spark的支持。http://t.cn/RvLF7aM星火燎原的开始;

2Mahout前一阶段表示从现在起他们将不再接受任何形式的以MapReduce形式实现的算法,另外一方面,Mahout宣布新的算法基于Spark

3Cloudera的机器学习框架Oryx的执行引擎也将由HadoopMapReduce替换成Spark

4Google已经开始将负载从MapReduce转移到PregelDremel上;

5FaceBook则将原来使用Hadoop的负载转移到Presto上;

 

现在很多原来使用深度使用Hadoop的公司都在纷纷转向Spark,国内的淘宝是典型的案例,国外的典型是Yahoo!,我们以使用世界上使用Hadoop最典型的公司Yahoo!为例,大家可以从Yahoo!的数据处理的架构图看出Yahoo!内部正在使用Spark:

不得不提的是Spark的“One stack to rule them all”的特性,Spark的特点之一就是用一个技术堆栈解决云计算大数据中流处理、图技术、机器学习、交互式查询、误差查询等所有的问题,此时我们只需要一个技术团队通过Spark就可以搞定一切问题,而如果基于Hadoop就需要分别构建实时流处理团队、数据统计分析团队、数据挖掘团队等,而且这些团队之间无论是代码还是经验都不可相互借鉴,会形成巨大的成本,而使用Spark就不存在这个问题;

 

      

 

伴随Spark技术的普及推广,对专业人才的需求日益增加。Spark专业人才在未来也是炙手可热,作为Spark人员,需要掌握的技能模型如下:

 

 

       本次课程由具有长期Hadoop、Yarn、Spark源码研究和多个大数据中心构建经验的Spark亚太研究院院长和首席专家主讲,内容深入浅出而直接源码本质,以大数据案例实施和开发的视角带领大家一睹云计算大数据的核心精髓和最佳实践。

 

品质特色

1、  聚集大数据领域最核心的三大技术(Hadoop、Yarn、 Spark)

Hadoop方向50%:掌握生产环境下、源码级别下的Hadoop经验,帮助客户解决性能、集群的一些难点问题;

Yarn方向10%:掌握最佳的分布式集群资源管理框架,能够轻松使用Yarn管理Hadoop、Spark等;

Spark方向30%:未来统一的大数据框架平台,剖析Spark架构、内核等核心技术及四大子框架和商业案例,一次性解决Spark开发中所有的问题

2、  课程内容接地气,即解决当下的问题,有帮助企业驾驭未来

3、  课程会从本质架构级别入手,围绕源代码剖析,商业案例进行授课

 

 

 

学员收益

1、  掌握构建大数据中心架构所需的实战技术

2、  对Hadoop,yarn,spark的理解是本质级别的理解,对未来自学、解决生产环境难题会有很大的帮助

3、  10个世界级商业应用案例分享,开拓学员视野

4、  课程本身将从生产角度切人,从数据采集、构建生产系统入手

5、  课前会提供大量资料及环境构建,课后提供免费交流机会,如沙龙活动及课后学习包

学员基础

对大数据有强烈兴趣,能够读懂Java等语言的基本语法;

 

---讲师:

王家林 :

Spark亚太研究院院长和首席专家,中国目前唯一的移动互联网和云计算大数据集大成者。

在Spark、Hadoop、Android等方面有丰富的源码、实务和性能优化经验。彻底研究了Spark从0.5.0到0.9.1共13个版本的Spark源码,并已完成2014年5月31日发布的Spark1.0源码研究。

Hadoop源码级专家,曾负责某知名公司的类Hadoop框架开发工作,专注于Hadoop一站式解决方案的提供,同时也是云计算分布式大数据处理的最早实践者之一;

Android架构师、高级工程师、咨询顾问、培训专家;

通晓Spark、Hadoop、Android、HTML5,迷恋英语播音和健美;

致力于Spark、Hadoop、Android、HTML5的软、硬、云整合的一站式解决方案;

超过10本的IT畅销书作者;

 

Hadoop领域4个开创先河

1,全程覆盖Hadoop的所有核心内容

2,全程注重动手实作,循序渐进中掌握Hadoop企业级实战技术

4,具备掌握Hadoop完整项目的分析、开发、部署的全过程的能力

 

Yarn领域的2个先河:

1, 第一个在生产环境的下解析Yarn的课程;

2, 细致剖析Yarn实现的架构和源码;

 

Spark领域开创6个世界第一:

1, 这是世界上第一个全程覆盖以Spark为核心的大数据的所有内容的课程:包含Scala、Spark、Spark与Hadoop的结合、企业生产环境下的商业案例、框架源码剖析等;

2, 这是世界上第一个Spark大数据零基础课程:学习此课程不需要任何基础,所有的内容在课程中都会细致的剖析,学员不需要额外学习任何内容,从零基础到直到进入企业工作;

3, 这是世界上第一个全程注重动手实作的大数据课程:通过不断的案例实践的循序渐进中掌握Spark企业级实战技术;

4, 这是世界上第一个彻底而系统的讲解Spark 1.0的课程:根据Spark的最新稳定版本,包括Spark集群的构建,Spark架构设计、Spark内核剖析、Shark、Spark SQL、Spark Streaming、图计算GraphX、机器学习、Spark on Yarn、JobServer等;

5, 这是世界上第一个使用Spark商业案例教学的课程:展示企业线上生产系统中应用 Spark的成功案例,以及与现有企业BI平台整合的方案 ;

6, 这是世界上第一个讲解SparkHadoop完美结合的课程:目前而言,在世界的生产环境中往往是Spark和Hadoop并存,如何驾驭这种并存架构,在课程中给出了完美的解答,尤其是通过企业案例讲解,以达到最优化使用大数据系统潜能的目的;

 

 

 

---讲师:

王家林 :

Spark亚太研究院院长和首席专家,中国目前唯一的移动互联网和云计算大数据集大成者。

在Spark、Hadoop、Android等方面有丰富的源码、实务和性能优化经验。彻底研究了Spark从0.5.0到0.9.1共13个版本的Spark源码,并已完成2014年5月31日发布的Spark1.0源码研究。

Hadoop源码级专家,曾负责某知名公司的类Hadoop框架开发工作,专注于Hadoop一站式解决方案的提供,同时也是云计算分布式大数据处理的最早实践者之一;

Android架构师、高级工程师、咨询顾问、培训专家;

通晓Spark、Hadoop、Android、HTML5,迷恋英语播音和健美;

致力于Spark、Hadoop、Android、HTML5的软、硬、云整合的一站式解决方案;

超过10本的IT畅销书作者;

 

Total Hadoop Professional

培训对象

1,对云计算、分布式数据存储于处理、大数据等感兴趣的朋友

2,传统的数据库,例如Oracle、MaySQL、DB2等的管理人员

3,Java、C等任意一门编程语言的开发者;

4,网站服务器端的开发人员

5,在校大学生、中专生或者刚毕业的学生

6,云计算大数据从业者;

7,熟悉Hadoop生态系统,想了解和学习Hadoop与Spark整合在企业应用实战案例的朋友;

8,系统架构师、系统分析师、高级程序员、资深开发人员;

9,牵涉到大数据处理的数据中心运行、规划、设计负责人;

10,政府机关,金融保险、移动和互联网等大数据来源单位的负责人;

11,高校、科研院所涉及到大数据与分布式数据处理的项目负责人;

12,数据仓库管理人员、建模人员,分析和开发人员、系统管理人员、数据库管理人员以及对数据仓库感兴趣的其他人员;

参加课程基础要求

对云计算有强烈的兴趣,能够看懂基本的Java语法。

培训后的目标能力

直接上手Hadoop工作,具备直接胜任Hadoop开发工程师的能力;轻松驾驭以Spark为核心的云计算大数据实战技术,从容解决95%以上的云计算大数据业务需求;

培训技能目标

• 彻底理解Hadoop 代表的云计算实现技术的能力

• 具备开发自己网盘的能力

• 具备修改HDFS具体源码实现的能力
• 从代码的角度剖析MapReduce执行的具体过程并具备开发MapReduce代码的能力
• 具备掌握Hadoop如何把HDFS文件转化为Key-Value让供Map调用的能力
• 具备掌握MapReduce内部运行和实现细节并改造MapReduce的能力

• 具备掌握Pig企业级开发和管理的能力

• 具备掌握Hive企业级开发和管理的能力

• 掌握Spark的企业级开发的所有核心内容,包括Spark集群的构建,Spark架构设计、Spark内核剖析、SharkSpark SQLSpark Streaming、图计算GraphX、机器学习、Spark on YarnJobServer等;

• 掌握SparkHadoop协同工作,能够通过SparkHadoop轻松应对大数据的业务需求;

• 掌握企业线上生产系统中应用Spark /Hadoop成功案例,以及与现有企业BI平台整合的方案;

培训职业目标

• Hadoop工程师,能够开发的Hadoop分布式应用

 Hadoop完整项目的分析、开发、部署的全过程的能力

• Spark高级工程师

 大数据项目总负责人

 云计算大数据CTO

 

培训内容

时间

内容

备注

第一天

1个主题:Hadoop三问(彻底理解Hadoop

1、 Hadoop为什么是云计算分布式大数据的事实开源标准软件框架?

2、Hadoop的具体是如何工作?

3、Hadoop的生态架构和每个模块具体的功能是什么?

 

2个主题:Hadoop集群与管理(具备构建并驾驭Hadoop集群能力)

1、 Hadoop集群的搭建

2、 Hadoop集群的监控

3、 Hadoop集群的管理

4、 集群下运行MapReduce程序

 

3主题:彻底掌握HDFS(具备开发自己网盘的能力)

1、HDFS体系架构剖析 

2、NameNode、DataNode、SecondaryNameNode架构

3、保证NodeName高可靠性最佳实践

4、DataNode中Block划分的原理和具体存储方式

5、修改Namenode、DataNode数据存储位置

6、使用CLI操作HDFS

7、使用Java操作HDFS

 

4主题:彻底掌握HDFS(具备修改HDFS具体源码实现的能力)

1、RPC架构剖析  

2、源码剖析Hadoop构建于RPC之上

3、源码剖析HDFS的RPC实现

4、源码剖析客户端与与NameNode的RPC通信

 

 

时间

内容

备注

 

 

 

 

 

 

 

 

 

 

 

 

 

 

第二天

1个主题:彻底掌握MapReduce(从代码的角度剖析MapReduce执行的具体过程并具备开发MapReduce代码的能力)

1、MapReduce执行的经典步骤 

2、wordcount运行过程解析

3、Mapper和Reducer剖析

4、自定义Writable

5、新旧API的区别以及如何使用就API

6、把MapReduce程序打包成Jar包并在命令行运行

 

2个主题:彻底掌握MapReduce(具备掌握Hadoop如何把HDFS文件转化为Key-Value让供Map调用的能力)

1、 Hadoop是如何把HDFS文件转化为键值对的?

2、 源码剖析Hadoop读取HDFS文件并转化为键值对的过程实现

3、 源码剖析转化为键值对后供Map调用的过程实现

 

3个主题:彻底掌握MapReduce(具备掌握MapReduce内部运行和实现细节并改造MapReduce的能力)

1、 Hadoop内置计数器及如何自定义计数器

2、 Combiner具体的作用和使用以及其使用的限制条件

3、 Partitioner的使用最佳实践

4、 Hadoop内置的排序算法剖析

5、 自定义排序算法

6、 Hadoop内置的分组算法

7、 自定义分组算法

8、 MapReduce常见场景和算法实现

 

4个主题:Hadoop集群高级实践(具体Hadoop企业管理员的实际能力)

1、 动态增加Hadoop的Slave节点

2、 动态修改Hadoop的Replication数目

3、 使用命令管理Hadoop集群实践

4、 剖析Hadoop的安全模式

5、 日志剖析实践

 

 

时间

内容

备注

 

 

 

 

 

 

 

 

 

第三天

 

 

 

 

 

 

 

 

 

 

1个主题:实战ZooKeeper(具备理解并通过命令行和Java两种方式操作ZooKeeper的能力)

1、ZooKeeper架构剖析及集群搭建

2、使用命令行操作ZooKeeper

3、使用Java操作ZooKeeper

 

2个主题:实战HBase(具备掌握HBase企业级开发和管理的能力)

1、 HBase架构实现

2、 HBase的数据模型和存储模型

3、 使用CLI操作HBase

4、 使用Java操作HBase

5、 使用MapReduce代码向HBase中导入批量数据

 

3个主题:实战Pig(具备掌握Pig企业级开发和管理的能力)

1、 Pig架构

2、 使用Pig操作数据的内幕

3、 使用Pig实例数据

 

4个主题:实战Hive(具备掌握Hive企业级开发和管理的能力)

1、 Hive架构剖析

2、 Hive在HDFS中存储实现

3、 使用MySQL作为Hive的Metastore

4、 内部表、分区表、外部表、桶表

5、 视图

6、 自定义Hive的函数

 

 

时间

内容

备注

 

 

 

 

 

 

 

 

 

 

 

 

 

第四天

 

 

 

 

 

 

 

 

 

 

1个主题:实战Sqoop(具备使用Sqoop自由转换传统关系型数据库和HDFS中数据的能力)

1、Sqoop架构                              

2、实战Sqoop把MySQL中的数据导入到HDFS中

3、实战Sqoop把HDFS中的数据导入到MySQL中

4、定义Sqoop任务

 

2个主题:实战Flume(具备使用Flume收集和管理分布式日志的能力)

1、 Flume架构体系剖析

2、 Agent配置信息

3、 动态监控文件夹中文件的变化

4、 把数据导入到HDFS中

5、 实例监控文件夹文件的变化并把数据导入到HDFS中

 

3个主题:Hadoop系统管理进阶(具备掌握MapReduce内部运行和实现细节并改造MapReduce的能力)

1、 Hadoop的安全模式

2、 系统监控

3、 系统维护

4、 委任节点和接触节点

5、 系统升级

6、 更多的系统管理工具实战

7、 系统管理最佳实践

 

4个主题:电信日志项目具备掌握Hadoop完整项目的分析、开发、部署的全过程的能力

通过电信商搜集用户接打电话、上网等产生的日志对用户的电话和网络行为进行分析和监控,初步贯穿前面讲解的主要内容,使大家熟悉Hadoop一个完整项目的分析、开发、部署的全过程。

 

5个主题:某知名电商公司Hadoop实施全程揭秘具备掌握商业级别Hadoop的分析、开发、部署的全过程的能力

通过电商公司现场案例展示商业级别一个完整项目的分析、开发、部署的全过程

 

第五天

1个主题YARN(具备理解和使用YARN的能力)

1、YARN的设计思想                                                     

2、YARN的核心组件

3、YARN的共组过程

4、YARN应用程序编写

 

2个主题Yarn资源调度器(具备理解和使用YARN的能力)

1、YARN资源调度架构                                                 

2、层级队列

3、Capacity Scheduler 

4、Fair Scheduler

 

3个主题ResourceManager深度剖析(具备深刻理解ResourceManager的能力)

1、ResourceManager的架构

2、ClientRMService 与AdminService 

3、NodeManager

4、Container

5、Yarn的 HA机制

 

4个主题NodeManager深度剖析(具备掌握NodeManagerContainer的能力)

1、NodeManager架构

2、Container Management

3、Container  lifecycle

4、资源管理与隔离

 

第六天

1堂课Spark的架构设计(具备掌握Spark架构的能力)

 

1.1 Spark生态系统剖析

1.2 Spark的架构设计剖析

1.3 RDD计算流程解析

1.4 Spark的出色容错机制

 

2堂课Spark编程模型(具备掌握编程核心的能力)

 

2.1 RDD

2.2 transformation

2.3 action

2.4 lineage

2.5宽依赖与窄依赖

 

3堂课深入Spark内核(具备掌握Spark内核的能力)

 

3.1 Spark集群

3.2 任务调度

3.3 DAGScheduler

3.4 TaskScheduler

3.5 Task内部揭秘

 

4堂课Spark的广播变量与累加器(具备掌握Spark广播和累加器的能力)

 

4.1 广播变量的机制

4.2 广播变量使用最佳实践

4.3 累加器的机制

4.4 累加器使用的最佳实践

 

5堂课Spark多语言编程(具备掌握多语言编程的能力)

 

5.1 PySpark API

5.2 使用 Python编写Spark程序

5.3 Java 8的函数式编程

5.4 使用Java 8编写Spark程序

5.5 Spark编程语言最佳选择:Scala

5.6 用Scala演绎Spark编程艺术

 

6堂课SparkContext解析和数据加载以及存储(具备掌握Spark加载以处理数据的能力)

 

6.1 源码剖析SparkContext

6.2 Scala、Java、Python使用SparkContext

6.4 加载数据成为RDD

6.5 把数据物化

 

时间

內  容

备注

 

 

 

 

 

 

 

 

 

 

 

 

第七天

7堂课:深入实战RDD(具备掌握Spark RDD深入处理计算和优化计算的能力)

 

7.1 DAG

7.2 深入实战各种Scala RDD Function

7.3 Spark Java RDD Function

7.4 RDD的优化问题

 

8堂课:Shark的原理和使用(具备掌握Shark用于数据分析统计的能力)

 

8.1 Shark与Hive

8.2 安装和配置Shark

8.3 使用Shark处理数据

8.4 在Spark程序中使用Shark Queries

8.5 SharkServer

8.6 思考Shark架构

 

9堂课:Spark的机器学习(具备掌握Spark的机器学习的能力)

 

9.1 LinearRegression

9.2 K-Means

9.3 Collaborative Filtering

 

10堂课:Spark的图计算GraphX(具备掌握Spark图计算的能力)

 

10.1 Table Operators

10.2 Graph Operators

10.3 GraphX

 

11堂课:Spark SQL(具备掌握Spark SQL进行的能力)

 

11.1 Parquet支持

11.2 DSL

11.3 SQL on RDD

 

 

时间

內  容

备注

 

 

 

 

 

 

 

 

第八天

12堂课:Spark实时流处理(具备掌握Spark 实时流处理技术的能力)

12.1 DStream

12.2 transformation

12.3 checkpoint

12.4 性能优化

 

13堂课:Spark程序的测试(具备掌握Spark程序测试的能力)

13.1 编写可测试的Spark程序

13.2 Spark测试框架解析

13.3 Spark测试代码实战

 

14堂课:Spark的优化(具备掌握Spark优化的能力)

14.1 Logs

14.2 并发

14.3 内存

14.4 垃圾回收

14.5 序列化

14.6 安全

 

15堂课:Spark on Yarn(具备掌握Spark on Yarn的能力)

15.1 Spark on Yarn的架构原理

15.2 Spark on Yarn的最佳实践

 

16堂课:JobServer(具备掌握Spark as a cloud service的能力)

16.1 JobServer的架构设计

16.2 JobServer提供的接口

16.3 JobServer最佳实践

 

17堂课:Spark项目案例实战(具备掌握Spark项目进行数据处理的能力)

17.1 Spark项目的最佳架构模式

17.2 案例的介绍和架构

17.3 案例的源码实现

17.4 调优

 

 

 

 

2016-12-06 17:50:24 Dreamershi 阅读数 1110
  • Spark数据处理

    Spark多数据源处理教程,该课程主要介绍如何通过Spark的DataSource API来读写外部数据源中的数据,并结合一些具体场景来分析和解释使用DataSource API的好处以及需要注意的问题。

    6055 人正在学习 去看看 CSDN讲师

工业和研究中数据的大幅增长为计算机科学带来了巨大的机会与挑战。由于数据大小超过了单台机器的能力,用户需要新的系统将计算扩展到多个节点。因此,针对不同计算工作负载的新集群编程模型已呈爆炸式增长。

图1

这些模型相对专业化。例如支持批处理的MapReduce,支持迭代图算法的Dreme。在开源Apache Hadoop堆栈中,类似Storm和Impala的系统也是特有的。即使在关系数据库世界中,“一刀切”系统已越来越少。然而,很多大数据应用需要整合许多不同的处理类型。大数据,顾名思义,代表了数据的多样性和复杂性。一个典型的管道需要类似MapReduce的系统进行数据载入,使用类似SQL的语言进行查询。用户不得不将不同的系统整合在一起,并且有时候引擎也不能对应用的需求都满足。

有鉴于此,2009年加州大学伯克利分校团队开始了Apache Spark项目,旨在为分布式数据处理设计一个统一的引擎。 Spark具有类似于MapReduce的编程模型,但是使用称为“弹性分布式数据集”或RDDs的数据共享抽象扩展。通过这个简单的扩展,Spark可以轻松应对之前需要单独引擎处理的高强度工作,包括SQL、流式传输、机器学习和图形处理。Spark使用与专用引擎相同的优化(例如面向列的处理和增量更新),并实现相同的性能,但是编写更为高效。

Spark的通用性有几个重要的好处。

首先,应用程序更容易开发,因为它们使用统一的API。

第二,结合处理任务更有效;而先前的系统需要将数据写入存储以将其传递给另一个引擎,Spark可以在相同的数据(通常在存储器中)上运行不同的功能。

最后,Spark启用了以前系统无法实现的新应用程序(如图形上的交互式查询和流式计算机学习)。自2010年发布以来,Spark已经发展成为最活跃的开源项目或大数据处理,拥有超过1,000名贡献者。该项目已在超过1,000个组织中使用,从技术公司到银行、零售、生物技术和天文学。

随着并行数据处理变得普遍,处理功能的可组合性将是对可用性和性能的最重要关注之一。许多数据分析是探索性的,用户希望将库函数快速组合成一个工作管道。然而,对于“大数据”,特别是在不同系统之间复制数据是对性能不利的。因此,用户需要共性和可组合的抽象。在本文中,我们将介绍Spark编程模型并解释为什么它是高度通用的。我们还讨论了如何利用这种通用性来构建其它处理任务。最后,我们总结了Spark中常见的应用程序。

编程模型

Spark中的关键编程抽象是RDD,它是容错集合,可以并行处理集群中的对象。用户通过“转换”(例如map、filter和groupBy)操作来创建RDD。

Spark通过ScalaJavaPython和R中的函数式编程API来表达RDD,用户可以简单地在集群上运行本地函数。 例如,以下Scala代码通过搜索以ERROR开头的行来创建日志文件中错误消息的RDD,然后打印总错误数:

lines = spark.textFile("hdfs://...")

errors = lines.filter(s => s.startsWith("ERROR"))

println("Total errors: "+errors.count())

第一行定义了一个在HDFS上的文本行集合RDD。第二行调用过滤器转换以从行中导出新的RDD。它的参数是一个Scala函数文字或闭包。最后一行调用count函数。另一种类型的RDD操作称为“动作”,返回一个结果给程序(这里,RDD中的元素数量),而不是定义一个新的RDD。

Spark评估RDDs延迟,尝试为用户运算找到一个有效的计划。特别的是,变换返回表示计算结果的新RDD对象,但不立即计算它。当一个动作被调用时,Spark查看整个用于创建执行计划的转换的图。例如,如果一行中有多个过滤器或映射操作,Spark可以将它们融合到一个传递中,或者如果知道数据是被分区的,它可以避免通过网络为groupBy进行数据传递。因此用户可以实现程序模块化,而不会造成性能低下。

最后,RDDs为计算之间的数据共享提供了明确的支持。默认情况下,RDD是“短暂的”,因为它们每次在动作(例如count)使用时被重新计算。但是,用户还可以将所选的RDD保留在内存中或快速重用。(如果数据不适合内存,Spark还会将其溢出到磁盘。)例如,用户在HDFS中搜索大量日志数据集来进行错误调试时,可以通过调用以下函数来载入不同集群的错误信息到内存中:

errors.persist()

随后,用户可以在该内存中数据上运行不同的查询:

// Count errors mentioning MySQL

errors.filter(s => s.contains("MySQL")).count()

// Fetch back the time fields of errors that

// mention PHP, assuming time is field #3:

errors.filter(s => s.contains("PHP")).map(line => line.split('\t')(3)).collect()

这种数据共享是Spark和以前的计算模型(如MapReduce)之间的主要区别。

容错

除了提供数据共享和各种并行操作,RDDs还可以自动从故障中恢复。 传统上,分布式计算系统通过数据复制或检查点提供了容错。 Spark使用一种称为“lineage”的新方法。每个RDD跟踪用于构建它的转换图,并对基本数据重新运行这些操作,以重建任何丢失的分区。 例如,图2显示了我们以前的查询中的RDD,其中我们通过应用两个过滤器和一个映射来获取错误的时间字段。 如果RDD的任何分区丢失(例如保存内存分区的错误的节点失败),Spark将通过在HDFS文件的相应块上的应用过滤器来重建它。 对于将数据从所有节点发送到所有其他节点(例如reduceByKey)的“shuffle”操作,发送方在本地保留其输出数据,以防接收器出现错误。

图2

基于沿袭的恢复比数据密集型工作负载中的复制效率高得多。 它节省了时间,因为写入RAM要比通过网络写入数据快。 恢复通常比简单地重新运行程序快得多,因为故障节点通常包含多个RDD分区,这些分区可以在其他节点上并行重建。

另外一个复杂些的例子如图3:

图3

Spark中逻辑回归的实现。 它使用批量梯度下降,一个简单的迭代算法,重复计算数据上的梯度函数作为并行求和。 Spark可以方便地将数据加载到RAM中,并运行多个求和。 因此,它运行速度比传统的MapReduce快。 例如,在100GB作业中(如图4),MapReduce每次迭代需要110秒,因为每次迭代需从磁盘加载数据,而Spark在第一次加载后每次迭代只需要一秒。

图片描述

图4

与存储系统的整合

与Google的MapReduce非常相似,Spark旨在与多个外部系统一起使用持久存储。Spark最常用于集群文件系统,如HDFS和键值存储,如S3和Cassandra。 它还可以作为数据目录与Apache Hive连接。 RDD通常仅在应用程序中存储临时数据,但某些应用程序(例如Spark SQL JDBC服务器)也在多个用户之间共享RDD。Spark作为存储系统无关引擎的设计,使用户可以轻松地对现有数据进行运算和连接各种数据源。

高级库

RDD编程模型仅提供对象的分布式集合和在其上运行的函数。除此之外,我们在Spark上构建了各种针对专用计算引擎更高级的库。其关键思想是,如果我们控制存储在RDD中的数据结构,跨节点的数据分区以及在其上运行的函数,我们可以在其他引擎中实现许多执行技术。事实上,正如我们在本节中所展示的,这些库通常在每个任务上实现最先进的性能,同时在用户组合使用它们时提供显着的优势。我们现在讨论Apache Spark包含的四个主要库。

SQL和DataFrames。最常见的数据处理范例之一是关系查询。 Spark SQL及其前身Shark使用类似于分析数据库的技术在Spark上实现这样的查询。例如,这些系统支持列式存储,基于成本的优化和用于查询执行的代码生成。这些系统的主要思想是使用与分析数据库相同的数据布局 - 压缩的柱状存储 - 内部RDD。在Spark SQL中,RDD中的每个记录都保存为以二进制格式存储的一系列行,并且系统生成直接针对此布局运行的代码。

除了运行SQL查询之外,我们还使用Spark SQL引擎为称为DataFrames的基本数据变换提供了更高级的抽象,这些变换是具有已知模式的记录的RDD。 DataFrames是R和Python中的表格数据的常见抽象,具有用于过滤,计算新列和聚合的编程方法。在Spark中,这些操作映射到Spark SQL引擎并接收其所有优化。我们稍后讨论DataFrames。

Spark SQL中尚未实现的一种技术是索引,尽管Spark上的其他库(如IndexedRDDs)确实使用它。

Spark Streaming(流)。 Spark Streaming使用称为“离散流”的模型实现增量流处理。为了通过Spark实现流式传输,我们将输入数据分成小批量(例如每200毫秒),我们定期与RDD中存储的状态组合以产生新结果。以这种方式运行流计算比传统的分布式流系统有几个好处。例如,由于使用沿袭,故障恢复更便宜,并且可以将流与批处理和交互式查询组合。

GraphX。 GraphX提供了类似于Pregel和GraphLab的图形计算接口,1通过为其构建的RDD选择分区函数来实现与这些系统相同的布局优化(例如顶点分区方案)。

MLlib。 MLlib,Spark的机器学习库,实现了50多种常见的分布式模型训练算法。例如,它包括决策树(PLANET),Latent Dirichlet分布和交替最小二乘矩阵分解的常见分布式算法。

组合处理任务。 Spark的库都对RDD进行操作,作为数据抽象,使得它们在应用程序中易于组合。例如,图5显示了一个程序,它使用Spark SQL读取一些历史Twitter数据,使用MLlib训练一个K-means聚类模型,然后将该模型应用于一个新的tweet流。每个库返回的数据任务(这里是历史性的tweet RDD和K-means模型)很容易传递给其他库。除了API级别的兼容性,Spark中的组合在执行级别也是高效的,因为Spark可以跨处理库进行优化。例如,如果一个库运行映射函数,并且下一个库对其结果运行映射,则Spark将这些操作融合到单个映射中。同样,Spark的故障恢复在这些库中无缝地工作,重新计算丢失的数据,无论哪个库产生它。

图5

性能

假设这些库运行在同一引擎上,它们是否会失去性能?我们发现,通过实现我们刚刚在RDD中概述的优化,我们通常可以匹配专用引擎的性能。例如,图6比较了Spark对三个简单任务(SQL查询,流字计数和交替最小二乘矩阵分解)与其他引擎的性能。虽然结果随着工作负载的不同而不同,但Spark通常与Storm,GraphLab和Impala等专用系统相当。对于流处理,虽然我们显示了Storm上分布式实现的结果,但是每个节点的吞吐量也可以与商业流引擎如Oracle CEP相媲美。

图6

即使在高度竞争的基准测试中,我们也使用Apache Spark实现了最先进的性能。在2014年,我们进入了Daytona Gray-Sort基准(http://sortbenchmark.org/),涉及在磁盘上排序100TB的数据,并绑定一个专门的系统构建的新记录,仅用于在类似数量的机器上排序。与其他示例一样,这是可能的,因为我们可以实现RDD模型中大规模排序所需的通信和CPU优​​化。

应用

Apache Spark用于广泛的应用程序。我们对Spark用户的调查发现了超过1,000家使用Spark的公司,从Web服务,生物技术到金融等领域。在学术界,我们也看到了几个科学领域的应用。在这些工作负载中,我们发现用户利用Spark的通用性,并且通常组合其多个库。在这里,我们介绍几个顶级用例。许多用例的演示文稿也可在Spark Summit会议网站(http://www.spark-summit.org)上获取。

批量处理

Spark最常用的应用程序是对大型数据集进行批处理,包括Extract-Transform-Load工作负载,将数据从原始格式(如日志文件)转换为更加结构化的格式,并离线训练机器学习模型。这些工作负载的已发布示例包括Yahoo!的页面个性化和推荐;管理高盛的数据湖;阿里巴巴图表挖掘;金融价值风险计算;和丰田的客户反馈的文本挖掘。我们知道的最大的已发布的用例是在中国社交网络腾讯的8000节点集群,每天摄取1PB的数据。

虽然Spark可以在内存中处理数据,但是此类别中的许多应用程序只能在磁盘上运行。在这种情况下,Spark相对于MapReduce仍然可以提高性能,因为它支持更复杂的运算符图。

交互式查询

互动使用Spark分为三个主要类别。首先,组织通常通过商业智能工具(如Tableau)使用Spark SQL进行关系查询。例子包括eBay和百度。第二,开发人员和数据科学家可以通过shell或可视化笔记本环境以交互方式使用Spark的Scala,Python和R接口。这种交互式使用对于提出更高级的问题和设计最终导致生产应用程序的模型至关重要,并且在所有部署中都很常见。第三,一些供应商已经开发了在Spark上运行的特定领域的交互式应用程序。示例包括Tresata(反洗钱),Trifacta(数据清理)和PanTera(大规模可视化,如图7所示)。

图7

流处理

实时处理也是一种流行的用例,无论是在分析和实时决策应用程序中。 Spark Streaming的已发布使用案例包括思科的网络安全监控,三星SDS的规范分析以及Netflix的日志挖掘。许多这些应用程序还将流式处理与批处理和交互式查询相结合。例如,视频公司Conviva使用Spark持续维护内容分发服务器性能的模型,在跨服务器移动客户端时自动查询,在需要对模型维护和查询进行大量并行工作的应用程序中。

科学应用

Spark还被用于几个科学领域,包括大规模垃圾邮件检测,图像处理,和基因组数据处理。结合批量,交互和流处理的一个例子是Howard Hughes医学院的Thunder平台神经科学,Janelia Farm。它被设计成处理来自实验的脑成像数据,实时地,从生物体(例如斑马鱼和小鼠)扩大到1TB /小时的全脑成像数据。使用Thunder,研究人员可以应用机器学习算法(例如聚类和主成分分析)来识别涉及特定行为的神经元。相同的代码可以在批处理作业中对来自先前运行的数据或在活动实验期间的交互式查询中运行。图8显示了使用Spark生成的示例图像。

图8

使用的Spark组件

因为Spark是一个统一的数据处理引擎,自然的问题是它的图书馆组织实际使用了多少。我们对Spark用户的调查表明,组织确实使用多个组件,超过60%的组织使用至少三个Spark的API。图9概述了Databricks 2015年7月Spark调查中每个组件的使用情况,达到1400名受访者。我们将Spark Core API(只是RDD)列为一个组件,将更高级别的库列为其他组件。我们看到许多组件被广泛使用,Spark Core和SQL最受欢迎。 Streaming在46%的组织中使用,机器学习在54%中使用。虽然在图9中未直接示出,但大多数组织使用多个组件; 88%使用其中至少两个,60%使用至少三个(如Spark Core和两个库),27%使用至少四个组件。

图9

部署环境

我们也看到Apache Spark应用程序运行的地方和它们连接到的数据源的多样性。虽然第一个Spark部署通常在Hadoop环境中,在2015年7月Spark调查中,仅有40%的部署在Hadoop YARN集群管理器上。此外,52%的受访者在公共云上运行Spark。

Spark模型的魅力

虽然Apache Spark演示了统一的集群编程模型是可行和有用的,但是了解集群编程模型的广泛性成因以及Spark的局限性是很有好处的。在这里,我们总结了一个关于Zaharia RDDs的一般性的讨论。我们从两个角度研究RDDs。首先,从能力的角度,我们认为RDDs可以模拟任何分布式计算,并且在多数情况下表现优异,除非计算对网络延迟敏感。第二,从系统的角度来看,RDD能帮助应用程序对集群中最常见瓶颈的资源进行控制 - 网络和存储I/O,从而使得这些资源得到优化。

表达性角度。为了研究RDDs的表达性,我们首先比较RDDs和MapReduce模型。第一个问题是MapReduce本身表达性的计算是什么?虽然有关于MapReduce的限制的许多讨论,这里令人惊讶的是MapReduce可以模拟任何分布式计算。

要看到这一点,请注意任何分布式计算由执行本地计算和偶尔交换消息的节点组成。 MapReduce提供了映射操作,允许本地计算和reduce,这允许全部通信。因此,可以通过将其工作分解为时间步长,运行Map以在每个时间步长中执行本地计算,以及在每个步骤结束时使用reduce来批处理和交换消息,来模拟任何分布式计算,尽管效率并不高。一系列MapReduce步骤将捕获整个结果,如图10所示。

图10

虽然这一行的工作表明MapReduce可以模拟任意计算,但又两个问题会使这种模拟背后的“常数因子”高。首先,MapReduce在跨时间段共享数据方面效率低下,因为它依赖于复制的外部存储系统来实现此目的。由于需在每个步骤之后写出其状态,系统运行将较慢。其次,MapReduce步骤的延迟决定了我们的仿真与真实网络的匹配程度,大多数Map-Reduce实现是针对具有几分钟到几小时延迟的批处理环境设计的。

RDDs和Spark解决了这两个问题。在数据共享方面,RDD通过避免中间数据的复制来快速进行数据共享,并且可以紧密模拟在由长时间运行的进程组成的系统中发生的内存中“数据共享”。在延迟方面,Spark可以在大型集群上以100ms延迟运行MapReduce类似的步骤。虽然一些应用程序需要更细粒度的时间步长和通信,但是这100ms的延迟足以处理许多数据密集型工作负载,在通信步骤之前可以大批量进行计算。

总之,RDDs建立在Map-Reduce模拟任何分布式计算的能力之上,但更有效率。它们的主要限制是由于每个通信步骤中的同步而增加的等待时间,但是该等待时间的损失与所得相比是可以忽略的。

系统观点。独立于表征Spark的通用性的仿真方法,我们可以采用系统方法。集群计算中的瓶颈资源是什么? RDD可以有效地使用它们吗?虽然集群应用程序是多样的,但它们都受底层硬件的相同属性的约束。当前数据中心具有陡峭的存储层次结构,以相似的方式限制大多数应用。例如,典型的Hadoop集群可能具有以下特性:

本地存储。每个节点具有本地存储器,大约50GB/s的带宽,以及10到20个本地磁盘,大约1GB/s到2GB/ s的磁盘带宽。

链接。每个节点具有10Gbps(1.3GB/s)链路,或者比其存储器带宽小约40x,并且比其总的磁盘带宽小2倍。

机架。节点被组织成20到40台机器的机架,每个机架的带宽为40Gbps-80Gbps,或者机架内网络性能的2-5倍。

给定这些属性,在许多应用中最重要的性能问题是在网络中放置数据和计算。幸运的是,RDD提供了控制这种放置的设施;该接口允许应用程序在输入数据附近放置计算(通过用于输入源25的“优选位置”的API),并且RDD提供对数据分区和共置(例如指定数据被给定密钥散列)的控制。因此,库(例如GraphX)可以实现在专门系统中使用的相同的布置策略。

除了网络和I / O带宽,最常见的瓶颈往往是CPU时间,特别是如果数据在内存中。在这种情况下,Spark可以运行在每个节点上的专用系统中使用的相同的算法和库。例如,它使用Spark SQL中的列存储和处理,MLlib中的本机BLAS库等。正如我们之前讨论的,RDD明显增加成本的唯一区域是网络延迟。

从系统角度来看的最后一个观点是,由于容错,Spark可能会对当今某些专用系统产生额外的成本。例如,在Spark中,每个shuffle操作中的map任务将它们的输出保存到它们运行的​​机器上的本地文件,因此reduce任务可以稍后重新获取。此外,Spark在shuffle阶段实现了一个障碍,所以reduce任务不会开始,直到所有的Map已经完成。这避免了故障恢复所需的一些复杂性,如果一个“推”直接从映射记录以流水线方式减少。虽然删除一些这些功能将加快系统。但默认情况下,我们在Spark中会保持开启容错,以便于对应用程序进行容错处理。

不断探索

Apache Spark仍然是一个快速发展的项目。自2013年6月以来,代码库规模增长了6倍。拥有超过200个第三方可用软件包。在研究社区,Berkeley,MIT和Stanford的多个项目基于Spark,许多新的库(如GraphX和Spark Streaming)来自研究小组。在这里,我们简述四个主要的成果。

DataFrames和更多的声明性API。核心Spark API基于对包含任意类型的Scala,Java或Python对象的分布式集合的函数式编程。虽然这种方法非常具有表现力,但也使程序更难以自动分析和优化。存储在RDD中的Scala/ Java/Python对象可能具有复杂的结构,运行它们的函数可能包括任意代码。在许多应用程序中,如果开发人员没有使用正确的运算符,他们可能会得到不理想的性能;例如,系统本身不能在Map之前推送过滤器功能。

为了解决这个问题,我们在2015年扩展了Spark,以便根据关系代数添加一个名为DataFrames的更具声明性的API。数据帧是Python和R中表格数据的通用API。数据帧是一组具有已知模式的记录,基本上等同于数据库表,支持使用受限“表达式”API进行过滤和聚合等操作。然而,与在SQL语言中工作不同,数据帧操作被调用作为更通用的编程语言(例如Python和R)中的函数调用,允许开发人员使用主语言中的抽象(例如函数和类)。图11和图12显示了API的示例。

图11

图12

Spark的DataFrames提供了类似于单节点程序包的API,但是使用Spark SQL的查询计划程序自动并行化和优化计算。用户代码因此接收在Spark的功能API下不可用的优化(例如谓词下推,运算符重新排序和连接算法选择)。据我们所知,Spark DataFrames是第一个在数据框架API.d下执行这种关系优化的库。

虽然DataFrames仍然是新的,但是这不妨碍它的流行。在我们2015年7月的调查中,60%的受访者报告使用它们。由于DataFrames的成功,我们还开发了一个名为Datasetse的类型安全接口,让Java和Scala程序员将DataFrames视为Java对象的静态类型集合,类似于RDD API,并仍然接收关系优化。我们期望这些API逐渐成为在Spark库之间传递数据的标准抽象。

性能优化。Spark最近的许多工作都是在性能上。在2014年,Databricks团队花费了大量的精力来优化Spark的网络和I/O元操作,在 Daytona GraySort挑战中成功打破赛事记录。挑战是项目是对100TB数据进行排序,Spark的成绩较前冠军快了3倍,但是仅需1/10的设备。这个基准测试不是在内存中执行,而是在(固态)磁盘上执行的。

R语言支持。 SparkR project在2015年被合并到Spark中,在R中提供了一个编程接口。R接口基于DataFrames,使用与R的内置数据框架几乎完全相同的语法。其他Spark库(如MLlib)也很容易从R中调用,因为它们接受DataFrames的输入。

库的研究。 Apache Spark继续努力于构建更高级别的数据处理库。最近的项目包括Thunder神经科学,ADAM基因组学以及Kira天文学图像处理。其他研究库(如GraphX)已被合并到主要代码库。

小结

可扩展数据处理对于下一代计算机应用是必不可少的,但通常涉及不同的计算系统。为了简化这个任务,Spark项目为大数据应用程序引入了统一的编程模型和引擎。实践证明,这样的模型可以有效地支持当前的工作负荷,并为用户带来实质性的好处。希望Apache Spark能增强在大数据编程库中的可组合性,并开发更易于用户使用的库。

本文中描述的所有Apache Spark库都是开源的,可通过http://spark.apache.org/ 查看。 Databricks还制作了所有Spark峰会的视频,可在https://spark-summit.org/ 中免费获得。

原文Apache Spark: A Unified Engine for Big Data Processing 
作者:Matei Zaharia, Reynold S. Xin, Patrick Wendell, Tathagata Das, Michael Armbrust, Ankur Dave, Xiangrui Meng, Josh Rosen, Shivaram Venkataraman, Michael J. Franklin, Ali Ghodsi, Joseph Gonzalez, Scott Shenker, Ion Stoica 
Communications of the ACM 
翻译:Daisy 责编:仲培艺

2018-11-25 16:01:00 ThePer1987 阅读数 26
  • Spark数据处理

    Spark多数据源处理教程,该课程主要介绍如何通过Spark的DataSource API来读写外部数据源中的数据,并结合一些具体场景来分析和解释使用DataSource API的好处以及需要注意的问题。

    6055 人正在学习 去看看 CSDN讲师

Spark最佳实践

Spark高级数据分析

Spark快速大数据分析

Spark大数据处理技术  完整版

书籍链接:

https://share.weiyun.com/5kLvDQS

https://pan.baidu.com/s/1ICNxaYRPyX0qt35dUfN0LQ

转载于:https://www.cnblogs.com/ssMellon/p/10015925.html

2016-05-12 18:06:04 qq_21234493 阅读数 1440
  • Spark数据处理

    Spark多数据源处理教程,该课程主要介绍如何通过Spark的DataSource API来读写外部数据源中的数据,并结合一些具体场景来分析和解释使用DataSource API的好处以及需要注意的问题。

    6055 人正在学习 去看看 CSDN讲师

本讲内容:

a. Exactly Once 
b. 输出不重复

注:本讲内容基于Spark 1.6.1版本(在2016年5月来说是Spark最新版本)讲解。

上节回顾:

上节课通过案例透视了Spark Streaming Job架构和运行机,并结合源码进行了详细解说;同时也了解了Spark Streaming Job的容错机制,包括 Executor 与 Driver两方面的容错机制。

也就是说Job的事务处理,主要是在Executor 与 Driver两个应用中展开

开讲

首先,我们必须知道什么是事务及其一致性?

事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。

原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。

一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。

隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。

持久性(durability)。持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

以银行转帐为例,A客户向B客户转账一次(假如此次转账1万元),正常情况下A客户的账户里只会被扣除一次且金额为一万元,B客户的账户也只会收到A客户转给的一次钱且金额同样是一万元,这就是事务及其一致性的具体体现,也就是说数据会被处理且会被正确的处理一次。

然而, Spark Streaming的事务处理和上述事例中讲的事务及其一致性有所不同;Spark Streaming的事务关注的是某个Job执行的一致性。

本讲将从事务视角为大家探索Spark Streaming架构机制

Spark Streaming应用程序启动,会分配资源,除非整个集群硬件资源奔溃,一般情况下都不会有问题。Spark Streaming程序分成而部分,一部分是Driver,另外一部分是Executor。Receiver接收到数据后不断发送元数据给Driver,Driver接收到元数据信息后进行CheckPoint处理。其中CheckPoint包括:Configuration(含有Spark Conf、Spark Streaming等配置信息)、Block MetaData、DStreamGraph、未处理完和等待中的Job。当然Receiver可以在多个Executor节点的上执行Job,Job的执行完全基于SparkCore的调度模式进行的。

这里写图片描述

 Executor只有函数处理逻辑和数据,外部InputStream流入到Receiver中通过BlockManager写入磁盘、内存、WAL进行容错。WAL先写入磁盘然后写入Executor中,失败可能性不大。如果1G数据要处理,Executor一条一条接收,Receiver接收数据是积累到一定记录后才会写入WAL,如果Receiver线程失败时,数据有可能会丢失。 
  
  Driver处理元数据前会进行CheckPoint,Spark Streaming获取数据、产生作业,但没有解决执行的问题,执行一定要经过SparkContext。Driver级别的数据修复从Driver CheckPoint中需要把数据读入,在其内部会重新构建SparkContext、StreamingContext、SparkJob,再提交Spark集群运行。Receiver的重新恢复时会通过磁盘的WAL从磁盘恢复过来。

 Spark Streaming和Kafka结合不会出现WAL数据丢失的问题,Spark Streaming必须考虑外部流水线的方式处理。

这里写图片描述

这里写图片描述

 上面的图例很好的解释了怎么能完成完整的语义、事务的一致性,保证数据的零丢失,Exactly Once的事务处理? 
  
  a、怎么保证数据零丢失? 
   
  必须要有可靠的数据来源和可靠的Receiver、整个应用程序的MetaData必须进行CheckPoint、通过WAL来保证数据安全(生产环境下Receiver接收Kafka的数据,默认情况下会在Executor中存在二份数据,且默认情况下必须二份数据备份后才进行计算;如果Receiver接收数据时崩溃,没有拷贝副本,此时会重新从Kafka中进行拷贝,拷贝的依据是zookeeper元数据)。 
   
  大家可以将Kafka看作是一个简单的文件存储系统,在Executor中Receiver确定受到Kafka的每一条记录后进行Replication到其他Executor成功后会通过ack向Kafka发送确认收到的信息并继续从Kafka中读取下一条信息。 
   
  b、Driver容错如下图所示:

这里写图片描述

再次思考数据在哪些地方可能丢失?

  数据丢失的主要场景如下:

  在Receiver收到数据且通过Driver的调度,Executor开始计算数据的时候如果Driver突然崩溃(导致Executor会被Kill掉),此时Executor会被Kill掉,那么Executor中的数据就会丢失,此时就必须通过例如WAL机制让所有的数据通过类似HDFS的方式进行安全性容错处理,从而解决Executor被Kill掉后导致数据丢失可以通过WAL机制恢复回来。

下面需要考虑二个很重要的场景:

数据的处理怎么保证有且仅有被处理一次?

数据零丢失并不能保证Exactly Once,如果Receiver接收且保存起来后没来得及更新updateOffsets时,就会导致数据被重复处理。

更详细的说明数据重复读取的场景:

  在Receiver收到数据且保存到了hdfs时Receiver奔溃,此时持久化引擎没有来得及进行updateOffset,Receiver重新启动后就会从管理Kafka的ZooKeeper中再次读取元数据从而导致重复读取元数据;从SparkStreaming来看是成功的,但是Kafka认为是失败的(因为Receiver奔溃时没有及时更新offsets到ZooKeeper中)重新恢复时会重新消费一次,此时会导致数据重新消费的情况。

这里写图片描述

性能补充:

a、通过WAL方式保证数据不丢失,但弊端是通过WAL方式会极大的损伤SparkStreaming中的Receiver接收数据的性能(现网生产环境通常会Kafka direct api直接处理)。

b、需要注意到是:如果通过Kafka作为数据来源的话,Kafka中有数据,然后Receiver接受数据的时候又会有数据副本,这个时候其实是存储资源的浪费。(重复读取数据解决办法,读取数据时可以将元数据信息放入内存数据库中,再次计算时检查元数据是否被计算过)。

  Spark1.3的时候为了避免WAL的性能损失和实现Exactly Once而提供了Kafka direct api,把Kafka作为文件存储系统!!!此时Kafka兼具有流的优势和文件系统的优势,至此,Spark Streaming+Kafka就构建了完美的流处理世界!!!

  数据不需要copy副本,不需要WAL性能损耗,不需要Receiver,而直接通过kafka direct api直接消费数据,所有的Executors通过kafka api直接消费数据,直接管理offset,所以也不会重复消费数据;事务实现啦!!!

关于Spark Streaming数据输出多次重写及其解决方案

a、为什么会有这个问题,因为Spark Streaming在计算的时候基于Spark Core,Spark Core天生会做以下事情导致Spark Streaming的结果(部分)重复输出:

Task重试;

慢任务推测

Stage重复;

Job重试;

b、具体解决方案:

设置spark.task.maxFailures次数为1;最大允许失败的次数,设为1就没有task、stage、job等的重试;

设置spark.speculation为关闭状态(因为慢任务推测其实非常消耗性能,所以关闭后可以显著提高Spark Streaming处理性能)

Spark Streaming on Kafka的话,Job失败会导致任务失败,Job失败后可以设置auto.offset.reset为“largest”的方式;

这里写图片描述


最后再次强调

  可以通过transform和foreachRDD基于业务逻辑代码进行逻辑控制来实现数据不重复消费和输出不重复!这二个方法类似于spark的后门,可以做任意想象的控制操作!


有兴趣想学习国内顶级整套Spark+Spark Streaming+Machine learning课程的,欢迎加我qq  471186150。共享视频,性价比超高!

2019-01-09 17:58:07 xx666zz 阅读数 3209
  • Spark数据处理

    Spark多数据源处理教程,该课程主要介绍如何通过Spark的DataSource API来读写外部数据源中的数据,并结合一些具体场景来分析和解释使用DataSource API的好处以及需要注意的问题。

    6055 人正在学习 去看看 CSDN讲师

大数据1.0时代,社会大数据成就了Google,yahoo,百度

大数据2.0时代,消费大数据造就了亚马逊,Ebay ,阿里巴巴,腾讯

大数据3.0时代,把关注焦点转到了非结构化数据处理上面,特别是图像、视频、语音、文本的处理。

同时,人们又试图用深度学习这样新的思路去解决过去MapReduce和Spark已经解决的问题,这也意味着大数据技术开始进入3.0时代。

在这个全新阶段,可以看到整个市场上已经可以提供完整的大数据产品线,以及提供基于云化方式确保随处可用的大数据服务,开发和运维得以极大的简化,让大数据的落地变得越来越简单和快速,同时也变成了一家企业的创新驱动力。

大数据技术人才也成为社会的稀缺人才,大学高等教育、培训学校双管齐下,产出和需求依然不能成对比。我们知道学习大数据技术,需要的条条框框还是很多的,不是说随便一个人就能在短时间内掌握大数据技术。

今天给大家分享的大数据全套视频教程完整版,大家可以作为入门学习,先让自己进入大数据的世界再谈深入学习。

具体学习如下:

阶段一是Java语言基础,此阶段是大数据刚入门阶段,主要是学习一些Java语言的概念、字符、流程控制等

阶段二是Linux基础和Hadoop生态体系。此阶段主要掌握Linux操作系统的灵活使用。掌握大数据核心技术之一——Hadoop生态体系。

阶段三是分布式计算。主要掌握Scala语言的使用、各种数据结构、同时还要深度讲解spark的一系列核心概念比如结构、安装、运行、理论概念等。还有Storm实时开发,Storm主要用来处理实时计算的问题。

阶段四主要是实战项目案例,这一时期应该将所有知识通汇贯通,通过实战快速培养动手能力,确保一定的工作能力。

阶段五是大数据分析相关的技术知识,主要是讲解Data Analyze数据分析基础、数据可视化、sklearn中有三类朴素贝叶斯算法等等!

好了,以上就是学习知识点汇总和相应的视频教程,大家可以先去热身了!

没有更多推荐了,返回首页