Spark学习
道法—自然
不积跬步,无以至千里;不积小流,无以成江海。——荀子
展开
-
百度面试总结:spark比MapReduce快的原因是什么?(比较完整)
1、spark是基于内存进行数据处理的,MapReduce是基于磁盘进行数据处理的MapReduce的设设计:中间结果保存在文件中,提高了可靠性,减少了内存占用。但是牺牲了性能。Spark的设计:数据在内存中进行交换,要快一些,但是内存这个东西,可靠性不如磁盘。所以性能方面比MapReduce要好。DAG计算模型在迭代计算上还是比MapReduce的效率更高2、spark中具有DAG有...原创 2018-12-01 23:59:14 · 6515 阅读 · 3 评论 -
创建dataframe的几种方式——读取非json格式的RDD(通过动态创建schema的方式创建)
动态创建Schema将非json格式的RDD转换成DataFrame一、Java代码:SparkConf conf = new SparkConf();conf.setMaster("local").setAppName("rddStruct");JavaSparkContext sc = new JavaSparkContext(conf);SQLContext sqlConte...原创 2018-11-23 21:38:38 · 840 阅读 · 0 评论 -
创建dataframe的几种方式——读取非json格式的RDD(通过反射的方式创建)
非json格式的RDD创建DataFrame通过反射的方式将非json格式的RDD转换成DataFrame(不建议使用)自定义类要可序列化 自定义类的访问级别是Public RDD转成DataFrame后会根据映射将字段按Assci码排序 将DataFrame转换成RDD时获取字段两种方式,一种是df.getInt(0)下标获取(不推荐使用),另一种是df.getAs(“列名”)获取(推...原创 2018-11-23 21:31:15 · 292 阅读 · 0 评论 -
创建dataframe的几种方式——读取json格式的RDD
一、Java代码SparkConf conf = new SparkConf();conf.setMaster("local").setAppName("jsonRDD");JavaSparkContext sc = new JavaSparkContext(conf);SQLContext sqlContext = new SQLContext(sc);JavaRDD<Str...原创 2018-11-23 21:20:23 · 962 阅读 · 0 评论 -
创建dataframe的几种方式——读取json格式的文件
创建DataFrame的方式一共有读取json格式的文件创建DataFrame注意:json文件中的json数据不能嵌套json格式数据。 DataFrame是一个一个Row类型的RDD,df.rdd()/df.javaRdd()。 可以两种方式读取json格式的文件。 df.show()默认显示前20行数据。 DataFrame原生API可以操作DataFrame(不方便)。...原创 2018-11-23 21:15:08 · 3430 阅读 · 0 评论 -
spark的四大核心组件
相对于第一代的大数据生态系统Hadoop中的MapReduce,Spark 无论是在性能还是在方案的统一性方面,都有着极大的优势。Spark框架包含了多个紧密集成的组件,如图4所示。位于底层的是Spark Core,其实现了Spark的作业调度、内存管理、容错、与存储系统交互等基本功能,并针对弹性分布式数据集提供了丰富的操作。在Spark Core的基础上,Spark提供了一系列面向不同应用需求的...原创 2018-11-23 20:52:07 · 1763 阅读 · 0 评论 -
logstash安装与logstash-input-jdbc插件使用
ElasticSearch的索引可以手动添加索引的,就是类似下面这样添加的PUT /movies/movie/1{ "title": "The Godfather", "director": "Francis Ford Coppola", "year": 1972, "genres": ["Crime", "Dr原创 2018-11-23 18:02:47 · 502 阅读 · 0 评论 -
Spark——countByKey()与reduceByKey()
1.transformation & action transformation :是得到一个新的RDD,方式很多,比如从数据源生成一个新的RDD或者从RDD生成一个新的RDD action : 是得到一个值,或者一个结果(直接将RDDcache到内存中) 所有的transformation都是采用的懒策略,就是如果只是将transformation提交是不会...原创 2018-11-22 00:02:43 · 500 阅读 · 0 评论 -
spark运行的四种模式比较
Spark可以用R语言,Java语言,Scala语言以及Python语言进行编写程序,spark本身是由Java语言编写的。Java编写的代码量大,Scala编写的比较简洁,但是可读性会比较差。Java和scala 编写的程序执行效率相同,Python编写的程序执行效率不如Java和Scala编写的执行效率。Spark的4中运算模式:local模式,适用于测试;一般是本地跑 Standa...原创 2018-11-22 00:00:11 · 895 阅读 · 0 评论 -
spark比MapReduce快的原因
park比MapReduce快的原因Spark是基于内存的,而MapReduce是基于磁盘的迭代MapReduce的设设计:中间结果保存在文件中,提高了可靠性,减少了内存占用。但是牺牲了性能。 Spark的设计:数据在内存中进行交换,要快一些,但是内存这个东西,可靠性不如磁盘。所以性能方面比MapReduce要好。DAG计算模型在迭代计算上还是比MapReduce的效率更高有向无环...原创 2018-11-22 00:00:08 · 5746 阅读 · 1 评论 -
countbykey和reducebykey的区别
1原创 2018-11-22 00:00:05 · 683 阅读 · 0 评论 -
map和maptopair的区别
maptopair是作用在Java代码中map作用在Scala代码中两者的作用是:都对rdd进行处理。在Wordcount中,初步都是进行处理成(k,1)的形式,然后在排序之前,往往按照tuple的形式进行处理,也就是将(k,v)——>(v,k)的形式。排序完成之后,再次将(v,k)的形式转换成(k,v)的形式。...原创 2018-11-21 23:46:44 · 7565 阅读 · 3 评论 -
创建dataframe的几种方式——读取parquet格式的文件
读取parquet文件创建DataFrame注意:可以将DataFrame存储成parquet文件。保存成parquet文件的方式有两种:df.write().mode(SaveMode.Overwrite)format("parquet") .save("./sparksql/parquet");df.write...原创 2018-11-23 21:54:17 · 4659 阅读 · 0 评论 -
创建dataframe的几种方式——读取jdbc中的数据创建dataframe(以MySQL为例)
读取JDBC中的数据创建DataFrame(MySql为例)两种方式创建DataFrame一、Java代码SparkConf conf = new SparkConf();conf.setMaster("local").setAppName("mysql");JavaSparkContext sc = new JavaSparkContext(conf);SQLContext s...原创 2018-11-23 22:02:49 · 1070 阅读 · 0 评论 -
spark的资源调度与任务调度
原创 2018-12-01 23:20:39 · 189 阅读 · 0 评论 -
spark的几种模式的比较
在spark的学习中,spark一共有四种模式,分别是:spark基于localspark基于standalonespark基于yarnspark基于metsos Standalone模式两种提交任务方式Standalone-client提交任务方式提交命令 ./spark-submit --master spark://node1:7077 -...原创 2018-12-01 23:11:28 · 2476 阅读 · 0 评论 -
spark的三种模式的详细运行过程(基于standalone与基于yarn)
一、Standalone模式1、使用SparkSubmit提交任务的时候(包括Eclipse或者其它开发工具使用new SparkConf()来运行任务的时候),Driver运行在Client;使用SparkShell提交的任务的时候,Driver是运行在Master上2、使用SparkSubmit提交任务的时候,使用本地的Client类的main函数来创建sparkcontext并初始化它...原创 2018-12-01 21:39:43 · 3048 阅读 · 0 评论 -
结构化数据、非结构化数据、数据清洗等概念
(1)结构化数据,简单来说就是数据库。结合到典型场景中更容易理解,比如企业ERP、财务系统;医疗HIS数据库;教育一卡通;政府行政审批;其他核心数据库等。这些应用需要哪些存储方案呢?基本包括高速存储应用需求、数据备份需求、数据共享需求以及数据容灾需求。(2)非结构化数据库是指其字段长度可变,并且每个字段的记录又可以由可重复或不可重复的子字段构成的数据库,用它不仅可以处理结构化数据(如数字、符号...原创 2018-11-26 23:08:08 · 6792 阅读 · 1 评论 -
Spark资源调度和任务调度过程介绍
一、前述Spark的资源调度是个很重要的模块,只要搞懂原理,才能具体明白Spark是怎么执行的,所以尤其重要。自愿申请的话,本文分粗粒度和细粒度模式分别介绍。二、具体Spark资源调度流程图:Spark资源调度和任务调度的流程: 1、启动集群后,Worker节点会向Master节点汇报资源情况,Master掌握了集群资源情况。 ...原创 2018-12-02 10:17:50 · 417 阅读 · 0 评论 -
并行度和并发数的比较
在互联网概念中,并行度是指可同时开辟的线程的数量并发数是指每个线程中可同时处理的最大数据量。比如4个线程,每个线程可处理的数据量是100万条,那么并行度就是4,并发量就是100万,而对于stage而言,即使其中的task是分批task进行执行的,也都算在并行度中,比如,stage中有100个task,而这100个task分4次才能执行完,那么该stage的并行度就是100....原创 2018-11-22 20:05:38 · 2009 阅读 · 0 评论 -
rdd的持久化的三种方式:cache,persist,checkpoint
rdd的持久化算子有三种:1、cache:将数据持久化到内存2、persist:可以将数据持久化到磁盘,也可以将数据持久化到内存3、checkpoint:将数据持久化到磁盘。persist的几个参数:cache和persist的注意事项1、cache和persist都是懒执行算子,需要有一个action算子触发执行2、cache和persist算子的返回执行都必...原创 2018-11-22 19:17:50 · 2870 阅读 · 0 评论 -
SparkSQL中开窗函数
开窗函数注意:row_number() 开窗函数是按照某个字段分组,然后取另一字段的前几个的值,相当于 分组取topN如果SQL语句里面使用到了开窗函数,那么这个SQL语句必须使用HiveContext来执行,HiveContext默认情况下在本地无法创建。开窗函数格式:row_number() over (partitin by XXX order by XXX)Java...原创 2018-11-24 09:55:03 · 2031 阅读 · 0 评论 -
SparkSQL中用户自定义聚合函数——UDAF
UDAF:用户自定义聚合函数。实现UDAF函数如果要自定义类要继承UserDefinedAggregateFunction类Java代码:SparkConf conf = new SparkConf();conf.setMaster("local").setAppName("udaf");JavaSparkContext sc = new JavaSparkContext(conf)...原创 2018-11-24 09:54:34 · 430 阅读 · 0 评论 -
sparkSQL中自定义函数——UDF
自定义函数是可以根据函数中参数的个数去选择哪一种函数(UDF1,UDF2...) SparkConf conf = new SparkConf();conf.setMaster("local");conf.setAppName("udf");JavaSparkContext sc = new JavaSparkContext(conf);SQLContext sqlContext =...原创 2018-11-23 22:50:07 · 510 阅读 · 0 评论 -
创建dataframe的几种方式——读取Hive中的数据加载成DataFrame
读取Hive中的数据加载成DataFrameHiveContext是SQLContext的子类,连接Hive建议使用HiveContext。 由于本地没有Hive环境,要提交到集群运行,提交命令:./spark-submit --master spark://node1:7077,node2:7077 --executor-cores 1 --executor-memory 2G ...原创 2018-11-23 22:36:58 · 3316 阅读 · 1 评论 -
map flatmap mappartition flatMapToPair四种用法区别
map: 我们可以看到数据的每一行在map之后产生了一个数组,那么rdd存储的是一个数组的集合JavaRDD<String[]> mapresult=lines.map()flatMap: 同map函数一样:对每一条输入进行指定的操作,然后为每一条输入返回一个对象 最后将所有对象合并为一个对象 JavaRDD<String> objectJavaRDD = ...原创 2018-11-21 23:37:53 · 580 阅读 · 0 评论 -
spark中rdd的宽窄依赖
1)RDD概念:Resilient Distributed Datasets 弹性分布式数据集,是一个容错的、并行的数据结构,可以让用户显式地将数据存储到磁盘和内存中,并能控制数据的分区。同时,RDD还提供了一组丰富的操作来操作这些数据。RDD是只读的记录分区的集合,只能通过在其他RDD执行确定的转换操作(transformation操作)而创建。RDD可看作一个spark的对象,它本身存在于内...原创 2018-11-21 23:14:29 · 2254 阅读 · 0 评论 -
zookeeper集群的选举机制
Zookeeper默认的算法是FastLeaderElection, 采用投票数大于半数则胜出的逻辑。 选举依据: 服务器ID: 比如有3台服务器, 编号分别为 1, 2, 3。 编号越大,在选举算法中的权重越大。 选举状态: LOOKING,竞选状态...原创 2018-10-30 09:35:54 · 917 阅读 · 0 评论 -
Spark部分:zip相关算子的原理
原创 2018-08-27 13:34:53 · 600 阅读 · 0 评论 -
spark部分:改变rdd的分区数coalesce,repartition,glom,randomSplit的区别
小转大必须开启shuffle大转小开启shuffle:再次分区大转小不开启分区:任意合并原创 2018-08-27 13:30:43 · 744 阅读 · 0 评论 -
spark部分:map,flatmap,mapPartitions,mapPartitionswithindex算子
原创 2018-08-27 13:20:25 · 441 阅读 · 0 评论 -
spark部分:distinct去重的原理
原创 2018-08-27 13:13:52 · 14749 阅读 · 0 评论 -
排序算法:sort by key和sort by算子
sort:原创 2018-08-27 13:12:26 · 357 阅读 · 0 评论 -
spark部分:join,inner join,left outer join,right outer join,full outer join算子
join的常见方式:join,inner join,left outer join,right outer join,full outer join 在 Spark 的算子中,对两个 RDD 进行 join 有着类似的作用 ...原创 2018-08-27 13:06:54 · 1082 阅读 · 0 评论 -
spark部分:算子大总结
spark部分算子的分类:一.transformation类算子flatmapmapflatmapmappartitionsaggregatebykeycombinebykeyreducebykeygroupbykey filterval rdd = sc.makeRDD(Array("hello","hello","hello","world...原创 2018-08-27 12:34:40 · 442 阅读 · 0 评论 -
Spark部分:调优【reduceByKey/aggregateByKey替代groupByKey,mapPartitions替代普通map,foreachPartitions替代foreach】
1.使用reduceByKey/aggregateByKey替代groupByKey2.使用mapPartitions替代普通map3.使用foreachPartitions替代foreach4.使用filter之后进行coalesce操作5.使用repartitionAndSortWithinPartitions替代repartition与sort类操作6.使用broadca...原创 2018-08-13 11:11:12 · 3246 阅读 · 0 评论 -
Spark部分:重新分区(repartition和coalesce)
coalescedef coalesce(numPartitions:Int,shuffle:Boolean=false):RDD[T] 该函数用于将RDD进行重分区,使用HashPartitioner。 第一个参数为重分区的数目,第二个为是否进行shuffle,默认为false。repartitiondef repartition(numPartitions: Int): RDD...原创 2018-08-27 11:08:30 · 2454 阅读 · 0 评论 -
Scala部分:Scala中的函数(包含主函数,函数的调用,函数的匹配,函数返回类型的设定,函数的递归,嵌套函数,偏应用函数【难】,高阶函数【难】,柯里化函数)
package com.bjsxt.scalaimport java.util.Dateobject fun { /** * 方法的定义 * 定义方法用def */ def main (args:Array[String]): Unit={ /** * 主函数必须用unit * 其他的函数中,返回值类型可加也可以不用加 */...原创 2018-07-18 12:12:07 · 289 阅读 · 0 评论 -
Scala部分:Scala中的循环(包含to关键字和until关键字的使用,普通递加输出,九九乘法表的打印,while和for循环,if条件语句)
package com.bjsxt.scalaobject ObjectAndClass { def main(args: Array[String]): Unit={ println(1 to 10) println(1 until 10) println("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$")...原创 2018-07-17 20:42:07 · 3382 阅读 · 0 评论 -
Spark部分:Sample算子
原创 2018-08-27 15:01:17 · 1780 阅读 · 1 评论