Spark学习笔记(一)Spark初识【特性、组成、应用】

来源:脚本之家  责任编辑:小易  

大数据的浪潮风靡全球的时候,Spark火了。在国外 Yahoo!、Twitter、Intel、Ama

本文实例讲述了Spark基本特性、组成、应用。分享给大家供大家参考,具体如下:

一、官网介绍

1、什么是Spark

所谓Spark是起源于美国加州大学伯克利分校AMPLab的大数据计算平台,在2010年开源,目前是A

官网地址:http://spark.apache.org/

Scala相对于Java的优势是巨大的。熟悉Scala之后再看Java代码,有种读汇编的感觉……

Apache Spark™是用于大规模数据处理的统一分析引擎。

应该可以直接指定吧

从右侧最后一条新闻看,Spark也用于AI人工智能

优化过程中常用到方法查看查询的整个运行计划 scala>query.queryExec

spark是一个实现快速通用的集群计算平台。它是由加州大学伯克利分校AMP实验室 开发的通用内存并行计算框架,用来构建大型的、低延迟的数据分析应用程序。它扩展了广泛使用的MapReduce计算模型。高效的支撑更多计算模式,包括交互式查询和流处理。spark的一个主要特点是能够在内存中进行计算,及时依赖磁盘进行复杂的运算,Spark依然比MapReduce更加高效。

2、为什么要学Spark

比特好像比较猛,各项成绩也都不错,跳高跳远啥的,好像还不怕疼,特别凶。但是有一个问题,比特的体重一般不超过100斤,最重的约157斤,但是这个体重的比特灵敏度速度太差,不再考虑范围内。而老虎,动不动就3.4百斤,重的600多斤,就好像一个120斤的成年人,打一个20多斤不到30斤的娃娃,你觉得多少娃娃能赤手空拳打死这个大人?显而易见,一拳一个小朋友的大人胜率在99以上。老虎速度快,力量大,一爪子都能把狗头呼掉。

中间结果输出:基于MapReduce的计算引擎通常会将中间结果输出到磁盘上,进行存储和容错。出于任务管道承接的,考虑,当一些查询翻译到MapReduce任务时,往往会产生多个Stage,而这些串联的Stage又依赖于底层文件系统(如HDFS)来存储每一个Stage的输出结果。

大蒜去年一轮价格暴涨,人们至今记忆犹新;今年,新蒜刚刚上市,价格却一下子被打入“冰点”。曾经的“蒜你狠”在一个月内跌幅达到八成多。面对大幅跳水的价格,蒜农很纠结,想留着观望一下,又怕价格继续走低。今年,大蒜价格不断下跌主要原因是什么?“蒜泥狠”真的一去不复返了吗?在我国大蒜之乡山东金乡县,蒜农杨贵华正一家蒜头批发店前,从平板车卸下一袋袋新蒜。他告诉记者,5月中旬一上市,地里的新蒜就已经跌了一半多。杨贵华:现在大蒜已经回归到很低,目前大蒜2块以下,比去年同期低的多,一倍以上,去年4块钱以上。这个价格蒜农是不赚钱的。一般价格在1块678。今年种植面积大,去年连续两年大蒜效益好,农户扩种很多。今年气

Spark是MapReduce的替代方案,而且兼容HDFS、Hive,可融入Hadoop的生态系统,以弥补MapReduce的不足。

二、Spark的四大特性

1、高效性

感谢邀请!这问题要从两方面来回答。如果是要换机相,建议可以考虑6D2和5D4,毕竟,60D是残幅机,你的这几个镜头,都是EF卡口的镜头,虽然能用在60D上,但毕竟要乘1.6的倍率。如果还是喜欢残幅机,可以考虑80D,也是不错的。其实60D虽然老了些,虽说使用的是佳能祖传的1800COMS,但也还是一款很不错的相机,可能考虑用来拍延时和大范围延时,足够用了。如果要换镜头的话,个人建议可以上几个定焦,50定,85定,或者百微,都是不错的,这样焦段也就差不多补齐了。个人建议,谨供参考

运行速度提高100倍。

你好,目前市场上的造假方法主要是假金星、胶磨、胶补,下面我就跟你说说怎么辨别。今天我就给大家盘点一下紫檀的造假方法。假金星现在大家都喜欢带金星的小叶紫檀,特别在小叶紫檀氧化以后,佛珠手串上的金星就更加地明显了,就真的像夜空中的繁星一样漂亮。获得了玩友的喜爱,所以带金星的小叶紫檀价格一路水涨船高。同时,利益的诱惑让非常多的商家开始用胶水和金粉等物质填充小叶紫檀的棕眼,假冒成金星来获取暴利。直线型的小叶紫檀假星上图的这种假星是最容易辨别的一种,所有的金星都连贯成了一条直线,而真正的金星首先应该是断断续续的。真金星在棕眼中断断续续的状态当然,有时候道高一尺,魔高一丈。这种直线型的假星骗不到人以后,商

Apache Spark使用最先进的DAG调度程序,查询优化程序和物理执行引擎,实现批量和流式数据的高性能。

2、易用性

Spark支持Java、Python和Scala的API,还支持超过80种高级算法,使用户可以快速构建不同的应用。而且Spark支持交互式的Python和Scala的shell,可以非常方便地在这些shell中使用Spark集群来验证解决问题的方法。

3、通用性

Spark提供了统一的解决方案。Spark可以用于批处理、交互式查询(Spark SQL)、实时流处理(Spark Streaming)、机器学习(Spark MLlib)和图计算(GraphX)。这些不同类型的处理都可以在同一个应用中无缝使用。Spark统一的解决方案非常具有吸引力,毕竟任何公司都想用统一的平台去处理遇到的问题,减少开发和维护的人力成本和部署平台的物力成本。

4、兼容性

Spark可以非常方便地与其他的开源产品进行融合。比如,Spark可以使用Hadoop的YARN和Apache Mesos作为它的资源管理和调度器,器,并且可以处理所有Hadoop支持的数据,包括HDFS、HBase和Cassandra等。这对于已经部署Hadoop集群的用户特别重要,因为不需要做任何数据迁移就可以使用Spark的强大处理能力。Spark也可以不依赖于第三方的资源管理和调度器,它实现了Standalone作为其内置的资源管理和调度框架,这样进一步降低了Spark的使用门槛,使得所有人都可以非常容易地部署和使用Spark。此外,Spark还提供了在EC2上部署Standalone的Spark集群的工具。

 

Mesos:Spark可以运行在Mesos里面(Mesos 类似于yarn的一个资源调度框架)

standalone:Spark自己可以给自己分配资源(master,worker)

YARN:Spark可以运行在yarn上面

 Kubernetes:Spark接收 Kubernetes的资源调度

三、Spark的组成

Spark组成(BDAS):全称伯克利数据分析栈,通过大规模集成算法、机器、人之间展现大数据应用的一个平台。也是处理大数据、云计算、通信的技术解决方案。

它的主要组件有:

SparkCore:将分布式数据抽象为弹性分布式数据集(RDD),实现了应用任务调度、RPC、序列化和压缩,并为运行在其上的上层组件提供API。

SparkSQL:Spark Sql 是Spark来操作结构化数据的程序包,可以让我使用SQL语句的方式来查询数据,Spark支持 多种数据源,包含Hive表,parquest以及JSON等内容。

SparkStreaming: 是Spark提供的实时数据进行流式计算的组件。

MLlib:提供常用机器学习算法的实现库。

GraphX:提供一个分布式图计算框架,能高效进行图计算。

BlinkDB:用于在海量数据上进行交互式SQL的近似查询引擎。

Tachyon:以内存为中心高容错的的分布式文件系统。

四、应用场景

Yahoo将Spark用在Audience Expansion中的应用,进行点击预测和即席查询等 淘宝技术团队使用了Spark来解决多次迭代的机器学习算法、高计算复杂度的算法等。应用于内容推荐、社区发现等

腾讯大数据精准推荐借助Spark快速迭代的优势,实现了在“数据实时采集、算法实时训练、系统实时预测”的全流程实时并行高维算法,最终成功应用于广点通pCTR投放系统上。

优酷土豆将Spark应用于视频推荐(图计算)、广告业务,主要实现机器学习、图计算等迭代计算。

更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

扩展阅读,根据您访问的内容系统为您准备了以下内容,希望对您有帮助。

科普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.

基于spark的深度学习怎么实现,具体应用实例

Apache Spark项目于2009年诞生于伯克利大学的AMPLab实验室,当初的目的在于将内存内分析机制引入大规模数据集当中。在那个时候,Hadoop MapReduce的关注重点仍然放在那些本质上无法迭代的大规模数据管道身上。想在2009年以MapReduce为基础构建起分析模型实在是件费心费力而又进展缓慢的工作,因此AMPLab设计出Spark来帮助开发人员对大规模数据集执行交互分析、从而运行各类迭代工作负载——也就是对内存中的同一套或者多套数据集进行反复处理,其中最典型的就是机器学习算法。

Spark的意义并不在于取代Hadoop。正相反,它为那些高度迭代的工作负载提供了一套备用处理引擎。通过显著降低面向磁盘的写入强度,Spark任务通常能够在运行速度方面高出Hadoop MapReduce几个数量级。作为逗寄生地在Hadoop集群当中的得力助手,Spark利用Hadoop数据层(HDFS、HBase等等)作为数据管道终端,从而实现原始数据读取以及最终结果存储。

如何初始化一个SparkContext

om pyspark import SparkConf, SparkContext

# local 时URL,本地计算机(从族的概念)

# My App 应用程序名字

conf = SparkConf().setMaster("local").setAppName("My App")

sc = SparkContext(conf = conf)

此时的sc就是一个SparkContext,了SparkContext的实例化对象,即刻就可以创建RDD了。

学习Spark需要哪些基础知识

花一周时间看一下scala,了解一下函数式编程的特性,然后看spark官网教程或者《learning spark》(这本书还没有出版,但是网上有前五章的预览版)。

spark目前的资料非常少,有用的中文资料更是寥寥无几,一定要去英文网站上看。

根据我做完一个spark项目的经验,spark目前还有很多bug,处理特别多的数据时经常会出错。

如何保证一个Spark Application只有一个SparkContext实例

Spark有个关于是否允许一个application存在多个SparkContext实例的配置项, 如下:

spark.driver.allowMultipleContexts: If true, log warnings instead of throwing exceptions when multiple SparkContexts are active.

该值默认为false, 即不允许一个application同时存在一个以上的avtive SparkContext实例. 如何保证这一点呢?

在SparkContext构造函数最开始处获取是否允许存在多个SparkContext实例的标识allowMultipleContexts, 我们这里只讨论否的情况 ( 默认也是否, 即allowMultipleContexts为false )

class SparkContext(config: SparkConf) extends Logging with ExecutorAllocationClient {

//< 如果为true,有多个SparkContext处于active状态时记录warning日志而不是抛出异常.

private val allowMultipleContexts: Boolean =

config.getBoolean("spark.driver.allowMultipleContexts", false)

//< 此处省略n行代码

}

//< 注意: 这必须放在SparkContext构造器的最开始

SparkContext.markPartiallyConstructed(this, allowMultipleContexts)

private[spark] def markPartiallyConstructed(

sc: SparkContext,

allowMultipleContexts: Boolean): Unit = {

SPARK_CONTEXT_CONSTRUCTOR_LOCK.synchronized {

assertNoOtherContextIsRunning(sc, allowMultipleContexts)

contextBeingConstructed = Some(sc)

}

}

//< 伴生对象SparkContext包含一组实用的转换和参数来和各种Spark特性一起使用

object SparkContext extends Logging {

private val SPARK_CONTEXT_CONSTRUCTOR_LOCK = new Object()

//< 此处省略n行代码

}

结合以上三段代码, 可以看出保证一个Spark Application只有一个SparkContext实例的步骤如下:

通过SparkContext伴生对象object SparkContext中维护了一个对象 SPARK_CONTEXT_CONSTRUCTOR_LOCK, 单例SparkContext在一个进程中是唯一的, 所以SPARK_CONTEXT_CONSTRUCTOR_LOCK在一个进程中也是唯一的

函数markPartiallyConstructed中通过synchronized方法保证同一时间只有一个线程能处理

assertNoOtherContextIsRunning(sc, allowMultipleContexts)

contextBeingConstructed = Some(sc)

assertNoOtherContextIsRunning会检测是否有其他SparkContext对象正在被构造或已经构造完成, 若allowMultipleContexts为true且确有正在或者已经完成构造的SparkContext对象, 则抛出异常, 否则完成SparkContext对象构造

看到这里, 有人可能会有疑问, 这虽然能保证在一个进程内只有唯一的SparkContext对象, 但Spark是分布式的, 是不是无法保证在在其他节点的进程内会构造SparkContext对象. 其实并不存在这样的问题, 因为SparkContext只会在Driver中得main函数中声明并初始化, 也就是说只会在Driver所在节点的一个进程内构造.

  • 本文相关:
  • linux环境不使用hadoop安装单机版spark的方法
  • 浅谈七种常见的hadoop和spark项目案例
  • python搭建spark分布式集群环境
  • 使用docker快速搭建spark集群的方法教程
  • centos7下spark安装配置教程详解
  • 初识spark入门
  • 详解java编写并运行spark应用程序的方法
  • spark整合mongodb的方法
  • java 中spark中将对象序列化存储到hdfs
  • spark学习笔记 (二)spark2.3 ha集群的分布式安装图文详解
  • java数据库连接池之c3p0简介_动力节点java学院整理
  • java中遍历concurrenthashmap的四种方式详解
  • java清除u盘内存卡里的垃圾文件示例
  • java 中 阻塞队列blockingqueue详解及实例
  • java可以如何实现文件变动的监听的示例
  • java中arrays类与math类详解
  • 基于spring+hibernate+jquery开发之电子相册(附源码下载)
  • 10个经典的java main方法面试题
  • idea 2019.2.3破解激活教程(亲测有效)
  • spring bean的生命周期详细介绍
  • 科普Spark,Spark是什么,如何使用Spark
  • 基于spark的深度学习怎么实现,具体应用实例
  • 如何初始化一个SparkContext
  • 学习Spark需要哪些基础知识
  • 如何保证一个Spark Application只有一个SparkContext实例
  • spark和hadoop哪个好
  • Spark编程有哪些有用技巧
  • Spark 中用 Scala 和 java 开发有什么区别
  • 集群上同时又spark1和spark2.0怎么指定
  • spark 跑spark sql时cpu利用率特别高怎么办
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved