spark定义 spark是今年来发展较快的分布式并行数据处理框架,和hadoop联合使用,增强hadoop性能,增加内存缓存,流数据处理,图数据处理等更为高级的数据处理能力,
mapreduce是属于hadoop生态体系之一,spark属于bdas生态体系之一,hadoop包含mapreduce hdfs hbase hive zookeeper pig sgoop等 hdas包含spark shark相当于hive blinkdb sparkstreaming 消息实时处理框架,类似storm等等
mapreduce通常将中间结果放在hdfs上,spark是基于内存并行大数据框架,中间结果放在内存,对于迭代数据spark效率更高,
mapreduce总是小号大量时间排序,而有些场景不需要排序,spark可以避免不必要的排序所带来的开销,spark是一张有向无环图,
spark支持api,支持scala,python。java等
spark运行模式,local模型用于测试开发,standlone 独立集群模式,spark on yarn spark在yarn上 ,spark on mesos spark在mesos上。
spark缓存策咯;
spark通过userdisk,usememory deserialized rplication 4个参数组成11种缓存策略
spark提交方式
spark-submit 常用的提交方式,或者java-jar方式
大数据平台 1,ioe 平台2 hadoop平台
集群部署,数据管理,任务调度,集群监控在大数据操作中我几个步骤。
hadoop 分1.0时代和2.0时代,
2.0时代 hdfs hbase mapreduce模型等变化不大 mapreduce云顶在yarn系统上,
yarn : resourceManager ,nodeManager
impala: stateStore catalog impala中session 就是一个任务 application运行在impala的工作进程中,
spark: 2.0时代很火,有代替mapreduce的趋势,
spark中 master 有web端口 8080 默认 worker web默认8081端口 application web端口4040 多个任务时端口是递增的,
spark 3种编程接口 我们常用java
企业大数据应用: 1,count 平均值 2.分类,对比 3.趋势,统计分析 4,精准预测 人工智能
行业大数据案例:电商,传媒,能源,交通
大数据需要哪些技能:
spark : 启动方式1.启动参数: spark_mem=8g spark-shell -c 24 每个任务8g内存 -c24 总共最多24个任务
启动方式2. 默认是全部的机器cpu内核,内存512mb
学点 scala 类型这样的集合 {1,(type1,ts1)} key value结构 通过reducebykey groupbykey 获得ts最大值
通过函数把数据类型转换 spark中函数
spark 可以通过yarn 资源调度器来运行,spark jar 环境变量 spark class yarn。client来提交一个文件
spark 1.0 发布 看起来很美,spark 主要运行在yarn上 spark-assembly。jar 传hdfs中 yarn来启动spark
spark on yarn 俩启动的区别。
1. cluster模式中 所有的操作在yarn中运行的。
2.client模式中
client中启动spark derver
spark shell只能在client的模式中运行,在cluster模式中不用启动spark shell来操作spark命令
spark on yarn 启动参数:
hadoop-conf-dir 就够了
./bin/spark-shell +设置参数 内存 机器内核等
./bin/spark-submit 提交java jar包
scala 就是用spark 函数的形式来操作数据,例如进行求值,排序等
scala 函数编译 spark mvn +参数
scala maven项目 提交 ./bin/spark-submint +参数
scala maven项目 写法大多是调用scala函数
spark sql来实现 处理parquet文件 和 读取csv文件 或者hbase 相似 批量读取 一个表 读取一次 每个表一个parkConext对象
直接读取 自动分好列 自动生成 编程k-value对
最后写入一个文件里 parquet文件一般比csv文件小很多的 csv是一次多好多表 parquet文件是一次多一个表
读取文件在spark中创建表 和列 然后用spark sql 查询数据存取成 map 形式读取出来
什么是spark:
spark是开源的类hadoop mapreduce的通用的并行计算框架,spark基于mapreduce算法实现的分布式计算,拥有hadopp
mapreduce所具有的有点,但不同于mapreduce的job中间输出和结果 可以保存在内存中,从而不在需要读写hdfs,因此spark更好的
适用于数据挖掘与机器学习等需要迭代mapreduce的算法,
spark和hadoop的对比:
spark的中间数据放在内存中,对于迭代运行效率更高,spark更适合于迭代云端比较多的ml和dm运算,因为spark里面有rdd的抽象概念,spark比hadoop更通用,spark提供的数据集操作类型有很多,不像hadoop只提供map和reduce俩种操作,比如map,filter,flatmapt,sample,groupbykey,reducebykey,union,join,cogroup,mapvalues,sort,partionby等多种操作类型,spark
把这些操作称为tarnnsformations,同时还提供count,collect,reduce,lookup,save等多种action操作。这些多种多样的数据集操作类型,给开发上层应用的用户提供了方便,各个处理节点之间的通信模型不在像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的使用面比较广泛且比较通用。
spark生态系统介绍:
shark介绍:
shark基本上就是spark的框架基础上提供和hive一样的hivesql命令接口,为了最大程度的保持和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的低延迟执行引擎可以用于实时计算,此外小批量的处理方式是的他可以同时兼容批量和实时数据处理的逻辑和算法,方便了一些需要历史数据和实时数据联合分析的特定应用场景。
bagel介绍:
pregel on spark,可以哟个spark进行图计算,着是个非常有用的小项目,bagel自带了一个例子,实现了google的pagerank算法
什么是rdd:
rdd是spark最基本,也是最根本的数据抽象,rdd也就是弹性分布式数据集,rdd是只读的,分区记录的集合,rdd只能基于在稳定物理存储中的数据集和其他已有的rdd上执行确定性操作来创建,者些确定性操作称之为转换,如map,filter,groupby,join。rdd不需要物化,rdd含有如何从其他rdd衍生出本rdd的相关信息,据此可以从物理存储的数据计算出相应的rdd分区,rdd支持两种操作,1,转换从现有的数据集创建一个新的数据集,2,动作 在数据集上运行计算后,返回一个值给驱动程序,例如,map就是一种转换,他将数据集每一个元素都传递给函数,并返回一个新的分布数据集表示结果,另一个方面,reduce是一个动作,通过一些函数将所有的元组叠加起来,并将结果返回给driver程序,spark中的所有转换都有惰性的,也就是说,他们并不会直接计算结果,相反的,他们只是记住应用哦个到基础数据集上的这些转换动作,例如,我们可以实现,通过map创建的一个新数据集,并在reduce使用,最终只返回reduce的结果给driver,而不是整个大的新数据集。默认情况下,每个转换过的rdd都会在你在他之上执行一个动作时被重新计算,不过,你也可以使用persist方法,之久话一个rdd在内存中,在这种情况下,spark将会在集群中,保存相关元素,下次你查询这个rdd是,他将能更快访问,在磁盘上持久化数据集,或在集群间赋值数据集也是支持的。除了这些操作外,用户还可以请求将rdd缓存起来,而且,用户还可以通过partitioner类获取rdd的分区顺序,然后将另一个rdd按照同样的方式分区,
--------------------------------------------------------------------------------------------------------------
rdd使用详解
是不是spark基于内存所以这么快呢,不是的,不只这些,还有spark是一个整体的计算,spark不排序,hadoop没次计算都排序,
spark程序分俩部分,
如何操作rdd?
如何获取rdd 1,从共享的文件系统获取,hdfs,2.通过已存在的rdd转换 3.将已存在的scala集合并行化,通过调用sparkcontext的parallelize方法实现 4.改变现有rdd的之久性,rdd是懒散,短暂的
操作rdd的俩个动作,1,actions:对数据集计算后返回一个数值value给驱动程序,例如redue将数据集的所有元素用某个函数聚合后,将最终结果返回给程序,2.transformation 根据数据集创建一个新的数据集,计算后返回一个新rdd;例如map将数据的每个元素讲过某个函数计算后,返回一个姓的分布式数据集。
actions具体内容:
reduce(func)通过函数func聚集数据集中所有元素,func函数接受2个参数,返回一个值,这个函数必须是关联性的,确保可以被正确的并发执行。
collect() 在driver的程序中,以数组的形式,返回数据集的所有元素,这通常会在使用filter或者其他操作后,返回一个纵沟小的数据自己在使用,直接将整个rdd集coloect返回,很可能会让driver程序oom。
count() 返回数据集的元素个数
take(n) 返回一个数组,用数据集的前n个元素组成,注意,这个操作目前并非在多个节点上,并行执行,而是driver程序所在机制,单机计算所有的元素:注;gateway的内存压力会增大,需要谨慎使用
first()返回数据集的第一个元素
saveAsTextFile(path) 将数据集的元素,以txtfile的形式,保存到本地文件系统,hdfs或者其他hadoop支持的文件系统,spark将会调用每个元素的tostring方法,并将他转换成文件中一行文本。
saveAsSequenceFile(path)将数据集的元素,以sequencefile的格式,把偶你到指定的目录下,本地系统,hdfs或者其他hadoop支持的文件系统,rdd的元组必须有key-value对组成,并都实现了hadoop的writable接口或隐式可以转换为wirtable
foreach(func)在数据集的每个元素上,运行函数func,这通常用于更新一个累加器变量,或者和外部存储系统做交互。
transformation具体内容:
map(func) 返回一个新的分布式数据集,有每个原元素经过func函数转换后组成
filter(func) 返回一个新的数据集,有经过func函数后返回值为true的原元素组成
flatmap(func)类似于map 但是每一个输入元素,会被银蛇为0到多个输出元素,因此func函数的返回值是一个seq,而不是单一元素
sample(withReplacement,frac,seed) 根绝给定的随机种子seed,随机抽样出数量为frac的数据
union(otherdataset)返回一个新的数据集,有缘数据集和参数联合而成
groupbykey(【num tasks】)在一个有kv对组成的数据集上调用,返回一个k,seq【v】对的数据集,注意,默认情况下,使用8个并行任务进行分组,你可以传入num task可选参数,根绝数据量设置不同数目的task
reducebykey(func,【num tasks】)在一个kv对的数据集上使用,返回一个kv的数据集,key相同的值都被使用指定的reduce函数聚合在一起,和groupbykey类似,任务个数是第二个参数来配置
join(otherdataset,【num tasks】)在类型kev和kw类型的数据集上调用,返回一个k(v w)对,每个key中所有元素都在一起的数据集
groupwith(otherdataset,【num tasks】)在类型为kv和kw类型的数据集上调用,返回一个数据集,组成元组为k seq【v】seq[w]tuples ,这个奥做在其他框架成为cogroup
cartesian(otherdataset) 笛卡儿积,但在数据集t和u调用是,返回一个tu对的数据集,所有元素交互进行笛卡儿积。
flatmap(func)类似map,但是每一个数据元素,会被映射为0到多个输出元素