如何使用spark做大数据分析
动手实验Apache Spark的最好方式是使用交互式Shell命令行,Spark目前有Python Shell和Scala Shell两种交互式命令行。
可以从 这里下载Apache Spark,下载时选择最近预编译好的版本以便能够立即运行shell。
目前最新的Apache Spark版本是1.5.0,发布时间是2015年9月9日。
tar -xvzf ~/spark-1.5.0-bin-hadoop2.4.tgz
运行Python Shell
cd spark-1.5.0-bin-hadoop2.4
./bin/pyspark
在本节中不会使用Python Shell进行演示。
Scala交互式命令行由于运行在JVM上,能够使用java库。
运行Scala Shell
cd spark-1.5.0-bin-hadoop2.4
./bin/spark-shell
执行完上述命令行,你可以看到下列输出:
Scala Shell欢迎信息
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ ’_/
/___/ .__/\_,_/_/ /_/\_\ version 1.5.0
/_/
Using Scala version 2.10.4 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_25)
Type in expressions to have them evaluated.
Type :help for more information.
15/08/24 21:58:29 INFO SparkContext: Running Spark version 1.5.0
下面是一些简单的练习以便帮助使用shell。也许你现在不能理解我们做的是什么,但在后面我们会对此进行详细分析。在Scala Shell中,执行下列操作:
在Spark中使用README 文件创建textFileRDD
val textFile = sc.textFile(“README.md“)
获取textFile RDD的第一个元素
textFile.first()
res3: String = # Apache Spark
对textFile RDD中的数据进行过滤操作,返回所有包含“Spark”关键字的行,操作完成后会返回一个新的RDD,操作完成后可以对返回的RDD的行进行计数
筛选出包括Spark关键字的RDD然后进行行计数
val linesWithSpark = textFile.filter(line =》 line.contains(“Spark“))
linesWithSpark.count()
res10: Long = 19
要找出RDD linesWithSpark单词出现最多的行,可以使用下列操作。使用map方法,将RDD中的各行映射成一个数,然后再使用reduce方法找出包含单词数最多的行。
找出RDD textFile 中包含单词数最多的行
textFile.map(line =》 line.split(“ “).size)
.reduce((a, b) =》 if (a 》 b) a else b)
res11: Int = 14
返回结果表明第14行单词数最多。
也可以引入其它java包,例如 Math.max()方法,因为map和reduce方法接受scala函数字面量作为参数。
在scala shell中引入Java方法
import java.lang.Math
textFile.map(line =》 line.split(“ “).size)
.reduce((a, b) =》 Math.max(a, b))
res12: Int = 14
我们可以很容易地将数据缓存到内存当中。
将RDD linesWithSpark 缓存,然后进行行计数
linesWithSpark.cache()
res13: linesWithSpark.type =
MapPartitionsRDD at filter at 《console》:23
linesWithSpark.count()
res15: Long = 19
上面简要地给大家演示的了如何使用Spark交互式命令行。
弹性分布式数据集(RDDs)
Spark在集群中可以并行地执行任务,并行度由Spark中的主要组件之一——RDD决定。弹性分布式数据集(Resilient distributed data, RDD)是一种数据表示方式,RDD中的数据被分区存储在集群中(碎片化的数据存储方式),正是由于数据的分区存储使得任务可以并行执行。分区数量越多,并行越高。下图给出了RDD的表示:
Display- Edit
想像每列均为一个分区(partition ),你可以非常方便地将分区数据分配给集群中的各个节点。
为创建RDD,可以从外部存储中读取数据,例如从Cassandra、Amazon简单存储服务(Amazon Simple Storage Service)、HDFS或其它Hadoop支持的输入数据格式中读取。也可以通过读取文件、数组或JSON格式的数据来创建RDD。另一方面,如果对于应用来说,数据是本地化的,此时你仅需要使用parallelize方法便可以将Spark的特性作用于相应数据,并通过Apache Spark集群对数据进行并行化分析。为验证这一点,我们使用Scala Spark Shell进行演示:
学习数据挖掘需不需要学习spark
学习数据挖掘是需要学习spark的。
学Spark是可以帮助数据挖掘十分有效的进行,同时出于任务管道承接的考虑,当产生多个Stage,需要基于底层文件系统来存储每一个Stage的输出结果,而且兼容HDFS、Hive,可融入Hadoop的生态系统,可以弥补MapReduce的不足。Spark具有高效、易用、通用、兼容的特性,这些特性使得计算运行速度提高上百倍,还可以查询优化程序和物理执行引擎,实现批量和流式数据的高性能。同时Spark支持Java、Python和Scala的API,还支持许多种高级算法,使用户可以快速构建不同的应用。可以非常方便地在这些shell中使用Spark集群来验证解决问题的方法。Spark可以非常方便地与其他的开源产品进行融合。
关于大数据挖掘工程师的课程推荐CDA数据分析师的相关课程,课程培养学员硬性的数据挖掘理论与Python数据挖掘算法技能的同时,还兼顾培养学员软性数据治理思维、商业策略优化思维、挖掘经营思维、算法思维、预测分析思维,全方位提升学员的数据洞察力。点击预约免费试听课。
apache spark是什么
Apache Spark是一个强大的开源处理引擎,最初由Matei Zaharia开发,是他在加州大学伯克利分校的博士论文的一部分。
Apache Spark是快速、易于使用的框架,允许你解决各种复杂的数据问题,无论是半结构化、结构化、流式,或机器学习、数据科学。网页链接
大数据spark 和 hodoop 这两个什么情况未来哪个会取代哪个
Hadoop包括MapReduce和HDFS,目前很火的Spark,如果说代替,只是会代替Hadoop中的MapReduce。Spark在任务调度和数据可靠性方面,确实比MapReduce要快很多,而且支持将数据缓存到内存中,下次查的时候直接基于内存访问。
Spark:
是一个基于内存计算的开源的集群计算系统,目的是让数据分析更加快速, Spark 是一种与 Hadoop
相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark 在某些工作负载方面表现得更加优越,换句话说,Spark
启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。
Spark 是在 Scala 语言中实现的,它将 Scala 用作其应用程序框架。与 Hadoop 不同,Spark 和 Scala 能够紧密集成,其中的 Scala 可以像操作本地集合对象一样轻松地操作分布式数据集。
尽
管创建 Spark 是为了支持分布式数据集上的迭代作业,但是实际上它是对 Hadoop 的补充,可以在 Hadoop
文件系统中并行运行。通过名为Mesos的第三方集群框架可以支持此行为。Spark 由加州大学伯克利分校 AMP 实验室
(Algorithms,Machines,and People Lab) 开发,可用来构建大型的、低延迟的数据分析应用程序。
虽然 Spark 与 Hadoop 有相似之处,但它提供了具有有用差异的一个新的集群计算框架。首先,Spark
是为集群计算中的特定类型的工作负载而设计,即那些在并行操作之间重用工作数据集(比如机器学习算法)的工作负载。为了优化这些类型的工作负
载,Spark 引进了内存集群计算的概念,可在内存集群计算中将数据集缓存在内存中,以缩短访问延迟.
在大数据处理方面相信大家对hadoop已经耳熟能详,基于GoogleMap/Reduce来实现的Hadoop为开发者提供了map、reduce原
语,使并行批处理程序变得非常地简单和优美。Spark提供的数据集操作类型有很多种,不像Hadoop只提供了Map和Reduce两种操作。比如
map,filter, flatMap,sample, groupByKey, reduceByKey, union,join,
cogroup,mapValues,
sort,partionBy等多种操作类型,他们把这些操作称为Transformations。同时还提供Count,collect,
reduce, lookup,
save等多种actions。这些多种多样的数据集操作类型,给上层应用者提供了方便。各个处理节点之间的通信模型不再像Hadoop那样就是唯一的
Data Shuffle一种模式。用户可以命名,物化,控制中间结果的分区等。可以说编程模型比Hadoop更灵活.
科普Spark,Spark是什么,如何使用Spark
科普Spark,Spark是什么,如何使用Spark
1.Spark基于什么算法的分布式计算(很简单)
2.Spark与MapReduce不同在什么地方
3.Spark为什么比Hadoop灵活
4.Spark局限是什么
5.什么情况下适合使用Spark
什么是Spark
Spark是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行计算框架,Spark基于map reduce算法实现的分布式计算,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Job中间输出和结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的map reduce的算法。其架构如下图所示:
Spark与Hadoop的对比
Spark的中间数据放到内存中,对于迭代运算效率更高。
Spark更适合于迭代运算比较多的ML和DM运算。因为在Spark里面,有RDD的抽象概念。
Spark比Hadoop更通用
Spark提供的数据集操作类型有很多种,不像Hadoop只提供了Map和Reduce两种操作。比如map, filter, flatMap, sample, groupByKey, reduceByKey, union, join, cogroup, mapValues, sort,partionBy等多种操作类型,Spark把这些操作称为Transformations。同时还提供Count, collect, reduce, lookup, save等多种actions操作。
这些多种多样的数据集操作类型,给给开发上层应用的用户提供了方便。各个处理节点之间的通信模型不再像Hadoop那样就是唯一的Data Shuffle一种模式。用户可以命名,物化,控制中间结果的存储、分区等。可以说编程模型比Hadoop更灵活。
不过由于RDD的特性,Spark不适用那种异步细粒度更新状态的应用,例如web服务的存储或者是增量的web爬虫和索引。就是对于那种增量修改的应用模型不适合。
容错性
在分布式数据集计算时通过checkpoint来实现容错,而checkpoint有两种方式,一个是checkpoint data,一个是logging the updates。用户可以控制采用哪种方式来实现容错。
可用性
Spark通过提供丰富的Scala, Java,Python API及交互式Shell来提高可用性。
Spark与Hadoop的结合
Spark可以直接对HDFS进行数据的读写,同样支持Spark on YARN。Spark可以与MapReduce运行于同集群中,共享存储资源与计算,数据仓库Shark实现上借用Hive,几乎与Hive完全兼容。
Spark的适用场景
Spark是基于内存的迭代计算框架,适用于需要多次操作特定数据集的应用场合。需要反复操作的次数越多,所需读取的数据量越大,受益越大,数据量小但是计算密集度较大的场合,受益就相对较小(大数据库架构中这是是否考虑使用Spark的重要因素)
由于RDD的特性,Spark不适用那种异步细粒度更新状态的应用,例如web服务的存储或者是增量的web爬虫和索引。就是对于那种增量修改的应用模型不适合。总的来说Spark的适用面比较广泛且比较通用。
运行模式
本地模式
Standalone模式
Mesoes模式
yarn模式
Spark生态系统
Shark ( Hive on Spark): Shark基本上就是在Spark的框架基础上提供和Hive一样的H iveQL命令接口,为了最大程度的保持和Hive的兼容性,Shark使用了Hive的API来实现query Parsing和 Logic Plan generation,最后的PhysicalPlan execution阶段用Spark代替Hadoop MapReduce。通过配置Shark参数,Shark可以自动在内存中缓存特定的RDD,实现数据重用,进而加快特定数据集的检索。同时,Shark通过UDF用户自定义函数实现特定的数据分析学习算法,使得SQL数据查询和运算分析能结合在一起,最大化RDD的重复使用。
Spark streaming: 构建在Spark上处理Stream数据的框架,基本的原理是将Stream数据分成小的时间片断(几秒),以类似batch批量处理的方式来处理这小部分数据。Spark Streaming构建在Spark上,一方面是因为Spark的低延迟执行引擎(100ms+)可以用于实时计算,另一方面相比基于Record的其它处理框架(如Storm),RDD数据集更容易做高效的容错处理。此外小批量处理的方式使得它可以同时兼容批量和实时数据处理的逻辑和算法。方便了一些需要历史数据和实时数据联合分析的特定应用场合。
Bagel: Pregel on Spark,可以用Spark进行图计算,这是个非常有用的小项目。Bagel自带了一个例子,实现了Google的PageRank算法。
End.
apache spark是什么意思
n.火花;火星;电火花;(指品质或感情)一星,丝毫,一丁点。
averysmallburningpieceofmaterialthatisproducedbysththatisburningorbyhittingtwohardsubstancestogether。
Asparkisatinybrightpieceofburningmaterialthatfliesupfromsomethingthatisburning.
Asparkofaqualityorfeeling,especiallyadesirableone,isasmallbutnoticeableamountofit.一站式出国留学攻略 http://www.offercoming.com
hadoop和spark哪个好
spark和hadoop的区别:诞生的先后顺序、计算不同、平台不同。
诞生的先后顺序,hadoop属于第一代开源大数据处理平台,而spark属于第二代。属于下一代的spark肯定在综合评价上要优于第一代的hadoop。
计算不同spark和hadoop在分布式计算的底层思路上,其实是极为相似的,即mapreduce分布式运算模型:将运算分成两个阶段,阶段1-map,负责从上游拉取数据后各自运算,然后将运算结果shuffle给下游的reduce,reduce再各自对通过shuffle读取来的数据进行聚合运算spark和hadoop在分布式计算的具体实现上,又有区别;hadoop中的mapreduce运算框架,一个运算job,进行一次map-reduce的过程;而spark的一个job中,可以将多个map-reduce过程级联进行。
平台不同spark和hadoop区别是,spark是一个运算平台,而hadoop是一个复合平台(包含运算引擎,还包含分布式文件存储系统,还包含分布式运算的资源调度系统),所以,spark跟hadoop来比较的话,主要是比运算这一块大数据技术发展到目前这个阶段,hadoop主要是它的运算部分日渐式微,而spark目前如日中天,相关技术需求量大,offer好拿。
hadoop与spark的区别是什么
请看下面这张图:
狭义的Hadoop 也就是最初的版本:只有HDFS Map Reduce
后续出现很多存储,计算,管理 框架。
如果说比较的话就 Hadoop Map Reduce 和 Spark 比较,因为他们都是大数据分析的计算框架。
Spark 有很多行组件,功能更强大,速度更快。
1、解决问题的层面不一样
首先,Hadoop和Apache Spark两者都是大数据框架,但是各自存在的目的不尽相同。Hadoop实质上更多是一个分布式数据基础设施: 它将巨大的数据集分派到一个由普通计算机组成的集群中的多个节点进行存储,意味着您不需要购买和维护昂贵的服务器硬件。
同时,Hadoop还会索引和跟踪这些数据,让大数据处理和分析效率达到前所未有的高度。Spark,则是那么一个专门用来对那些分布式存储的大数据进行处理的工具,它并不会进行分布式数据的存储。
2、两者可合可分
Hadoop除了提供为大家所共识的HDFS分布式数据存储功能之外,还提供了叫做MapReduce的数据处理功能。所以这里我们完全可以抛开Spark,使用Hadoop自身的MapReduce来完成数据的处理。
相反,Spark也不是非要依附在Hadoop身上才能生存。但如上所述,毕竟它没有提供文件管理系统,所以,它必须和其他的分布式文件系统进行集成才能运作。这里我们可以选择Hadoop的HDFS,也可以选择其他的基于云的数据系统平台。但Spark默认来说还是被用在Hadoop上面的,毕竟,大家都认为它们的结合是最好的。
以下是从网上摘录的对MapReduce的最简洁明了的解析:
3、Spark数据处理速度秒杀MapReduce
Spark因为其处理数据的方式不一样,会比MapReduce快上很多。MapReduce是分步对数据进行处理的: ”从集群中读取数据,进行一次处理,将结果写到集群,从集群中读取更新后的数据,进行下一次的处理,将结果写到集群,等等…“ Booz Allen Hamilton的数据科学家Kirk Borne如此解析。
反观Spark,它会在内存中以接近“实时”的时间完成所有的数据分析:“从集群中读取数据,完成所有必须的分析处理,将结果写回集群,完成,” Born说道。Spark的批处理速度比MapReduce快近10倍,内存中的数据分析速度则快近100倍。
如果需要处理的数据和结果需求大部分情况下是静态的,且你也有耐心等待批处理的完成的话,MapReduce的处理方式也是完全可以接受的。
但如果你需要对流数据进行分析,比如那些来自于工厂的传感器收集回来的数据,又或者说你的应用是需要多重数据处理的,那么你也许更应该使用Spark进行处理。
大部分机器学习算法都是需要多重数据处理的。此外,通常会用到Spark的应用场景有以下方面:实时的市场活动,在线产品推荐,网络安全分析,机器日记监控等。
4、灾难恢复
两者的灾难恢复方式迥异,但是都很不错。因为Hadoop将每次处理后的数据都写入到磁盘上,所以其天生就能很有弹性的对系统错误进行处理。Spark的数据对象存储在分布于数据集群中的叫做弹性分布式数据集(RDD: Resilient Distributed Dataset)中。这些数据对象既可以放在内存,也可以放在磁盘,所以RDD同样也可以提供完成的灾难恢复功能。