大数据Spark:从入门到实战(附视频教程&项目源码)

本文是由菜鸟窝出品的12天大数据特训营课程摘录出来的,关于大数据spark的入门到实战视频可以戳此查看第三章:https://www.cniao5.com/course/10244

勾搭助教Bella的weixin(BT474849)还可以免费领取大数据独家内部视频资源,项目源码等。

一、Spark简介
1、大数据spark简介:
Spark是大数据相关的最活跃的开源项目,是继 MapReduce框架之后的下一代大数据处理框架。
Spark是一个开源的内存计算框架,类似MapReduce, 用于使用商业服务器集群来处理和分析数据。 Spark API允许开发者创建分布式应用程序,使用整个集 群的资源,而不需要知道所有底层细节。

2、Spark发展历史
Spark是在Matei Zaharia的博士论文《An Architecture for Fast and General Data Processing on Large Cluster》(大型集群上 的快速和通过数据处理架构)的基础上发展而来。

2009年,Spark起源于加州大学伯克利分校的 实验室(AMPLab)。
2010年,Spark成为开源项目。 2013年,Spark被捐赠给Apache软件基金会。 同年,Databricks公司成立。
2014年,Spark称为Apache的顶级项目

3、Spark版本历史
大数据Spark:从入门到实战(附视频教程&项目源码)_第1张图片

二、Hadoop与MapReduce

2.1、MapReduce计算框架的缺点
1.可编程性较差
2.缺乏一个通用计算引擎
3.计算速度慢

2.2. Spark计算框架的优点
1、良好的编程性:
Spark程序比相应的MapReduce应用程序要简单得多。
Spark提供了丰富的API。
与MapReduce相比,Spark job只需要原有代码量的十分之一。

MapReduce版本的wordCount程序
大数据Spark:从入门到实战(附视频教程&项目源码)_第2张图片
Spark版本的wordCount程序大数据Spark:从入门到实战(附视频教程&项目源码)_第3张图片

2、一个通用计算引擎
Spark是一个真正的通用 处理框架,可用于:
①批处理
②交互式分析
③流处理
④机器学习
⑤图计算
大数据Spark:从入门到实战(附视频教程&项目源码)_第4张图片
3、计算速度快
Spark在MapReduce的性能 上提供了100X的改进。 2014年的排序比赛:
大数据Spark:从入门到实战(附视频教程&项目源码)_第5张图片
Hadoop架构设计思想—数据不同代码动,即计算处理 应该移动到数据所在的位置。 Spark继承了这一设计思想,在此之上提供了内存计算、 执行计划等优化。

与MapReduce不同,Spark每个job不局限于两个 stage(阶段)–可以有任意数量的stage(阶段)。 Spark不是将复杂算法分成多个job, 而是在job中包 含多个stages,使Spark可以进行更多优化,例如, 最小化shuffle数据和磁盘IO。

Spark可以独立运行,但在生产环境中,Spark会读取HDFS上的数据,使用YARN作 为资源管理器。在Hadoop集群中,Spark和MapReduce可以同时使用,以提供分布 式数据处理,如图所示

大数据Spark:从入门到实战(附视频教程&项目源码)_第6张图片

三、Spark工具栈

1.Spark Core Spark Core是Spark的主要执行引擎,Spark的所 有功能都基于这个引擎。它提供了Spark的主要功 能,比如任务调度,内存管理、故障恢复和处理存 储。
2.SparkSQL 处理结构化数据,通过SQL和Hive查询语言(HQL) 查询数据。
3.SparkStreaming 流处理,用于处理流数据。
4.MLlib 提供了机器学习算法,如分类、聚类和协同过滤。
5.GraphX 图计算,可以操作像社交网络中包含的关系图。

大数据Spark:从入门到实战(附视频教程&项目源码)_第7张图片

四、安装Spark

1.CentOS 单机安装
1、安装JDK:Java8
2、下载Spark2.3,并解压
3、设置JAVA_HOME、SPARK_HOME 环境变量
4、启动Spark
5、启动Spark shell

2.CentOS3节点安装:(Node1 主节点 Node2 从节点 node3 从节点)

大数据Spark:从入门到实战(附视频教程&项目源码)_第8张图片
3.Spark集群管理器

standalone集群管理器 Spark可以在它自己的专用集群上运行,称为standalone Spark集群。

standalone集群管理器的体系结构

standalone的集群管理器使用worker和master进程来执行计算。 worker进程管理每个集群节点的CPU/RAM等计算资源。 master进程负责分配资源。

在standalone集群管理器上部署的Spark应用程序使用以下实体:

driver程序:这是由数据处理逻辑组 成的主Spark应用程序。
Executor:这是一个运行在worker节点上的 JVM进程,处理driver提交的job计算任务。
Task:task是数据处理job的子组件。
注意: Spark应用程序和驱动程序被用作彼此的同义词。

下图显示了standalone Spark集群的体系结构。Driver程序使用SparkContext对象,作为 Spark 工具库的入口点,连接到一个Spark集群。

SparkContext对象在worker节点上启动Executor。并向他们发送应用程序代码。job被分 解为task,并由Executor执行。

在Spark standalone 集群中,Spark Master和Worker进程管理Spark应用程序。
大数据Spark:从入门到实战(附视频教程&项目源码)_第9张图片

4.Spark与Scala
可以用三种不同的语言编写Spark应用程序: Scala, Python 和 Java。
相对于其他两种语言,Scala有较好的性能,而且比Java 应用程序代码更简单。

对于Spark开发工程师,建议花些时间学习Scala语言:

尽管您可以在不了解Scala的情况下使用Spark,但如果您 知道Scala,就可以阅读Spark源代码,因为Spark是用 Scala编写的。

Spark RDD中的方法都是模仿Scala集合API的。RDD中的方 法如:map、filter、reduce,Scala中都有类似的函数。

Scala提供的另一个巨大优势是,Spark shell用于调试和开发 工作非常有用。Spark是一种解释型语言,隐藏有spark shell; 由于Java是一种编译语言,所以没有shell。

许多Spark的特性首先在Scala中编写。

5.函数式编程
Spark依赖于函数式编程,它使用函数作为基本编程输入。函数没有状态或 副作用,只包含输入和输出。

(1)将函数作为参数传递

Spark使用函数作为参数,而大多数 RDD操作都接受这些函数参数。它将 函数应用于RDD中的每条数据记录。 举个例子: scala> def toUpper(s):return s.upper() scala> mydata = sc.textFile(“test.txt”) scala> mydata.map(toUpper).take

(2) 函数式编程
你也可以使用匿名函数,这主要是 为了短期的一次性功能。
举个例子: 匿名函数 Scala> mydata.map(line => line.toUpperCase()).take(2) 您可以使用下划线()代表匿名参数,上述代码等价于: Scala> mydata.map(.toUpperCase()).take(2)

6.Spark功能入口—SparkContext
(1) SparkContext对象是使用Spark功能的入口。Spark Driver程序中最重 要的一步就是创建SparkContext对象。使用SparkContext对象,Spark 应用程序就可以通过资源管理器访问Spark集群。

(2)要创建SparkContext对象,首先要创建SparkConf对象。SparkConf对 象中包含需要传递给SparkContext对象的配置参数。

(3)创建完成SparkContext对象之后,我们就可以访问Spark相关的功能方 法来创建RDD、共享变量,进行数据处理了。

(4)在一个JVM中,只能存在一个激活状态的SparkContext对象。可以使用 SparkContext对象的stop方法来停止SparkContext。

7.RDD简介

RDD是Spark的基本数据结构,是一个数据记录的不可变的分布式集合。这 个集合被分成多个逻辑分区partition,在集群中的不同节点上进行计算。

RDD全称为:Resilient Distributed Dataset(弹性分布式数据集):

Resilient弹性 体现在使用RDD DAG实现容错,可以重新计算丢失的分区。
Distributed分布式 体现在使用RDD DAG实现容错,可以重新计算丢失的分区。

你可能感兴趣的:(大数据)