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等等大数据数据科学并没有一个独立的学科体系,统计学,机器学....
想要在美国从事大数据工作,需要具备那些能力呢...
首先,这里有两个条件需要分解一下,第一是你要在美国工作,第二是你要从事数据类相关工作,我们就把这两个条件进行一一的解析。首先你要在美国工作,最...