Spark大数据处理:从入门到精通,一篇解锁高效实战!

mysmile 14 0
Spark大数据处理:从入门到精通,一篇解锁高效实战!

Apache Spark处理大数据入门,看这一篇就够了

【数盟致力于成为最卓越的数据科学社区,聚焦于大数据、分析挖掘、数据可视化领域,业务范围:线下活动、在线课程、猎头服务、项目对接】

【数盟活动】Data Science Meetup (2015.04.18)@深圳,腾讯数据平台部高级工程师陈蓉“腾讯大数据挖掘实践”,点击文末:阅读原文

作者 Srini Penchikala ,译者 丛一

什么是Spark

你是否厌倦了大数据处理的繁琐?Apache Spark正是你的救星!它专为速度、易用性和复杂分析而生,彻底革新大数据处理。最初在2009年由加州大学伯克利分校的AMPLab开发,并于2010年成为Apache的开源项目。

与Hadoop和Storm等传统技术相比,Spark优势突出。

Spark提供统一框架,一站式处理文本、图表等各类数据,无论是批量历史数据还是实时流数据,都能轻松驾驭。

Spark能将Hadoop集群应用在内存中的运行速度提升100倍,磁盘速度提升10倍,效率惊人。

开发者可用Java、Scala或Python快速编程,自带80多个高阶操作符,还支持Shell交互查询,灵活至极。

<

除了MapReduce,Spark更支持SQL查询、流处理、机器学习和图计算。你可以单独使用或组合这些功能,构建全能数据管道。

在本系列第一部分,我们将深入Spark核心,对比MapReduce,揭示它如何成为大数据处理的终极工具。

Hadoop和Spark

Hadoop作为十年老将,曾是大数据处理的标配。但MapReduce仅适合单路计算,多路计算时效率低下。每一步都需Map和Reduce阶段,且数据必须存储到分布式文件系统,导致复制和磁盘I/O拖慢速度。

Hadoop集群管理复杂,还需集成Mahout、Storm等工具处理不同用例,增加了运维负担。

复杂任务需串联多个MapReduce作业,每个作业高时延,必须顺序执行,灵活度受限。

Spark则允许用有向无环图(DAG)设计复杂数据管道,支持内存数据共享,让不同作业协同处理同一数据,大幅提升性能。

Spark运行在HDFS之上,可部署到Hadoop v1集群、Hadoop v2 YARN集群甚至Mesos中。它是MapReduce的强力替代,而非Hadoop的取代者,旨在提供统一的大数据解决方案。

Spark特性

Spark通过低成本洗牌(Shuffle)和内存存储,将MapReduce提升到新高度。其近实时处理能力,比其他技术快数倍。

它支持延迟计算优化流程,提供高级API提升开发效率,并确保架构一致性。

Spark将中间结果存于内存而非磁盘,特别适合重复数据集处理。它能在内存和磁盘间灵活工作,处理远超集群内存的数据集。

Spark智能缓存数据,部分存内存、部分存磁盘,开发者可按需评估,享受内存加速的性能红利。

其他核心特性包括:

支持远超MapReduce的函数库。

优化任意操作算子图。

以延迟计算助力整体流程优化。

提供简洁的Scala、Java和Python API。

拥有交互式Scala和Python Shell(Java暂不支持)。

Spark基于Scala,运行于JVM,支持多语言开发:

Scala

Java

Python

Clojure

R

Spark生态系统

除了核心API,Spark生态还提供附加库,拓展大数据分析与机器学习能力。

这些库包括:

Spark Streaming:

基于微批量计算,处理实时流数据。使用DStream(弹性分布式数据集系列),实现毫秒级响应,适用于金融监控等场景。

Spark SQL:

通过JDBC API暴露数据集,支持类SQL查询,兼容传统BI工具。可对JSON、Parquet等多格式数据执行ETL,方便整合与查询。

Spark MLlib:

可扩展的机器学习库,涵盖二元分类、线性回归、聚类、协同过滤等算法,加速AI项目落地。

Spark GraphX:

图计算API,引入弹性分布式属性图,支持基础操作和Pregel API变体。提供丰富图算法,简化社交网络或推荐系统分析。

还有BlinkDB和Tachyon等库。

BlinkDB是近似查询引擎,通过数据采样在海量数据上实现交互式SQL查询,以精度换速度。

Tachyon是以内存为中心的分布式文件系统,提供内存级文件共享,避免重复磁盘加载,加速跨框架数据访问。

适配器如Cassandra连接器和SparkR,支持与外部产品集成,扩展数据分析边界。

下图展示了Spark生态系统中各库的协同关系。

图1. Spark框架中的库

本系列文章将逐步探索这些强大库。

Spark体系架构

Spark体系架构包括三大组件:

数据存储

API

管理框架

深入解析:

数据存储:

Spark用HDFS等兼容Hadoop的数据源存储数据,包括HBase、Cassandra等,适应多样存储需求。

API

API让开发者轻松创建应用。Spark提供Scala、Java和Python三种语言接口,链接如下:

Scala API

Java

Python

资源管理:

Spark可部署在单机或Mesos、YARN等分布式框架上,灵活适配不同环境。

下图展示Spark体系架构全貌。

图2 Spark体系架构

弹性分布式数据集

弹性分布式数据集(RDD)是Spark核心概念,可视作分布式数据库表,存储任意类型数据,分区容错。

RDD优化数据处理,具备容错性,能自动重建数据集。

RDD不可变,变换(Transformation)生成新RDD,原数据保持不变。

支持两类操作:

变换(Transformation)

行动(Action)

变换:返回新RDD集合,无立即计算,如map、filter、reduceByKey等。

行动:计算并返回值,触发全部处理,如reduce、collect、count等。

如何安装Spark

安装Spark有多种方式:本地独立安装、使用供应商虚拟机镜像或云端服务如Databricks Cloud。本文将演示本地独立安装。目前最新版本为1.2.0,示例基于此版本。

如何运行Spark

安装后,可通过不同模式连接Spark引擎。下表列出Master URL参数。

如何与Spark交互

Spark运行后,可用Spark shell进行交互式分析,支持Scala和Python。Java暂不支持交互Shell。

分别用spark-shell.cmd和pyspark.cmd启动Scala和Python Shell。

Spark网页控制台

任何模式下,访问http://localhost:4040可查看作业结果和统计,包括Stages、Storage、Environment和Executors标签页。

(点击查看大图)

图3. Spark网页控制台

共享变量

Spark提供共享变量提升集群性能:广播变量和累加器。

广播变量:在每台机器缓存只读变量,避免任务间拷贝,高效处理大输入数据。

示例代码:

// // Broadcast Variables // val broadcastVar = sc.broadcast(Array(1, 2, 3)) broadcastVar.value

累加器:仅在相关操作时添加,支持并行计数或求和。任务可用add方法添加值,但仅驱动程序可读取结果。

示例代码:

// // Accumulators // val accum = sc.accumulator(0, "My Accumulator") sc.parallelize(Array(1, 2, 3, 4)).foreach(x => accum += x) accum.value

Spark应用示例

本文示例是一个简单字数统计应用,类似Hadoop入门案例。我们在小文本文件上执行查询,相同代码可扩展至海量数据。

为简化讨论,使用Spark Scala Shell。

先看本地安装步骤。

前提条件:

本机需安装JDK,第一步将涵盖。

还需安装Spark软件,第二步详细介绍。

注:以下指令以Windows为例,其他系统需调整路径。

I. 安装JDK

1)从Oracle官网下载JDK,推荐1.7版本。

安装到无空格目录,如c:\dev,避免“c:\Program Files”导致问题。

注:在“c:\Program Files”安装JDK或Spark。

2)安装后,切换到JDK 1.7的“bin”文件夹,运行命令验证:

java -version

正确安装将显示Java版本。

II. 安装Spark软件:

从Spark官网下载最新版,本文用1.2.0,匹配Hadoop 2.4+,文件名为spark-1.2.0-bin-hadoop2.4.tgz。

解压到本地文件夹,如c:\dev。

验证安装:切换到Spark文件夹,启动Spark Shell。Windows命令:

c: cd c:\dev\spark-1.2.0-bin-hadoop2.4 bin\spark-shell

安装成功将看到输出信息。

…. 15/01/17 23:17:46 INFO HttpServer: Starting HTTP Server 15/01/17 23:17:46 INFO Utils: Successfully started service 'HTTP class server' on port 58132. Welcome to ____ __ / __/__ ___ _____/ /__ _\ \/ _ \/ _ `/ __/ '_/ /___/ .__/\_,_/_/ /_/\_\ version 1.2.0 /_/ Using Scala version 2.10.4 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_71) Type in expressions to have them evaluated. Type :help for more information. …. 15/01/17 23:17:53 INFO BlockManagerMaster: Registered BlockManager 15/01/17 23:17:53 INFO SparkILoop: Created spark context.. Spark context available as sc.

运行测试命令:

sc.version

sc.appName

完成后,退出Shell:

:quit

启动Python Shell需先安装Python,推荐Anaconda发行版,包含科学计算包。

运行命令启动:

c: cd c:\dev\spark-1.2.0-bin-hadoop2.4 bin\pyspark

Spark示例应用

安装并启动后,即可用Spark API执行数据分析。以下命令简单处理文本文件,可轻松扩展至大数据集。

先运行经典Word Count示例。打开Scala Shell,输入命令:

import org.apache.spark.SparkContext import org.apache.spark.SparkContext._ val txtFile = "README.md" val txtData = sc.textFile(txtFile) txtData.cache

调用cache函数将RDD缓存,避免重复计算。cache是延迟操作,仅在行动触发时执行。

统计文件行数:

txtData.count

执行字数统计,结果显示每个单词频次:

val wcData = txtData.flatMap(l => l.split(" ")).map(word => (word, 1)).reduceByKey(_ + _) wcData.collect.foreach(println)

相关问答

大数据处理为何选择spark?

Spark特点开源的集群云计算框架端到端的数据分析平台(可视化监控)相较于Hadoopmapreduce在功能性能上都更进一步可以单例模式也可以集群模式Streaming...

Spark和Hadoop对于大数据的关系?

源自Google的Bigtable论文发表于2006年11月Hbase是GoogleBigtable克隆版SparkApacheSpark是用于大规模数据处理的统一分...

大数据培训机构排名前十_快账

1、阿里云大数据培训:阿里云是中国云计算行业的领军企业,阿里云大数据培训提供了包括Spark、Hadoop、Hive等多种大数据技术的培训课程。2、京东云大...

初接触大数据分析,想问除了Hadoop,还有哪些工具是常用的?...

除了你说的Hadoop外还有几种。大数据分析是研究大量的数据的过程中寻找模式,相关性和其他有用的信息,可以帮助企业更好地适应变化,并做出更明智的决...

向量数据库如何与Hadoop和Spark集成?-ZOL问答

我也不是很懂,但好像说是通过Spark的API来读写向量数据库吧,Hadoop可能就是用来存原始数据然后倒腾到向量库里去应该是Spark处理完特征之后,把向量数据丢给向量...

hadoop和大数据的关系?和spark的关系?

首先,大数据是个概念而已,简单比喻可以这么说,hadoop是实现大数据分析的一种架构;其实有点类似建设银行与银行的概念,建设银行是银行的一种;在没有hadoop之...

如何高效处理万亿级数据爬取与去重?-ZOL问答

之前我参与过一个项目,需要爬取全球范围内的瓦片数据并进行静态化处理,数据量非常庞大,大概每天要处理2200万条,按单机速度估算,整个任务需要10个月才能完成。...

要成为一名大数据开发工程师必备哪些技能?-ZOL问答

5条回答:【推荐答案】要成为一名大数据开发工程师,需要掌握以下技能:1.数据库技术:熟悉关系型数据库和非关系型数据库的概念、原理和操作方法。2.分布式系统:了...

怎么样进行大数据的入门级学习-ZOL问答

先学好Linux,懂了基本命令再学习hadoop,然后学java,后期还有很大象hive,hbase,spark,zookeeper等等大数据数据科学并没有一个独立的学科体系,统计学,机器学....

想要在美国从事大数据工作,需要具备那些能力呢...

首先,这里有两个条件需要分解一下,第一是你要在美国工作,第二是你要从事数据类相关工作,我们就把这两个条件进行一一的解析。首先你要在美国工作,最...