从速度的角度看,Spark从流行的MapReduce模型继承而来,可以更有效地支持多种类型的计算,如交互式查询和流处理。速度在大数据集的处理中非常重要,它可以决定用户可以交互式地处理数据,还是等几分钟甚至几小时。Spark为速度提供的一个重要特性是其可以在内存中运行计算,即使对基于磁盘的复杂应用,Spark依然比MapReduce更有效。
从通用性来说,Spark可以处理之前需要多个独立的分布式系统来处理的任务,这些任务包括批处理应用、交互式算法、交互式查询和数据流。通过用同一个引擎支持这些任务,Spark使得合并不同的处理类型变得简单,而合并 *** 作在生产数据分析中频繁使用。而且,Spark降低了维护不同工具的管理负担。
Spark被设计的高度易访问,用Python、Java、Scala和SQL提供简单的API,而且提供丰富的内建库。Spark也与其他大数据工具进行了集成。特别地,Spark可以运行在Hadoop的集群上,可以访问任何Hadoop的数据源,包括Cassandra。
Spark 核心组件
Spark核心组件包含Spark的基本功能,有任务调度组件、内存管理组件、容错恢复组件、与存储系统交互的组件等。Spark核心组件提供了定义d性分布式数据集(resilient distributed datasets,RDDs)的API,这组API是Spark主要的编程抽象。RDDs表示分布在多个不同机器节点上,可以被并行处理的数据集合。Spark核心组件提供许多API来创建和 *** 作这些集合。
Spark SQLSpark SQL是Spark用来处理结构化数据的包。它使得可以像Hive查询语言(Hive Query Language, HQL)一样通过SQL语句来查询数据,支持多种数据源,包括Hive表、Parquet和JSON。除了为Spark提供一个SQL接口外,Spark SQL允许开发人员将SQL查询和由RDDs通过Python、Java和Scala支持的数据编程 *** 作混合进一个单一的应用中,进而将SQL与复杂的分析结合。与计算密集型环境紧密集成使得Spark SQL不同于任何其他开源的数据仓库工具。Spark SQL在Spark 10版本中引入Spark。
Shark是一个较老的由加利福尼亚大学和伯克利大学开发的Spark上的SQL项目,通过修改Hive而运行在Spark上。现在已经被Spark SQL取代,以提供与Spark引擎和API更好的集成。
Spark流(Spark Streaming)Spark流作为Spark的一个组件,可以处理实时流数据。流数据的例子有生产环境的Web服务器生成的日志文件,用户向一个Web服务请求包含状态更新的消息。Spark流提供一个和Spark核心RDD API非常匹配的 *** 作数据流的API,使得编程人员可以更容易地了解项目,并且可以在 *** 作内存数据、磁盘数据、实时数据的应用之间快速切换。Spark流被设计为和Spark核心组件提供相同级别的容错性,吞吐量和可伸缩性。
MLlibSpark包含一个叫做MLlib的关于机器学习的库。MLlib提供多种类型的机器学习算法,包括分类、回归、聚类和协同过滤,并支持模型评估和数据导入功能。MLlib也提供一个低层的机器学习原语,包括一个通用的梯度下降优化算法。所有这些方法都可以应用到一个集群上。
GraphXGraphX是一个 *** 作图(如社交网络的好友图)和执行基于图的并行计算的库。与Spark流和Spark SQL类似,GraphX扩展了Spark RDD API,允许我们用和每个节点和边绑定的任意属性来创建一个有向图。GraphX也提供了各种各样的 *** 作图的 *** 作符,以及关于通用图算法的一个库。
集群管理器Cluster Managers在底层,Spark可以有效地从一个计算节点扩展到成百上千个节点。为了在最大化灵活性的同时达到这个目标,Spark可以运行在多个集群管理器上,包括Hadoop YARN,Apache Mesos和一个包含在Spark中的叫做独立调度器的简易的集群管理器。如果你在一个空的机器群上安装Spark,独立调度器提供一个简单的方式;如果你已经有一个Hadoop YARN或Mesos集群,Spark支持你的应用允许在这些集群管理器上。第七章给出了不同的选择,以及如何选择正确的集群管理器。
谁使用Spark用Spark做什么
由于Spark是一个面向集群计算的通用框架,可用于许多不同的应用。使用者主要有两种:数据科学家和数据工程师。我们仔细地分析一下这两种人和他们使用Spark的方式。明显地,典型的使用案例是不同的,但我们可以将他们粗略地分为两类,数据科学和数据应用。
数据科学的任务数据科学,近几年出现的一门学科,专注于分析数据。尽管没有一个标准的定义,我们认为一个数据科学家的主要工作是分析和建模数据。数据科学家可能会SQL,统计学,预测模型(机器学习),用Python、MATLAB或R编程。数据科学家能将数据格式化,用于进一步的分析。
数据科学家为了回答一个问题或进行深入研究,会使用相关的技术分析数据。通常,他们的工作包含特殊的分析,所以他们使用交互式shell,以使得他们能在最短的时间内看到查询结果和代码片段。Spark的速度和简单的API接口很好地符合这个目标,它的内建库意味着很多算法可以随时使用。
Spark通过若干组件支持不同的数据科学任务。Spark shell使得用Python或Scala进行交互式数据分析变得简单。Spark SQL也有一个独立的SQL shell,已经为大家精心准备了大数据的系统学习资料,从Linux-Hadoop-spark-,需要的小伙伴可以点击它可以用SQL进行数据分析,也可以在Spark程序中或Spark shell中使用Spark SQL。MLlib库支持机器学习和数据分析。而且,支持调用外部的MATLAB或R语言编写的程序。Spark使得数据科学家可以用R或Pandas等工具处理包含大量数据的问题。
SQLContext具体的执行过程如下:
(1)SQL | HQL语句经过SqlParse解析成UnresolvedLogicalPlan。
(2)使用analyzer结合数据字典(catalog)进行绑定,生成resolvedLogicalPlan,在这个过程中,Catalog提取出SchemRDD,并注册类似case class的对象,然后把表注册进内存中。
(3)Analyzed Logical Plan经过Catalyst Optimizer优化器优化处理后,生成Optimized Logical Plan,该过程完成以后,以下的部分在Spark core中完成。
(4)Optimized Logical Plan的结果交给SparkPlanner,然后SparkPlanner处理后交给PhysicalPlan,经过该过程后生成Spark Plan。
(5)使用SparkPlan将LogicalPlan转换成PhysicalPlan。
(6)使用prepareForExecution()将PhysicalPlan转换成可执行物理计划。
(7)使用execute()执行可执行物理计划。
(8)生成DataFrame。
登录后复制
在整个运行过程中涉及到多个SparkSQL的组件,如SqlParse、analyzer、optimizer、SparkPlan等等
某电商平台,需要对订单数据进行分析,已知订单数据包括两个文件,分别为订单数据orders和订单明细数据order_items,orders记录了用户购买商品的订单ID,订单号,用户ID及下单日期。order_items记录了商品ID,订单ID以及明细ID。它们的结构与关系如下图所示:
orders表:(order_id,order_number,buyer_id,create_dt)
订单ID 订单号 用户ID 下单日期
52304 111215052630 176474 2011-12-15 04:58:21
52303 111215052629 178350 2011-12-15 04:45:31
52302 111215052628 172296 2011-12-15 03:12:23
52301 111215052627 178348 2011-12-15 02:37:32
52300 111215052626 174893 2011-12-15 02:18:56
52299 111215052625 169471 2011-12-15 01:33:46
52298 111215052624 178345 2011-12-15 01:04:41
52297 111215052623 176369 2011-12-15 01:02:20
52296 111215052622 178343 2011-12-15 00:38:02
52295 111215052621 178342 2011-12-15 00:18:43
order_items表:(item_id,order_id,goods_id )
明细ID 订单ID 商品ID
252578 52293 1016840
252579 52293 1014040
252580 52294 1014200
252581 52294 1001012
252582 52294 1022245
252583 52294 1014724
252584 52294 1010731
252586 52295 1023399
252587 52295 1016840
252592 52296 1021134
252593 52296 1021133
252585 52295 1021840
252588 52295 1014040
252589 52296 1014040
252590 52296 1019043
登录后复制

创建orders表和order_items表,并统计该电商网站都有哪些用户购买了什么商品。
*** 作
在spark-shell下,使用case class方式定义RDD,创建orders表
val sqlContext = new orgapachesparksqlSQLContext(sc)
import sqlContextimplicits_
case class Orders(order_id:String,order_number:String,buyer_id:String,create_dt:String)
val dforders = sctextFile("/myspark5/orders")map(_split('\t'))map(line=>Orders(line(0),line(1),line(2),line(3)))toDF()
dfordersregisterTempTable("orders")
登录后复制
验证创建的表是否成功。
sqlContextsql("show tables")map(t=>"tableName is:"+t(0))collect()foreach(println)
sqlContextsql("select order_id,buyer_id from orders")collect
登录后复制
在Spark Shell下,使用applyScheme方式定义RDD,创建order_items表。
import orgapachesparksql_
import orgapachesparksqltypes_
val rddorder_items = sctextFile("/myspark5/order_items")
val roworder_items = rddorder_itemsmap(_split("\t"))map( p=>Row(p(0),p(1),p(2) ) )
val schemaorder_items = "item_id order_id goods_id"
val schema = StructType(schemaorder_itemssplit(" ")map(fieldName=>StructField(fieldName,StringType,true)) )
val dforder_items = sqlContextapplySchema(roworder_items, schema)
dforder_itemsregisterTempTable("order_items")
登录后复制
验证创建表是否成功
sqlContextsql("show tables")map(t=>"tableName is:"+t(0))collect()foreach(println)
sqlContextsql("select order_id,goods_id from order_items ")collect
登录后复制
将order表及order_items表进行join *** 作,统计该电商网站,都有哪些用户购买了什么商品
sqlContextsql("select ordersbuyer_id, order_itemsgoods_id from order_items join orders on order_itemsorder_id=ordersorder_id ")collect
登录后复制
Spark SQL
spark-sql
创建表orders及表order_items。
create table orders (order_id string,order_number string,buyer_id string,create_dt string)
row format delimited fields terminated by '\t' stored as textfile;
create table order_items(item_id string,order_id string,goods_id string)
row format delimited fields terminated by '\t' stored as textfile;
登录后复制
查看已创建的表。
show tables;
登录后复制
表名后的false意思是该表不是临时表。
将HDFS中/myspark5下的orders表和order_items表中数据加载进刚创建的两个表中。
load data inpath '/myspark5/orders' into table orders;
load data inpath '/myspark5/order_items' into table order_items;
登录后复制
14验证数据是否加载成功。
select from orders;
select from order_items;
登录后复制
15处理文件,将order表及order_items表进行join *** 作,统计该电商网站,都有哪些用户购买了什么商品。
数据仓库数据建模的几种思路主要分为一下几种
1 星型模式
星形模式(Star Schema)是最常用的维度建模方式。星型模式是以事实表为中心,所有的维度表直接连接在事实表上,像星星一样。星形模式的维度建模由一个事实表和一组维表成,且具有以下特点:a 维表只和事实表关联,维表之间没有关联;b 每个维表主键为单列,且该主键放置在事实表中,作为两边连接的外键;c 以事实表为核心,维表围绕核心呈星形分布;
2 雪花模式
雪花模式(Snowflake Schema)是对星形模式的扩展。雪花模式的维度表可以拥有其他维度表的,虽然这种模型相比星型更规范一些,但是由于这种模型不太容易理解,维护成本比较高,而且性能方面需要关联多层维表,性能也比星型模型要低。所以一般不是很常用
雪花模式
3.星座模式
星座模式是星型模式延伸而来,星型模式是基于一张事实表的,而星座模式是基于多张事实表的,而且共享维度信息。前面介绍的两种维度建模方法都是多维表对应单事实表,但在很多时候维度空间内的事实表不止一个,而一个维表也可能被多个事实表用到。在业务发展后期,绝大部分维度建模都采用的是星座模式。
星座模型
针对普通客户端浏览和分析大数据困难的问题, 结合 Spark 和 LOD 技术, 以热图为例提出一种面向大数据可视化技术框架 首先利用 Spark 平台分层并以瓦片为单位并行计算, 然后将结果分布式存储在 HDFS 上, 最后通过web 服务器应用Ajax技术结合地理信息提供各种时空分析服务文中重点解决了数据点位置和地图之间的映射, 以及由于并行计算导致的热图瓦片之间边缘偏差这2个问题实验结果表明,该方法将数据交互 *** 作与数据绘制和计算任务分离, 为浏览器端大数据可视化提供了一个新的思路
目前大数据可视化面临的主要问题包括:
1) 数据复杂散乱 经常发生数据缺失、数据值不对、结构化程度不高
2) 迭代式分析成本高 在初次查询后如果发现结果不对, 改变查询条件重新查询代价高
3) 构建复杂工作流困难 从多数据源取得包含各种不同特征的原始数据,然后执行机器学习算法或者复杂查询, 探索过程漫长
4) 受到原有技术限制, 对小规模数据分析很难直接扩展到大数据分析
5) 数据点的规模超过普通显示器可能提供的有效像素点
Hadoop和Spark先后成为大数据分析工业界的研究热点,前者是一个能够对大量数据提供分布式处理的软件框架和文件系统(hadoopdistrib-utedfilesystem,HDFS);后者是一个通用大数据计算平台,可以解决大数据计算中的批处理、 交互查询及流式计算等核心问题Zeppelin可以作为Spark的解释器,进一步提供基于 Web 页面的数据分析和可视化协作可以输出表格、柱状图、折线图、饼状图、点图等,但是无法提供更为复杂的交互分析手段
相关工作
面向 web 的轻量级数据可视化工具主要是一些JavaScript库,利用canvas或者svg画散点,svg不能支持十亿以上的节点,使用 canvas 画布绘图的heatmapjs 在面对大数据量时也无能为力
热图是一种常用的基本数据可视化技术,通常用颜色编码数值大小,并以矩阵或方格形式整齐排列,在二维平面或者地图上呈现数据空间分布,被广泛应用在许多领域近年来,许多研究者成功地将热图应用在眼动数据可视分析上, 有效地概括并表达用户视觉注意力的累计分布
LOD针对数据可视化绘制速度慢、效率低等问题,孙敏等提出基于格网划分的LOD(levelsofdetail)分层方法, 实现对大数据集 DEM 数据的实时漫游
并行计算大数据热图
经纬度换算
并行计算
在 Spark 平台上实现热图的绘制,首先将经纬度坐标转换为对应不同瓦片上的像素坐标每个基站的辐射范围可近似认为相同, 即每个基站(收集数据的基站坐标)的初始影响力近似相同,因此可采用影响力叠加法将数据点绘制到画布上,然后做径向渐变,叠加出每个位置的影响大小,得到初始灰度图,如图2a所示然后将每一个像素点着色,根据每个像素的灰度值大小,以及调色板将灰度值映射成相对应的颜色 图 2b 是一个透明的PNG 格式, 调色板如图 2c 所示 本文中出现的热图均采用图 2c 调色板
image_1bv9vh4oqfatb5a12s4ui1sbe9png-1859kB
将计算出的热图结果存储在HDFS上,并与经纬度以及层级建立索引关系方便以后读取,拼接后的热图绘制效果如图 3 所示
image_1bv9vj0vb16um1pt91qrs17bh1jam9png-128kB
瓦片边缘问题
image_1bv9vno7315gi1l1r1gog1cdg1tdnmpng-346kB
边缘热点可能处于2片或者4片瓦片之间,因此需要通过2次或者4次重复计算通过本文提出的重叠计算方法可以解决热图分片计算的边缘问题。
实验
image_1bv9vr8311fe817tt11bb22qlr113png-2842kB
总结
本文提出的大数据热图可视化方法能够有效地解决前端绘制计算量大的问题,通过在Spark平台上以瓦片为单位分层次并行计算热图, 将生成的热图存储在HDFS上,然后通过web服务器提供浏览器交互服务, 用户可以通过在地图上拖动鼠标或放大/缩小等 *** 作选择感兴趣区域,再分析不同时间点用户行为差异或渐变过程 通过解决热图数据点和地图映射关系问题以及瓦片热图之间的边缘问题,提供大数据热图绘方法, 以满足用户交互、协同和共享等多方面需求该方法可以拓展到其他常用可视化方法,如ScatterPlot, Bar Chart,平行坐标等但绘制过程是基于Spark计算后得到的离线数据,在实时性上还不能得到保证, 在下一步工作中, 我们将着手利用 Spark Streaming 库来解决这一问题
首先要从你的分区表结构开始查起,看是否符合你要分区的条件,这个错误报的很泛,并不能完全定位出问题,只能根据有可能会影响的地方出手一点点排除,查找问题了。可以在stickoverflow,或者官方论坛中去找找线索了
以上就是关于基于spark地震数据分析的目的全部的内容,包括:基于spark地震数据分析的目的、创建sparksqltable代码、数据仓库数据建模的几种思路等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)