Spark
文章平均质量分 89
SunnyRivers
在通信、游戏、互联网、新能源等不同行业从事过多年大数据开发相关工作,想通过博客和大家一起分享大数据技术带来的经验和乐趣。
展开
-
大数据面试官别再问闭包了
前言说到大数据开发,scala这门语言似乎不可避免的要涉及到,尤其是在spark横行的时代,可让人奇怪的是面试大数据问道scala的时候,有些比较low的面试官会问:什么是闭包???啥情况?这个在无数语言中都泛滥的词,你问这个只会让你显得很low。那么遇到这种面试官,你只要按照我下面短短的一句话回答即可,回答完马上站起来说一句:不好意思,你们公司不适合我。一句话回答这种很low的面试官定义在一个函数内部的函数\color{blue}{定义在一个函数内部的函数}定义在一个函数内部的函数装B结束后还原创 2020-09-17 14:58:51 · 260 阅读 · 0 评论 -
Spark读写HBase(主要讲解SHC的使用)
前言Spark读写HBase本身来说是没啥可以讲的,最早之前都是基于RDD的,网上的资料就太多了,可以参考:参考链接1参考链接2其实都一样,后来有了Hortonworks公司的研发人员研发了一个Apache Spark - Apache HBase Connector,也就是我们熟悉的shc,通过这个类库,我们可以直接使用 Spark SQL 将 DataFrame 中的数据写入到 HBase 中,具体详细的介绍资料可以参考:shc的github国内大佬的总结再后来,就有了Spark HBas原创 2020-05-18 11:11:11 · 3749 阅读 · 1 评论 -
Spark用DSL表达式如何使用row_number函数
前言实习生说:再spark中写开窗函数跟hive没啥两样,就像您之前写的一样,但总感觉不高端,想用DSL表达式写,但又不知道怎么写如何用DSL表达式使用row_number函数准备数据//company app visit_times腾讯,腾讯视频,800腾讯,QQ音乐,900腾讯,微信读书,100腾讯,微信,900腾讯,腾讯课堂,200阿里,支付宝,900阿里,优酷视频...原创 2020-04-27 18:33:48 · 1334 阅读 · 0 评论 -
Spark createTempView数据存哪了
前言实习生很苦恼,为什么我使用了createTempView创建临时视图,每次查询的这个视图特别的耗时呢?这个数据难道没有存在内存而是本地?我问:你的视图缓存了吗?实习生:视图缓存?一般我只缓存DataFrame,比如如果要复用DataFrame我就会调用df.cache()方法,视图也要缓存?怎么缓存?createTempView运作原理先说一个众人皆知的知识:Spark中的算子包含...原创 2020-01-20 09:36:54 · 5536 阅读 · 2 评论 -
Spark操作Hive分区表
前言Spark操作Hive表可谓是异常的方便和简单,这里根据官网简单的总结一下Spark操作Hive分区表完美的处理处理方式// 开启Hive动态分区spark.sqlContext.setConf("hive.exec.dynamic.partition", "true")spark.sqlContext.setConf("hive.exec.dynamic.partition.mod...原创 2020-01-15 14:51:49 · 2547 阅读 · 0 评论 -
Scala的Tuple元素个数的限制问题
前言Spark在读取文件的时候管用的手法如下:spark.read.textFile("./data/tuple") .map(_.split(",")) .map(x => (x(0), x(1), x(2), x(3), x(4), x(5), x(6), x(7), x(8), x(9), x(10), x(11), x(12), x(13)...原创 2020-01-15 10:43:43 · 2474 阅读 · 0 评论 -
Spark读取本地文件和HDFS文件
前言旁边的实习生又一脸懵逼了:Spark有bug,明明我本地/data目录下有test.txt文件,但运行就报错:Caused by: java.io.FileNotFoundException: File file:/data/test.txt does not exist我一看,原来小伙子使用spark集群模式来读取仅仅在他自己的客户端存放的一个文本文件如何读取本地文件Spark ...原创 2020-01-09 11:44:05 · 17471 阅读 · 0 评论 -
Order By后产生NULL的问题
前言这里记录一下使用Spark-Shell查询Hive中数据时遇到的一点点问题,Hive表中一个字段的数据如下:+--------------+ | register_time|+--------------+|20190824192307||201512201...原创 2019-12-10 15:54:37 · 929 阅读 · 0 评论 -
单个字段中根据条件剔除数据
模拟数据数据一:123数据二:12需求:数据一中不包含数据二的数据代码object JoinTest { def main(args: Array[String]): Unit = { import org.apache.spark.sql.SparkSession import org.apache.log4j.{Level, Logger} ...原创 2019-12-03 21:03:42 · 414 阅读 · 0 评论 -
不同条件剔除数据
模拟数据1,张三,232,李四,243,王五,254,赵六,265,田七,25需求:剔除年龄为25、姓名为张三的数据代码object CullTest { def main(args: Array[String]): Unit = { import org.apache.spark.sql.SparkSession import org.apache.log...原创 2019-12-03 20:28:04 · 560 阅读 · 0 评论 -
Spark Streaming三种运行场景
三种运行场景描述无状态操作有状态操作updateStateByKeywindow场景一(无状态操作)描述:对于无状态操作,每次操作都只是计算当前时间切片的内容,例如每次只计算一秒钟时间切片中产生的数据的RDD。场景二(有状态操作之updateStateByKey)描述:对于有状态操作,要不断地把当前和历史的时间切片的RDD累加计算,随着时间流逝,计算的数据规模越来越大。...原创 2019-11-27 10:56:25 · 505 阅读 · 0 评论 -
Spark Streaming 反压机制
反压机制的引入默认情况下,Spark Streaming通过receiver以生产者生产数据的速率接收数据,计算过程中会出现批处理时间(Processing Time)大于批间隔时间(Batch Interval)的情况,其中批处理时间为实际计算一个批次花费的时间,批间隔时间为Streaming应用设置的批处理间隔。这意味着Spark Streaming的数据接收速率高于Spark从队列中移除数...原创 2019-11-26 18:52:06 · 352 阅读 · 0 评论 -
IDEA自定义快捷键
前言开发Spark代码的同学对于下面这一段代码应该写的快吐了 val spark = SparkSession .builder .appName(this.getClass.getSimpleName) .getOrCreate()import spark.implicits._最好在IDEA中将这个代码设置一个快捷键IDE...原创 2019-11-22 17:10:33 · 318 阅读 · 0 评论 -
Structured Streaming + Kafka测试
前言Structured Streaming出来有几年了,一直没有机会使用,最近闲来无事,就想先测试一下,完全没有细看关于它的一些详细介绍情况,仅仅想根据官网案例,执行一遍,没想到…copy官网的一小段代码// Subscribe to 1 topicval df = spark .readStream .format("kafka") .option("kafka.boots...原创 2019-11-22 10:47:41 · 982 阅读 · 0 评论 -
SparkSql用户自定义函数(UDF函数)
前言大部分SparkSql算子或者HiveSql能够解决大部分问题,但有的问题单纯的用现有的API很难实现,这个时候就得用到UDF函数了。数据集准备1,tom,232,jack,243,lily,184,lucy,195,rose,166,james,237,kobe,248,white,189,black,20代码import org.apache.log4j.{Le...原创 2019-11-07 15:20:23 · 1618 阅读 · 0 评论 -
Spark集群资源如何分配
前言新来的实习小伙,在公司的一个小集群(14台服务器,用于处理一些数据量较小的月数据)上面提交了一个spark application,然后其他人提交的application都在排队中,一个个的在抱怨。我看了一下小伙的提交脚本,然后问:为什么设置这样的配置?实习生脸一红:网上copy的…我也不知道该怎么设置,这个究竟该怎么分配呢?所有的调优都请参考两篇博客Spark性能优化指南——基础篇S...原创 2019-11-06 16:19:30 · 1332 阅读 · 0 评论 -
Spark创建临时视图
前言查看Spark Dataset的API发现,官网给了四种方法来创建临时视图,它们分别是:def createGlobalTempView(viewName: String): Unit// Creates a global temporary view using the given name.def createOrReplaceGlobalTempView(viewName: S...原创 2019-11-06 15:39:44 · 6638 阅读 · 2 评论 -
Spark内核解析之七:核心组件解析
BlockManager数据存储与管理机制BlockManager是整个Spark底层负责数据存储与管理的一个组件,Driver和Executor的所有数据都由对应的BlockManager进行管理。Driver上有BlockManagerMaster,负责对各个节点上的BlockManager内部管理的数据的元数据进行维护,比如block的增删改等操作,都会在这里维护好元数据的变更。每个节...原创 2019-11-05 20:15:32 · 385 阅读 · 1 评论 -
Spark内核解析之六:Spark 内存管理
前言在执行Spark 的应用程序时,Spark 集群会启动 Driver 和 Executor 两种 JVM 进程,前者为主控进程,负责创建 Spark 上下文,提交 Spark 作业(Job),并将作业转化为计算任务(Task),在各个 Executor 进程间协调任务的调度,后者负责在工作节点上执行具体的计算任务,并将结果返回给 Driver,同时为需要持久化的 RDD 提供存储功能。由于 ...原创 2019-11-05 20:00:48 · 323 阅读 · 0 评论 -
Spark内核解析之五:Spark Shuffle解析
Shuffle的核心要点1. ShuffleMapStage与ResultStage在划分stage时,最后一个stage称为finalStage,它本质上是一个ResultStage对象,前面的所有stage被称为ShuffleMapStage。ShuffleMapStage的结束伴随着shuffle文件的写磁盘。ResultStage基本上对应代码中的action算子,即将一个函数应...原创 2019-11-05 19:23:52 · 725 阅读 · 0 评论 -
Spark内核解析之四:Spark 任务调度机制
前言在生产环境下,Spark集群的部署方式一般为YARN-Cluster模式,之后的内核分析内容中我们默认集群的部署方式为YARN-Cluster模式。Spark任务提交流程在前面我们讲解了Spark YARN-Cluster模式下的任务提交流程,如下图所示:下面的时序图清晰地说明了一个Spark应用程序从提交到运行的完整流程:提交一个Spark应用程序,首先通过Client向Res...原创 2019-11-05 17:39:05 · 535 阅读 · 0 评论 -
Spark内核解析之三:Spark 通讯架构
Spark通信架构概述Spark2.x版本使用Netty通讯框架作为内部通讯组件。spark 基于netty新的rpc框架借鉴了Akka的中的设计,它是基于Actor模型,如下图所示:Spark通讯框架中各个组件(Client/Master/Worker)可以认为是一个个独立的实体,各个实体之间通过消息来进行通信。具体各个组件之间的关系图如下:Endpoint(Client/Master...原创 2019-11-05 17:09:02 · 524 阅读 · 0 评论 -
Spark内核解析之二:Spark 部署模式
前言Spark支持3种集群管理器(Cluster Manager),分别为:Standalone:独立模式,Spark原生的简单集群管理器,自带完整的服务,可单独部署到一个集群中,无需依赖任何其他资源管理系统,使用Standalone可以很方便地搭建一个集群;Apache Mesos:一个强大的分布式资源管理框架,它允许多种不同的框架部署在其上,包括yarn;Hadoop YARN:统一...原创 2019-11-05 17:00:45 · 364 阅读 · 0 评论 -
Spark内核解析之一:内核概述
Spark 内核概述Spark 内核泛指 Spark 的核心运行机制,包括 Spark 核心组件的运行机制、Spark任务调度机制、Spark 内存管理机制、Spark 核心功能的运行原理等,熟练掌握 Spark内核原理,能够帮助我们更好地完成 Spark 代码设计,并能够帮助我们准确锁定项目运行过程中出现的问题的症结所在。1. Spark 核心组件DriverSpark 驱动器节点...原创 2019-11-05 16:12:45 · 320 阅读 · 0 评论 -
Spark之Row
前言一直在说Dataframe是Dataset的特列,DataFrame=Dataset[Row],可Row是什么东西呢?什么是Row顾名思义:就是一行数据Row是org.apache.spark.sql包下的一个特质简单的理解:Row是一个类型,跟Car、Person这些的类型一样,所有的表结构信息都用Row来表示。什么时候会用到这个Row呢?煮个例子通过读取文件创建一个Dat...原创 2019-10-30 20:18:23 · 17495 阅读 · 5 评论 -
DataSet/DataFrame性能比RDD高?
前言我们都知道Dataset/DataFrame的运行流程如下:Parse SQL -> Analyze Logical Plan -> Optimize Logical Plan -> Generate Physical Plan -> Prepareed Spark Plan -> Execute SQL -> Generate RDD流程图如下:...原创 2019-10-30 19:11:15 · 1372 阅读 · 0 评论 -
RDD、DataFrame和Dataset
前言其实这三个现在完全没有必要再去对比了,以后我们只要会用Dataset就足够了。这里的对比完全就是一种类似于课外资料的东西,或者是应付面试等。如果仅仅是作为应用型的开发人员,只要会Dataset足以。当然,要想成为Spark专家,那么RDD是必须要研究透彻。RDDRDD是Spark建立之初的核心API,是一种有容错机制的特殊集合。RDD是不可变分布式弹性数据集,在Spark集群中可跨节点...原创 2019-10-30 17:36:11 · 284 阅读 · 0 评论 -
SparkSql性能测试案例
前言鉴于上一次SparkSql引起的那场灾难后,我决定做一个小小的测试:用不同的方法统计数量数据集准备infoA:13111111111,Tom13222222222,Jack13333333333,Lily13444444444,Lucy13555555555,Allen13666666666,White13777777777,Rivers13888888888,John...原创 2019-10-30 11:33:04 · 1047 阅读 · 0 评论 -
Spark中的Shuffle算子
官网的话什么是ShuffleIn Spark, data is generally not distributed across partitions to be in the necessary place for a specific operation.During computations, a single task will operate on a single partiti...原创 2019-10-29 19:36:15 · 2825 阅读 · 0 评论 -
SparkSql引起的一场灾难
发生灾难的原因sql(sqlText = "select tel_number from TableA") .filter("tel_number not in (select serv_number from tableB)") .agg(count($"serv_number")) .show()说明:select serv_number from...原创 2019-10-28 19:00:30 · 553 阅读 · 0 评论 -
Spark读Hive分区表报错:Caused by: org.apache.hadoop.mapred.InvalidInputException: Input path does not exist
第一个原创 2019-10-28 10:44:29 · 1951 阅读 · 0 评论 -
案例
简化需求一张hive表,有三个字段id,score,date,分别代表用户,信用得分,日期。格式如下:1,50,2019092,60,2019091,30,2019102,62,201910每个月根据用户的消费情况得出其信用得分,但是有个前提是,本月的得分不能低于上月需求分析也就是计算出本月得分后和上个月的得分进行比较,当本月得分小于上个月得分,则用上个月得分替代。可怎么实现需求...原创 2019-10-14 16:41:53 · 188 阅读 · 0 评论 -
Spark之Column
前言如果使用DataFrame或DataSet分析数据,那么Column这个类是无时无刻都在使用的什么是ColumnColumn是DataFrame中的数据计算出来的根据字面意思也可以知道,它就是代表DataFrame的一列数据,它是org.apache.spark.sql包下的一个类如何创建Columndf("columnName") // On a speci...原创 2019-05-11 17:07:22 · 3263 阅读 · 0 评论 -
Spark集群搭建
1. 搭建Standalone1).下载安装包,解压 2).改名 3).进入安装包的conf目录下,修改slaves.template文件,添加从节点。保存。 4).修改spark-env.shSPARK_MASTER_IP:master的ipSPARK_MASTER_PORT:提交任务的端口,默认是7077SPARK_WORKER_CORES:每个worker从节点能够支配的core的个数S...原创 2018-05-05 09:57:37 · 243 阅读 · 0 评论 -
SparkSql 数据类型转换
前言数据类型转换这个在任何语言框架中都会涉及到,看起来非常简单,不过要把所有的数据类型都掌握还是需要一定的时间历练的SparkSql数据类型数字类型ByteType:代表一个字节的整数。范围是-128到127ShortType:代表两个字节的整数。范围是-32768到32767IntegerType:代表4个字节的整数。范围是-2147483648到2147483647LongTy...原创 2019-09-18 11:59:18 · 14659 阅读 · 0 评论 -
MLlib官方简介
MLlib是Spark的机器学习(ML)库。 其目标是使实际的机器学习具有可扩展性和易用性。在较高的层面上,它提供了以下工具:(1)ML算法:通用学习算法,如分类,回归,聚类和协作过滤(2)特征提取:特征提取,转换,降维和选择(3)管道:用于构建,评估和调整ML管道的工具(4)持久性:保存和加载算法,模型和管道(5)实用程序:线性代数,统计,数据处理等公告:基于DataFrame的API是主要的A...原创 2018-05-12 13:09:47 · 6271 阅读 · 0 评论 -
Spark 读写 Es
前言有个新需求说来比较简单,就是spark读取hive中的数据,处理完后入es,这里就是简单整理一下流程流程伪代码object Credit_User_Model_To_Es { def main(args: Array[String]): Unit = { val spark = SparkSession .builder() .appName(nam...原创 2019-09-12 11:47:36 · 1673 阅读 · 6 评论 -
一次搭建Spark集群(standalone、yarn、高可用)
摘要内容施舍么原创 2018-08-20 17:36:26 · 1105 阅读 · 0 评论 -
Spark性能优化指南——高级篇
前言继基础篇讲解了每个Spark开发人员都必须熟知的开发调优与资源调优之后,本文作为《Spark性能优化指南》的高级篇,将深入分析数据倾斜调优与shuffle调优,以解决更加棘手的性能问题。数据倾斜调优调优概述有的时候,我们可能会遇到大数据计算中一个最棘手的问题——数据倾斜,此时Spark作业的性能会比期望差很多。数据倾斜调优,就是使用各种技术方案解决不同类型的数据倾斜问题...转载 2018-08-27 16:55:11 · 492 阅读 · 0 评论 -
Spark性能优化指南——基础篇
本来想自己总结调优,但是涉及的面有点广,现在网上转载最多的莫过于美团2016年写的那两篇博客了,写的很详细,但是我在实际开发中不是所有的都验证过,先转了,完了有时间进行进一步验证前言在大数据计算领域,Spark已经成为了越来越流行、越来越受欢迎的计算平台之一。Spark的功能涵盖了大数据领域的离线批处理、SQL类处理、流式/实时计算、机器学习、图计算等各种不同类型的计算操作,应用范...转载 2018-08-27 16:18:34 · 543 阅读 · 0 评论