Spark
从0到1哦
喜欢大数据行业,热爱技术,时刻追随着大数据的发展
展开
-
yarn物理内存虚拟内存问题
问题描述: xxx is running beyond physical memory limits. Current usage: 5.8 GB of 5 GB physical memory used; 5.7 GB of 10.5 GB virtual memory used. Killing container5G为yarn.scheduler.minimum-allocation-mb的值或者它的整数倍,当yarn.scheduler.minimum-allocation-mb大于ma原创 2020-08-25 15:09:34 · 4727 阅读 · 2 评论 -
mongo-scala某字段有则更新无则插入
问题:SparkStreaming处理实时数据将统计结果写入mongo,用mongo-java的api需要做一层判断即对某个维度进行查找如果存在则把指标更新,如果不存在则插入维度与指标字段,这种方式耗时效率低下换用mongo-scala的api使用其upsert方式实现插入与跟新,需要query的字段需在mongo中建立索引/** * Performs an update operat...原创 2019-12-27 20:56:31 · 857 阅读 · 0 评论 -
聚类算法之K-means
K-means过程原理假设有一批关于计算机科学和数学统计相关的人才,这批人才中计算机人才、机器学习人才、数学人才三类,那么该如何将这批数据进行聚类?我们可以直观的感觉到应该如下分类:但问题是计算机不会直观的去观察数据,首先将这批数据向量化,K-means聚类会随机在这些点中找到三个点,然后计算所有的样本到当前三个点的距离大小,判断样本点与当前三个点哪个距离比较近,当前样本就属于那个类。...原创 2019-01-15 22:51:59 · 329 阅读 · 0 评论 -
回归算法之逻辑回归
线性回归与逻辑回归的区别:比如要分析年龄,性别,身高,饮食习惯对于体重的影响,如果体重是实际的重量,那么就要使用线性回归。如果将体重分类,分成了高,中,低三类,就要使用逻辑回归进行分类。import org.apache.spark.mllib.classification.{LogisticRegressionWithLBFGS}import org.apache.spark.mllib...原创 2019-01-15 19:03:23 · 674 阅读 · 2 评论 -
回归算法之线性回归
import org.apache.log4j.{Level, Logger}import org.apache.spark.mllib.linalg.Vectorsimport org.apache.spark.mllib.regression.{LabeledPoint, LinearRegressionWithSGD}import org.apache.spark.{SparkConf...原创 2019-01-15 16:33:37 · 213 阅读 · 0 评论 -
分类算法之朴素贝叶斯
1、朴素贝叶斯分类算法朴素贝叶斯(Naive Bayes ,NB)算法是基于贝叶斯定理与特征条件独立假设的分类方法,该算法是有监督的学习算法,解决的是分类问题,是将一个未知样本分到几个预先已知类别的过程。朴素贝叶斯的思想就是根据某些个先验概率计算Y变量属于某个类别的后验概率,也就是根据先前事件的有关数据估计未来某个事件发生的概率。2、理解朴素贝叶斯假设现在有一堆邮件,正常邮件的比例饿是80...原创 2019-01-25 13:40:35 · 1258 阅读 · 0 评论 -
使用spark程序将表数据写入es
引入依赖<dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch-spark-20_2.11</artifactId> <version>5.0.0-alpha...原创 2019-01-14 17:37:41 · 1324 阅读 · 0 评论 -
分类算法之随机森林
随机森林也是非线性有监督的分类模型随机森林是由多个决策树组成。是用随机的方式建立一个森林,里面由很多决策树组成。随机森林中每一棵决策树之间都是没有关联的。得到随机森林之后,对于一个样本输入时,森林中的每一棵决策树都进行判断,看看这个样本属于哪一类,最终哪一类得到的结果最多,该输入的预测值就是哪一类。随机森林中的决策树生成过程是对样本数据进行行采样和列采样,可以指定随机森林中的树的个数和属性个...原创 2019-01-19 16:27:55 · 4336 阅读 · 0 评论 -
Spark2.x任务调度源码再析之大白话系列
在一个提交的一个Application中,如果遇见Shuffle算子的时候,那么就会发生任务的调度,当我们初始化SparkContext的时候,就会为我们创建两个对象,一个是DAGScheduler,一个是TaskSchedulerDAGScheduler中的实现在DAGScheduler中的doOnReceive()方法中,通过case 进行匹配事件类型 ,当匹配到JobSubmitted...原创 2019-01-24 15:45:36 · 224 阅读 · 0 评论 -
分类算法之SVM
SVM算法与之前介绍的逻辑回归三方有点类似。。支持向量机(support vector machine)是一种分类算法,通过寻求结构化风险最小来提高学习机泛化能力,实现经验风险和置信范围的最小化,从而达到在统计样本量较少的情况下,亦能获得良好统计规律的目的。通俗来讲,它是一种二类分类模型,其基本模型定义为特征空间上的间隔最大的线性分类器,即支持向量机的学习策略便是间隔最大化,最终可转化为一个凸二...原创 2019-01-16 22:14:27 · 1958 阅读 · 0 评论 -
spark作业中常见的数据倾斜解决方案总结
有的时候,我们可能会遇到大数据计算中一个最棘手的问题——数据倾斜,此时Spark作业的性能会比期望差很多。数据倾斜调优,就是使用各种技术方案解决不同类型的数据倾斜问题,以保证Spark作业的性能。数据倾斜是多么痛?!!!如果数据倾斜没有解决,完全没有可能进行性能调优,其他所有的调优手段都是一个笑话。数据倾斜是最能体现一个spark大数据工程师水平的性能调优问题。数据倾斜如果能够解决的话,代表...原创 2019-01-29 21:52:42 · 243 阅读 · 0 评论 -
报错:io.netty.buffer.PooledByteBufAllocator.metric()Lio/netty/buffer/PooledByteBufAllocatorMetric
运行异常:Exception in thread “main” java.lang.NoSuchMethodError: io.netty.buffer.PooledByteBufAllocator.metric()Lio/netty/buffer/PooledByteBufAllocatorMetric;at org.apache.spark.network.util.NettyMemory...原创 2019-03-14 13:55:39 · 3871 阅读 · 1 评论 -
spark on yarn模式下的executor与container
ava8内存模型:http://www.cnblogs.com/paddix/p/5309550.htmlhttp://www.cnblogs.com/dingyingsi/p/3760447.html帖子里提到5、方法区:方法区也是所有线程共享。主要用于存储类的信息、常量池、方法数据、方法代码等。方法区逻辑上属于堆的一部分,但是为了与堆进行区分,通常又叫“非堆”。1.7和1.8后这...原创 2019-03-13 15:43:37 · 9288 阅读 · 3 评论 -
spark.sql.shuffle.partitions 和 spark.default.parallelism 的区别
spark.default.parallelism只有在处理RDD时才会起作用,对Spark SQL的无效。spark.sql.shuffle.partitions则是对sparks SQL专用的设置方案实现思路:在对RDD执行shuffle算子时,给shuffle算子传入一个参数,比如reduceByKey(1000),该参数就设置了这个shuffle算子执行时shuffle read t...原创 2019-04-10 13:43:51 · 4633 阅读 · 0 评论 -
Spark history-server详解
history-server的部分重要参数:spark.history.fs.update.interval 默认值10秒这个参数指定刷新日志的时间,更短的时间可以更快检测到新的任务以及任务执行情况,但过快会加重服务器负载spark.history.ui.maxApplication 默认值intMaxValue这个参数指定UI上最多显示的作业的数目spark.history.ui.po...原创 2019-04-11 15:28:20 · 871 阅读 · 0 评论 -
使用spark的api读取mongo版本不兼容问题
spark版本2.1.1mongo版本3.4.6话不多说了,搞了一天,结论这样的:如果使用spark的api读取mongo有NotFoundClass或者NoSuchMethod等此类错误,一般着手两个方面去考虑:1、集群环境没有完整的jar包。2、jar包冲突或jar包与集群的版本不兼容解决方案:SparkConf文件中在conf文件指向的extlib目录下添加如下jar包:...原创 2019-05-21 09:26:47 · 812 阅读 · 0 评论 -
通过ADB Client高效写入数据到ADS
使用spark自带的写入MySQL的api,如下dataframe.write.mode(SaveMode.Append).jdbc(url, table_name, prop)我设置的是10s一个批次,一个批次的数据量大概有16000条,已经做好全部优化,但是还是有几十秒的延迟,造成kafka数据堆积,导致ads实时性并不太好。后来使用ADB Client写入ads,速度贼快,效果很好!...原创 2019-06-28 17:40:52 · 919 阅读 · 0 评论 -
Spark中的Shuffle详解
Shuffle简介Shuffle描述着数据从map task输出到reduce task输入的这段过程。shuffle是连接Map和Reduce之间的桥梁,Map的输出要用到Reduce中必须经过shuffle这个环节,shuffle的性能高低直接影响了整个程序的性能和吞吐量。因为在分布式情况下,reduce task需要跨节点去拉取其它节点上的map task结果。这一过程将会产生网络资源消耗...转载 2019-09-03 17:20:49 · 563 阅读 · 0 评论 -
分类算法之决策树
决策树是非线性有监督的分类模型。决策树是一种树形结构,树内部每个节点表示一个属性上的测试,每个分支代表一个测试输出,每个叶子节点代表一个分类类别。通过训练数据构建决策树,可以对未知数据进行分类。1.认识决策树术语:根节点:最顶层的分类条件叶节点:代表每一个类别号中间节点:中间分类条件分支:代表每一个条件的输出二叉树:每一个节点上有两个分支多叉树:每一个节点上至少有两个分支2....原创 2019-01-19 13:24:00 · 1464 阅读 · 0 评论 -
Spark的底层通信之Actor
Actor 能够实现并行编程的强大功能,它是基于事件模型的并发机制,Scala是运用消息的发送、接收来实现高并发的,Actor 可以看作是一个个独立的实体,他们之间是毫无关联的。但是,他们可以通过消息来通信。一个 Actor 收到其他 Actor 的信息后,它可以根据需要作出各种相应。消息的类型可以是任意的,消息的内容也可以是任意的(Scala Actor 是 scala 2.10.x 版本及以前...原创 2019-01-18 22:15:11 · 696 阅读 · 0 评论 -
Spark2.x资源调度源码再析之大白话系列
spark采用的粗粒度资源申请方式决定了每一个task在执行前不需要自己去申请资源,而是使用Application执行前都已经申请完毕的资源。那么资源调度的底层是如何实现的呢?当start-all.sh 的时候启动了两个脚本一个是start-master.sh 脚本中调用了org.apache.spark.deploy.master.Master这个类一个是start-slaves.sh...原创 2019-01-23 22:35:07 · 247 阅读 · 0 评论 -
什么是宽窄依赖,及特殊join算子,join时何时产生shuffle,何时不产生shuffle
1、 什么是宽窄依赖,宽依赖: 发生shuffle时,一定会产生宽依赖,宽依赖是一个RDD中的一个Partition被多个子Partition所依赖(一个父亲多有儿子),也就是说每一个父RDD的Partition中的数据,都可能传输一部分到下一个RDD的多个partition中,此时一定会发生shuffle窄依赖: 一个RDD中的一个 Partition最多 被一个 子 Partition所依...转载 2018-11-11 15:39:18 · 3840 阅读 · 4 评论 -
一篇让你看懂Spark任务执行各对象创建时机!
1.SparkContext哪一端生成的?Driver端2.DAG是在哪一端被构建的?Driver端3.RDD是在哪一端生成的?Driver端4.广播变量是在哪一端调用的方法进行广播的?Driver端5.要广播的数据应该在哪一端先创建好再广播呢?Driver端6.调用RDD的算子(Transformation和Action)是在哪一端调用的Driver端7.RDD在调用Tr...原创 2018-11-20 19:30:20 · 285 阅读 · 0 评论 -
SparkStreaming消费Kafka中的数据 使用zookeeper和MySQL保存偏移量的两种方式
Spark读取Kafka数据的方式有两种,一种是receiver方式,另一种是直连方式。今天分享的SparkStreaming消费Kafka中的数据保存偏移量的两种方式都是基于直连方式上的话不多说 直接上代码 !第一种是使用zookeeper保存偏移量object KafkaDirectZookeeper { def main(args: Array[String]): Unit = ...原创 2018-11-16 22:55:36 · 2506 阅读 · 0 评论 -
Spark Streaming 整合 SparkSQL处理流式计算
Spark Streaming之所以成为现在主流的流处理开发计算框架,不仅仅是因为它具有流处理和批处理的能力及支持离线和实时计算双重特点,更重要的是Spark具有良好的生态,它不仅可以整合Hadoop生态的Hive,使用Hive on Spark进行离线分析,整合Yarn模式,使用Spark on Yarn进行资源调度,更有自身的Spark SQL及graphx和meachine learning...原创 2018-11-22 08:40:54 · 2415 阅读 · 2 评论 -
Spark调优之性能调优
1.1分配更多资源1.1.1 分配哪些资源Executor的数量每个Executor所能分配的CPU数量每个Executor所能分配的内存量Driver端分配的内存数量1.1.2 在哪里分配这些资源在生产环境中,提交spark作业时,用的spark-submit shell脚本,里面调整对应的参数:/usr/local/spark/bin/spark-submit –class ...原创 2018-11-17 09:58:56 · 205 阅读 · 0 评论 -
Spark调优之JVM调优
今天给大家分享Spark调优相关的JVM调优,这个调优方法在开发中也很常见,他主要分为两种,一种是降低cache操作的内存占比,一种是调节executor堆外内存和降低连接等待时长。在此之前,我们先来了解一下JVM的堆内存。堆内存存放我们创建的一些对象,有老年代和年轻代。理想情况下,老年代都是放一些生命周期很长的对象,数量应该是很少的,比如数据库连接池。我们在spark task执行算子函数(...原创 2018-11-19 22:59:30 · 1389 阅读 · 0 评论 -
GeoHash在LBS的应用,看完这篇就什么都懂了
今天在做项目时,遇到这么一个小小场景:对于用户的一条行为数据信息,我需要通过他的地理坐标实时的得到他所在地附近商圈信息,并且给他打上相关标签以方便向他实时推送广告。问题是:如何根据用户的地理坐标获得他附近的商圈信息呢?怎样控制获得商圈信息的地理坐标范围呢? 怎样更精确的获得附近商圈的信息呢?这里有一个很关键的GeoHash算法解决了这些问题,下面带着这三个问题来阅读这篇文章,你就会收获很多。在...原创 2018-11-22 21:52:10 · 2377 阅读 · 1 评论 -
Spark 2.x 提交Job源码浅析
大家都知道,spark job的提交是触发了Action操作,现在我在RDD.scala中找到collect算子,在这下面是有一个runjob方法 def collect(): Array[T] = withScope { val results = sc.runJob(this, (iter: Iterator[T]) =&amp;amp;gt; iter.toArray) Array.con...原创 2018-11-17 21:42:36 · 254 阅读 · 1 评论 -
Spark调优之Shuffle调优
原理概述:什么样的情况下,会发生shuffle?在spark中,主要是以下几个算子:groupByKey、reduceByKey、countByKey、join(分情况,先groupByKey后再join是不会发生shuffle的),等等。什么是shuffle?groupByKey,要把分布在集群各个节点上的数据中的同一个key,对应的values,都要集中到一块儿,集中到集群中同一个节点...原创 2018-11-24 15:53:24 · 212 阅读 · 0 评论 -
关于Spark的序列化问题
本文主要从以下三个方面解释Spark 应用中序列化问题 。1、Java序列化含义。2、Spark代码为什么需要序列化。3、如何解决Spark序列化问题。1、Java序列化含义。Spark是基于JVM运行的进行,其序列化必然遵守Java的序列化规则。序列化就是指将一个对象转化为二进制的byte流(注意,不是bit流),然后以文件的方式进行保存或通过网络传输,等待被反序列化读取出来。序列化...原创 2018-11-25 21:54:31 · 1301 阅读 · 0 评论 -
Spark底层算子之CombineByKey
在数据分析中,处理Key,Value的Pair数据是极为常见的场景。譬如说,对Pair数据按照key分组、聚合,又或者更抽象的,则是根据key对value进行fold运算。如果我们对编码的态度有些敷衍,大约会将其分别定义为三个函数:gruopByKey、aggregateByKey、foldByKey。站在调用者的角度,如此设计无可厚非,相反我还得击节赞叹。因为从函数名来看,确实体贴地照顾了用户...原创 2018-12-01 12:12:01 · 270 阅读 · 0 评论 -
SparkStreaming直连kafka0.10将offsets保存在redis中
SparkStreaming消费Kafka中的数据可以将偏移量保存在zookeeper、MySQL、redis中,前两种方式呢,我前面的博客都有演示,今天主要给大家分享第三种方式—采用直连方式,将偏移量保存在redis中。不过需要注意的是,前两篇kafka的版本是0.8版本 而今天将偏移量保存在redis中是用的kafka0.10版本。一定要注意区别创建数据库连接池import redis....原创 2018-11-28 18:05:14 · 1131 阅读 · 3 评论 -
累加器使用的注意点及自定义累加器
累加器(accumulator)是Spark中提供的一种分布式的变量机制,其原理类似于mapreduce,即分布式的改变,然后聚合这些改变。累加器的一个常见用途是在调试时对作业执行过程中的事件进行计数。累加器简单使用Spark内置的提供了Long和Double类型的累加器。下面是一个简单的使用示例,在这个例子中我们在过滤掉RDD中奇数的同时进行计数,最后计算剩下整数的和。 val spark...原创 2018-12-31 20:43:35 · 2460 阅读 · 0 评论 -
Spark采用jdbc的方式访问hive
这里需要导入一个jdbc-hive依赖需要注意的是,包的版本一定要确认好,切勿版本过高<dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-jdbc</artifactId> <ve...原创 2019-01-05 21:32:01 · 4166 阅读 · 4 评论 -
Spark分区数详解
spark.default.parallelism:(默认的并发数)= 2当配置文件spark-default.conf中没有显示的配置,则按照如下规则取值:1、本地模式(不会启动executor,由SparkSubmit进程生成指定数量的线程数来并发):spark-shell spark.default.parallelism = 1spark-shell --master...转载 2019-01-01 21:30:48 · 3162 阅读 · 1 评论 -
spark向hbase中读写数据
最近项目中用频繁使用spark从hbase中读数据和向hbase中写数据,下面总结了一些简单demo, 在此基础上可以通过hbaseAPI进行各种复杂查询与写操作 希望能帮助到你向Hbase中写数据方案一:package utilsimport org.apache.hadoop.hbase.HBaseConfigurationimport org.apache.hadoop.hbase...原创 2019-01-02 21:54:48 · 3034 阅读 · 4 评论 -
SparkShuffle的分类和执行过程的一些总结
什么是Spark Shuffle?reduceByKey会将上一个RDD中的每一个key对应的所有value聚合成一个value,然后生成一个新的RDD,元素类型是&lt;key,value&gt;对的形式,这样每一个key对应一个聚合起来的value。在聚合之前,相同的key可能在不同的分区中,这些分区也可能子不同的节点上,RDD是弹性的分布式数据集,RDD的partitiion很可能在不同...原创 2018-11-11 14:31:26 · 1792 阅读 · 1 评论