版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、云计算Spark的实践目标2:利用Spark处理数据理解Spark原理开发Spark程序:开发环境、程序提交、运行模式内核讲解:RDD工作机制:任务调度、资源分配使用SparkSpark读取、存储HDFS、MongoDBSpark StreamingSpark GraphXSpark MLlibSpark实践(1)数据读取、存储从数据源到RDDparallelize()textFile(path)hadoopFile(path)sequenceFile(path)objectFile(path)binaryFiles(path)从RDD目标数据saveAsTextFile(path)saveA
2、sSequenceFile(path)saveAsObjectFile(path)saveAsHadoopFile(path)读取、存储MongoDB例子核心部分:import com.mongodb.hadoop.MongoOutputFormat;Configuration config = new Configuration();config.set(mongo.input.uri, mongodb:/24:27017/ligf.student);config.set(mongo.output.uri, mongodb:/24:27017/ligf.test);JavaPairRDD m
3、ongoRDD = sc.newAPIHadoopRDD(config, com.mongodb.hadoop.MongoInputFormat.class, Object.class, BSONObject.class);rdd.saveAsNewAPIHadoopFile(“file:/bogus”, classOfAny, classOfAny, classOfcom.mongodb.hadoop .MongoOutputFormatAny, Any, config)问题1二次排序指在归约(reduce)阶段对某个键关联的值排序Map阶段可以对对按照键的值进行排序,但是归约器不会自动对键
4、值对按照值排序但是有时候需要:将成绩按照班级归约后排序;店铺产品销量排序等例1. 数据如下,按照name和time对value排序问题1二次排序方案1在内存中实现排序,只借助map-reduce框架进行分组组内直接在内存中调用排序函数步骤:创建SparkContext对象;连接到Spark master;读取原始数据;构建对按照键分组:groupByKey对每个组对应的新的value(是一个列表)进行排序操作缺点不具备伸缩性,单个服务器的内存又成为瓶颈;(time, value)问题1二次排序-方案1问题1二次排序-方案1方案二:利用框架问题1二次排序方案2利用框架实现值排序自定义Key +
5、sortByKey():组合键/wuxintdrh/article/details/72809156 步骤自定义组合键:, value调用sortByKey时会用排序,因此要比较大小在自定义Key中定义好compare方法按照自定义Key格式实现mapToPair最后调用sortByKey()问题1二次排序方案2使用组合键 + groupByKey()/2015/12/a-scalable-groupbykey-and-secondary-sort-for-java-spark/ 问题2Top N列表对给定的一组返回V的Top N对应的K列表销售量Top N的产品、访问量Top N的页面、好友
6、数Top N的用户等K唯一:产品的销售量已经得到规约K不唯一:只是在不同服务器上统计了对应的产品销售量基本思路在每一个Partition内取本地的Top N;将所有本地Top N合并,再取全局Top N使用mapPartitions()对RDD的每一个Partition进行操作输入是整个Partition的数据,每一个Task对应处理一个Partition结果RDD与输入RDD有相同个数的Partition结果RDD的每一个Partition就是局部Top N对保存所有局部Top N的RDD进行action操作用collect方法将局部Top N存放到list中遍历list,选出全局top N
7、或者使用框架的reduce操作定义两两合并的规则问题2Top N列表问题2Top N列表问题2Top N列表使用框架的takeOrdered(N, DefineComparator)支持自定义Comparator问题2Top N列表使用框架的takeOrdered(N, DefineComparator)得到JavaPairRDD后,直接使用takeOrdered获得全局top N需要自定义comparatorSpark实践(2)Spark Streaming(1)实时对大量数据进行快速处理:处理周期短;连续不断地计算计算基本过程数据分批Spark实践(2)Spark Streaming(2)
8、StreamingContext (类似SparkContext)Dstream (类似RDD,是一个RDD序列)内部是通过RDD实现的每个时间点对应一个RDD程序执行过程初始化StreamingContext创建Dstream对DStream的操作Spark实践(2)Spark Streaming(3)Transformation操作参考RDDtransform操作直接操作内部RDD;对没有提供的transformation操作使用transform并直接调用内部RDD的操作val joinedDStream = dstream.transform(rdd = rdd.join(rdd2)窗
9、口(Window)操作:合并几个时间点的RDDwindowLength等生成带窗口的DstreamcountByWindow、reduceByWindow等带窗口参数的专用方法Output操作print()saveAsTextFiles/saveAsObjectFiles()foreachRDD(func): func一般是对RDD的Action操作问题3访问的实时统计真实场景下的解决方案Nginx + Flume + Kafka +Spark StreamingNginx统计的目标服务器,产生访问日志Flume实时读取服务器日志并发送到Kafka集群Kafka则负责连接Spark Strea
10、mingSpark Streaming实时消费Kafka集群上的数据并作分析简化模拟生成Nginx访问日志,自动上传到HDFS;Spark Streaming监控HDFSHDFS存放日志的目录与Streaming监控目录要相同设置Streaming运行时间间隔:每次处理新产生的数据可以实现历史数据的累加:updateFunctiondef updateFunction(newValues: SegInt, runningCount:OptionInt):OptionInt = val preCount = runningCount.getOrElse(0) /获取历史累计值 val newCo
11、unt = newValues.sum /当前周期新的值 Some(newCount + preCount) /再次累加val runningCounts = pairs.updateStateKyKeyInt (updateFunction _)问题3访问的实时统计模拟生成日志通过shell脚本实现问题3访问的实时统计Streaming程序Scala版更多的示例Spark实践(3)Spark GraphX(1)图计算以图为数据结构基础的相关算法及应用数据结构图G=V表示顶点集合;E表示边集合两个顶点u,v相连,表示为边(u,v)无向边;任意边为无向边则称为无向图有向边;每一条都为有向边则称为
12、有向图GraphX提供的API图生成图数据访问查询顶点数、边数;计算某个点的入度、出度等。图算法遍历顶点、边;计算连通性;计算最大子图;计算最短路径;图合并等Spark实践(3)Spark GraphX(2)GraphX的实现核心是Graph数据结构,表示有向多重图两个顶点间允许存在多条边,表示不同含义Graph由顶点RDD和边RDD组成Graph的分布式存储方式Spark实践(3)Spark GraphX(3)图生成读入存储关系信息的文件,构造EdgeRDD:eRDD = sc.textFile()从Edge RDD构造Graph:graph = Grapth.fromEdges(eRDD)
13、基本接口获取边数:numEdges;获取节点数:numVertices获取入度、出度:inDegrees, outDegrees结构操作:reverse,subgraph, mask 关联类操作:将一个图和一个RDD通过顶点ID关联起来,使图获得RDD信息joinVertices: outerJoinVertices: 聚合类操作分布式遍历所有的边,执行自定义的sendMsg函数;在节点上执行mergeMsg函数/docs/latest/graphx-programming-guide.html#summary-list-of-operators 官网API说明Spark实践(3)Spark
14、GraphX(4)例子Spark实践(3)Spark GraphX(5)例子Spark实践(3)Spark GraphX(6)例子Spark实践(3)Spark GraphX(7)关联操作新建一个图,用原图中的节点初始化,做一个类型转换用原图中的RDD与新图作关联,将原RDD信息赋值给新图聚合操作定义一个sendMessage,一个mergeMessageMapfunctionReducefunction val nodeWeightMapFuncEx = (ctx:EdgeContext VD, Long, (Long, Long) ) = ctx.sendToDst(ctx.attr, 0
15、L)ctx.sendToSrc(0L, ctx.attr)val nodeWeightReduceFuncEx = (e1: (Long, Long), e2: (Long, Long) = (e1._1 + e2._1, e1._2 + e2._2)val nodeWeights = graph.aggregateMessage(nodeWeightMapFuncEx, nodeWeightReduceFuncEx)Spark实践(4)Spark MLlib(1)Spark为机器学习问题开发的库分类、回归、聚类和协同过滤等机器学习简介学习方法的类别按输入数据分监督学习Decision tre
16、es, neural networks, nearest-neighbor algorithms,Bayesian learning, hidden Markov models, SVM分类问题输出是非连续的有限集合回归问题输出是连续的实数集合无监督学习聚类问题基于元素的相似度计算规则半监督学习强化学习Markov Decision Processes, temporal difference learning, Q-learning分类问题的例子判定一个给定案件的案由目标:离婚纠纷、产品质量纠纷、债务纠纷、其它输入:给定的案件情况描述人案件案由1案由2案由3知识机器Learner案件a-案由1案件b-案由2案件c-案由3案件d-案由2案件e-案由1案件f -案由3机器学习算法model:classifier训练集样例/实例属性+标签(类)案件g-案由1案件h-案由2案件I -案由3案件j -案由2案件k-案由1案件l -案由3测试集样例/实例属性+标签(类)案件m-案由1案件n-案由2案件o-案由3案件p-案由2案件q-案由1案件r -案由3验证集Validation setSpark
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年制造产能交易项目公司成立分析报告
- 河北省鹿泉一中2026届高三下学期模拟考试含解析
- 河北南和一中2026届高三下第三次周考综合试题含解析
- 福建省六校2026届高三第二学期期末考试样卷生物试题含解析
- 海南省澄迈县澄迈中学2025-2026学年高三第二次诊断性考试生物试题含解析
- 广东省增城中学2026年高三第三次(4月)考试生物试题含解析
- 西安中学2026年招生全国统一考试(重庆)高考模拟调研卷生物试题(五)含解析
- 湖北省襄阳四中2026届高三下学期3月线上考试生物试题含解析
- 高速公路养护管理培训
- 高血压知识配图
- DB37-T 4704-2024 健康体检机构建设与服务规范
- 《小米智能家居》课件
- 建筑施工安全技术操作规程
- 高校绿色金融人才培养模式与机制探索
- NB/T 11446-2023煤矿连采连充技术要求
- 竣工资料编制计划
- 北京石油化工学院大一高等数学上册期末考试卷及答案
- GB/T 13077-2024铝合金无缝气瓶定期检验与评定
- 基坑工程安全风险辨识
- GB/T 43780-2024制造装备智能化通用技术要求
- DB4201-T 575-2019 武汉市环境卫生作业规范
评论
0/150
提交评论