java⼤作业_ApacheSpark处理⼤数据⼊门,看这⼀篇就够了什么是Spark
Apache Spark是⼀个围绕速度、易⽤性和复杂分析构建的⼤数据处理框架。最初在2009年由加州⼤学伯克利分校的AMPLab开发,并于2010年成为Apache的开源项⽬之⼀。
与Hadoop和Storm等其他⼤数据和MapReduce技术相⽐,Spark有如下优势。
⾸先,Spark为我们提供了⼀个全⾯、统⼀的框架⽤于管理各种有着不同性质(⽂本数据、图表数据等)的数据集和数据源(批量数据或实时的流数据)的⼤数据处理的需求。
Spark可以将Hadoop集中的应⽤在内存中的运⾏速度提升100倍,甚⾄能够将应⽤在磁盘上的运⾏速度提升10倍。
Spark让开发者可以快速的⽤Java、Scala或Python编写程序。它本⾝⾃带了⼀个超过80个⾼阶操作符集合。⽽且还可以⽤它在shell中以交互式地查询数据。
除了Map和Reduce操作之外,它还⽀持SQL查询,流数据,机器学习和图表数据处理。开发者可以在⼀个数据管道⽤例中单独使⽤某⼀能⼒或者将这些能⼒结合在⼀起使⽤。
在这个Apache Spark⽂章系列的第⼀部分中,我们将了解到什么是Spark,它与典型的MapReduce解决⽅案的⽐较以及它如何为⼤数据处理提供了⼀套完整的⼯具。
已经为⼤家精⼼准备了⼤数据的系统学习资料,从,需要的⼩伙伴可以点击进⼊
Hadoop和Spark
Hadoop这项⼤数据处理技术⼤概已有⼗年历史,⽽且被看做是⾸选的⼤数据集合处理的解决⽅案。MapReduce是⼀路计算的优秀解决⽅案,不过对于需要多路计算和算法的⽤例来说,并⾮⼗分⾼效。数据处理流程中的每⼀步都需要⼀个Map阶段和⼀个Reduce阶段,⽽且如果要利⽤这⼀解决⽅案,需要将所有⽤例都转换成MapReduce模式。
在下⼀步开始之前,上⼀步的作业输出数据必须要存储到分布式⽂件系统中。因此,复制和磁盘存储会导致这种⽅式速度变慢。另外Hadoop解决⽅案中通常会包含难以安装和管理的集。⽽且为了处理不同的⼤数据⽤例,还需要集成多种不同的⼯具(如⽤于机器学习的Mahout和流数据处理的Storm)。
如果想要完成⽐较复杂的⼯作,就必须将⼀系列的MapReduce作业串联起来然后顺序执⾏这些作业。每⼀个作业都是⾼时延的,⽽且只有在前⼀个作业完成之后下⼀个作业才能开始启动。
⽽Spark则允许程序开发者使⽤有向⽆环图(DAG)开发复杂的多步数据管道。⽽且还⽀持跨有向⽆环图的内存数据共享,以便不同的作业可以共同处理同⼀个数据。
Spark运⾏在现有的Hadoop分布式⽂件系统基础之上(HDFS)提供额外的增强功能。它⽀持将Spark应⽤部署到现存的Hadoop v1集(with SIMR – Spark-Inside-MapReduce)或Hadoop v2 YARN集甚⾄是Apache Mesos之中。
我们应该将Spark看作是Hadoop MapReduce的⼀个替代品⽽不是Hadoop的替代品。其意图并⾮是替代Hadoop,⽽是为了提供⼀个管理不同的⼤数据⽤例和需求的全⾯且统⼀的解决⽅案。
Spark特性
Spark通过在数据处理过程中成本更低的洗牌(Shuffle)⽅式,将MapReduce提升到⼀个更⾼的层次。利⽤内存数据存储和接近实时的处理能⼒,Spark⽐其他的⼤数据处理技术的性能要快很多倍。
java调用python模型Spark还⽀持⼤数据查询的延迟计算,这可以帮助优化⼤数据处理流程中的处理步骤。Spark还提供⾼级的API以提升开发者的⽣产⼒,除此之外还为⼤数据解决⽅案提供⼀致的体系架构模型。
Spark将中间结果保存在内存中⽽不是将其写⼊磁盘,当需要多次处理同⼀数据集时,这⼀点特别实⽤。Spark的设计初衷就是既可以在内存中⼜可以在磁盘上⼯作的执⾏引擎。当内存中的数据不适⽤时,Spark操作符就会执⾏外部操作。Spark可以⽤于处理⼤于集内存容量总和的数据集。
Spark会尝试在内存中存储尽可能多的数据然后将其写⼊磁盘。它可以将某个数据集的⼀部分存⼊内存
⽽剩余部分存⼊磁盘。开发者需要根据数据和⽤例评估对内存的需求。Spark的性能优势得益于这种内存中的数据存储。
Spark的其他特性包括:
⽀持⽐Map和Reduce更多的函数。
优化任意操作算⼦图(operator graphs)。
可以帮助优化整体数据处理流程的⼤数据查询的延迟计算。
提供简明、⼀致的Scala,Java和Python API。
提供交互式Scala和Python Shell。⽬前暂不⽀持Java。
Spark是⽤Scala程序设计语⾔编写⽽成,运⾏于Java虚拟机(JVM)环境之上。⽬前⽀持如下程序设计语⾔编写Spark应⽤:Scala
Java
Python
Clojure
R
Spark⽣态系统
除了Spark核⼼API之外,Spark⽣态系统中还包括其他附加库,可以在⼤数据分析和机器学习领域提供更多的能⼒。
这些库包括:
Spark Streaming:
Spark Streaming基于微批量⽅式的计算和处理,可以⽤于处理实时的流数据。它使⽤DStream,简单来说就是⼀个弹性分布式数据集(RDD)系列,处理实时数据。
Spark SQL:
Spark SQL可以通过JDBC API将Spark数据集暴露出去,⽽且还可以⽤传统的BI和可视化⼯具在Spark数据上执⾏类似SQL的查询。⽤户还可以⽤Spark SQL对不同格式的数据(如JSON,Parquet以及数据库等)执⾏ETL,将其转化,然后暴露给特定的查询。
Spark MLlib:
MLlib是⼀个可扩展的Spark机器学习库,由通⽤的学习算法和⼯具组成,包括⼆元分类、线性回归、聚类、协同过滤、梯度下降以及底层优化原语。
Spark GraphX:
GraphX是⽤于图计算和并⾏图计算的新的(alpha)Spark API。通过引⼊弹性分布式属性图(Resilient Distributed Property Graph),⼀种顶点和边都带有属性的有向多重图,扩展了Spark RDD。为了⽀持图计算,GraphX暴露了⼀个基础操作符集合(如subgraph,joinVertices和aggregateMessages)和⼀个经过优化的Pregel API变体。此外,GraphX还包括⼀个持续增长的⽤于简化图分析任务的图算法和构建器集合。
除了这些库以外,还有⼀些其他的库,如BlinkDB和Tachyon。
BlinkDB是⼀个近似查询引擎,⽤于在海量数据上执⾏交互式SQL查询。BlinkDB可以通过牺牲数据精度来提升查询响应时间。通过在数据样本上执⾏查询并展⽰包含有意义的错误线注解的结果,操作⼤数据集合。
Tachyon是⼀个以内存为中⼼的分布式⽂件系统,能够提供内存级别速度的跨集框架(如Spark和M
apReduce)的可信⽂件共享。它将⼯作集⽂件缓存在内存中,从⽽避免到磁盘中加载需要经常读取的数据集。通过这⼀机制,不同的作业/查询和框架可以以内存级的速度访问缓存的⽂件。
此外,还有⼀些⽤于与其他产品集成的适配器,如Cassandra(Spark Cassandra 连接器)和R(SparkR)。Cassandra Connector可⽤于访问存储在Cassandra数据库中的数据并在这些数据上执⾏数据分析。
下图展⽰了在Spark⽣态系统中,这些不同的库之间的相互关联。
图1. Spark框架中的库
我们将在这⼀系列⽂章中逐步探索这些Spark库
Spark体系架构
Spark体系架构包括如下三个主要组件:
数据存储
API
管理框架
接下来让我们详细了解⼀下这些组件。
数据存储:
Spark⽤HDFS⽂件系统存储数据。它可⽤于存储任何兼容于Hadoop的数据源,包括HDFS,HBase,Cassandra等。
API:
利⽤API,应⽤开发者可以⽤标准的API接⼝创建基于Spark的应⽤。Spark提供Scala,Java和Python三种程序设计语⾔的API。
已经为⼤家精⼼准备了⼤数据的系统学习资料,从,需要的⼩伙下⾯是三种语⾔Spark API的⽹站链接。已经为⼤家精⼼准备了⼤数据的系统学习资料,从,需要的⼩伙伴可以点击进⼊
Scala API
Java
Python
资源管理:
Spark既可以部署在⼀个单独的服务器也可以部署在像Mesos或YARN这样的分布式计算框架之上。
下图2展⽰了Spark体系架构模型中的各个组件。
图2 Spark体系架构
已经为⼤家精⼼准备了⼤数据的系统学习资料,从,需要的⼩伙伴可以点击进⼊
弹性分布式数据集
弹性分布式数据集(基于Matei的研究论⽂)或RDD是Spark框架中的核⼼概念。可以将RDD视作数据库中的⼀张表。其中可以保存任何类型的数据。Spark将数据存储在不同分区上的RDD之中。
RDD可以帮助重新安排计算并优化数据处理过程。
此外,它还具有容错性,因为RDD知道如何重新创建和重新计算数据集。
RDD是不可变的。你可以⽤变换(Transformation)修改RDD,但是这个变换所返回的是⼀个全新的RDD,⽽原有的RDD仍然保持不变。
RDD⽀持两种类型的操作:
变换(Transformation)
⾏动(Action)
变换:
变换:变换的返回值是⼀个新的RDD集合,⽽不是单个值。调⽤⼀个变换⽅法,不会有任何求值计算,它只获取⼀个RDD作为参数,然后返回⼀个新的RDD。
变换函数包括:map,filter,flatMap,groupByKey,reduceByKey,aggregateByKey,pipe和coalesce。
⾏动:
⾏动:⾏动操作计算并返回⼀个新的值。当在⼀个RDD对象上调⽤⾏动函数时,会在这⼀时刻计算全部的数据处理查询并返回结果值。
⾏动操作包括:reduce,collect,count,first,take,countByKey以及foreach。
如何安装Spark
安装和使⽤Spark有⼏种不同⽅式。你可以在⾃⼰的电脑上将Spark作为⼀个独⽴的框架安装或者从诸如Cloudera,HortonWorks或MapR之类的供应商处获取⼀个Spark虚拟机镜像直接使⽤。或者你也可以使⽤在云端环境(如Databricks Cloud)安装并配置好的Spark。
在本⽂中,我们将把Spark作为⼀个独⽴的框架安装并在本地启动它。最近Spark刚刚发布了1.2.0版本。我们将⽤这⼀版本完成⽰例应⽤的代码展⽰。
如何运⾏Spark
当你在本地机器安装了Spark或使⽤了基于云端的Spark后,有⼏种不同的⽅式可以连接到Spark引擎。
下表展⽰了不同的Spark运⾏模式所需的Master URL参数。
如何与Spark交互
Spark启动并运⾏后,可以⽤Spark shell连接到Spark引擎进⾏交互式数据分析。Spark shell⽀持Scala和Python两种语⾔。Java不⽀持交互式的Shell,因此这⼀功能暂未在Java语⾔中实现。
可以⽤d和d命令分别运⾏Scala版本和Python版本的Spark Shell。
Spark⽹页控制台
不论Spark运⾏在哪⼀种模式下,都可以通过访问Spark⽹页控制台查看Spark的作业结果和其他的统计数据,控制台的URL地址如下:
localhost:4040
Spark控制台如下图3所⽰,包括Stages,Storage,Environment和Executors四个标签页
(点击查看⼤图)
图3. Spark⽹页控制台
共享变量
Spark提供两种类型的共享变量可以提升集环境中的Spark程序运⾏效率。分别是⼴播变量和累加器。
⼴播变量:⼴播变量可以在每台机器上缓存只读变量⽽不需要为各个任务发送该变量的拷贝。他们可以让⼤的输⼊数据集的集拷贝中的⼴播变量:
节点更加⾼效。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论