
spark
文章平均质量分 53
鸭梨山大哎
life hard take it easy
展开
-
Parquet Serde
这样就能够在Hive中方便地查询和分析Parquet格式的数据了。原创 2023-06-10 10:12:05 · 764 阅读 · 0 评论 -
spark catalog与hive metastore的区别
但它们在实现方式和使用场景上有所不同。Spark Catalog是Spark内置的一个元数据管理组件,用于管理Spark数据源、表、视图等元数据信息。Spark Catalog支持多种数据源,包括HDFS、Hive、JDBC等,可以将这些数据源中的数据映射为Spark中的表,从而方便地进行数据处理和分析。。。Hive Metastore支持将Hive表关联到多种数据源,包括HDFS、HBase、Amazon S3等,从而支持对这些数据源中的数据进行SQL查询。原创 2023-06-10 09:22:30 · 1672 阅读 · 0 评论 -
Parquet文件格式问答
在Parquet文件格式中,行组(Row Group)是一个逻辑单位,用于组织一组行(Record)和多个列(Column)的数据。行组包含了多个列的数据页(Data Page)以及对应的定义页(Definition Page),它们具有相同的行数和行顺序,并且使用相同的压缩算法和编码方式进行压缩。行组的主要作用是将一个大的数据集划分为多个较小的块,以便于处理和存储。通过将数据分组为多个行组,可以提高数据读取和查询的效率,同时也可以降低内存和磁盘的使用量,从而更好地支持大规模数据处理和分析。原创 2023-04-15 11:43:29 · 2963 阅读 · 0 评论 -
spark.network.timeout参数入门
默认120s所有网络交互的默认超时时间。 如果未配置,则将使用此配置代替spark.storage.blockManagerSlaveTimeoutMs,spark.shuffle.io.connectionTimeout,spark.rpc.askTimeout或spark.rpc.lookupTimeout。用途若如出现各种timeout,executor lost ,task lostspark.network.timeout 根据情况改成300(5min)或更高参考Configurati原创 2021-02-24 15:35:53 · 7913 阅读 · 0 评论 -
Spark.shuffle.file.buffer 参数入门
Spark.shuffle.file.buffer默认值:32k参数说明:该参数用于设置shuffle write任务的bufferedOutputStream的缓冲区大小。 将数据写入磁盘文件之前,将其写入缓冲区,然后在将缓冲区写入磁盘后将其填充。调整建议:如果可用内存资源足够,则可以增加此参数的大小(例如64k),以减少在随机写入过程中磁盘文件溢出的次数,从而可以减少磁盘的数量。 IO时间和提高性能在实践中发现,合理调整参数后,性能将提高1%到5%。参考Spark performan原创 2021-02-24 15:21:48 · 1823 阅读 · 0 评论 -
Spark.shuffle.io.maxRetries参数
Spark.shuffle.io.maxRetries默认值:3参数说明:shuffle read任务从shuffle write任务那里节点正在拉自己的数据,如果网络由于异常拉失败而失败,它将自动重试。 此参数表示可以重试的最大次数。 如果在指定的次数内进行或不成功,则可能导致作业失败。调优建议:对于那些包含耗时的shuffle的作业,建议增加最大重试次数(例如60次),以避免由于诸如JVM或网络的完整gc之类的因素而导致数据失败。 不稳定。 在实践中发现,对于大量数据(数十亿到数十亿的shuf原创 2021-02-24 14:06:02 · 1206 阅读 · 0 评论 -
Spark.reducer.maxSizeInFlight 参数
Spark.reducer.maxSizeInFlight默认值:48m参数说明:该参数用于设置shuffle read任务的buff缓冲区大小,该缓冲区决定一次可以拉取多少数据。调整建议:如果可用内存资源足够,则可以增加参数的大小(例如96m),从而减少拉取数据的次数,这可以减少网络传输的次数并提高性能。 在实践中发现,合理调整参数后,性能会提高1%至5%。但是executor内存不足时,设置的太大,就会造成OOM导致宕机参考Spark performance optimization: s原创 2021-02-24 11:18:06 · 1713 阅读 · 0 评论 -
spark计算列与列之间的余弦相似度
import org.apache.spark.mllib.linalgimport org.apache.spark.mllib.linalg.Vectorsimport org.apache.spark.mllib.linalg.distributed.{CoordinateMatrix, RowMatrix}import org.apache.spark.rdd.RDDimport org.apache.spark.sql.SparkSessionobject Test { def m原创 2021-02-13 21:30:26 · 1290 阅读 · 0 评论 -
spark mlib坐标矩阵(Coordinate Matrix)
坐标矩阵CoordinateMatrix是一个基于矩阵项构成的RDD的分布式矩阵。每一个矩阵项MatrixEntry都是一个三元组:(i: Long, j: Long, value: Double),其中i是行索引,j是列索引,value是该位置的值。坐标矩阵一般在矩阵的两个维度都很大,且矩阵非常稀疏的时候使用。CoordinateMatrix实例可通过RDD[MatrixEntry]实例来创建,其中每一个矩阵项都是一个(rowIndex, colIndex, elem)的三元组import or原创 2021-02-13 21:11:43 · 1574 阅读 · 0 评论 -
spark mlib行索引矩阵
索引行矩阵IndexedRowMatrix与RowMatrix相似,但它的每一行都带有一个有意义的行索引值,这个索引值可以被用来识别不同行,或是进行诸如join之类的操作。其数据存储在一个由IndexedRow组成的RDD里,即每一行都是一个带长整型索引的本地向量。与RowMatrix类似,IndexedRowMatrix的实例可以通过RDD[IndexedRow]实例来创建案例import org.apache.spark.mllib.linalgimport org.apache.spar.原创 2021-02-13 20:54:08 · 379 阅读 · 0 评论 -
spark mlib行矩阵(RowMatrix)入门
行矩阵RowMatrix是最基础的分布式矩阵类型。每行是一个本地向量,行索引无实际意义(即无法直接使用)。数据存储在一个由行组成的RDD中,其中每一行都使用一个本地向量来进行存储。由于行是通过本地向量来实现的,故列数(即行的维度)被限制在普通整型(integer)的范围内。在实际使用时,由于单机处理本地向量的存储和通信代价,行维度更是需要被控制在一个更小的范围之内。RowMatrix可通过一个RDD[Vector]的实例来创建例子import org.apache.spark.mllib..原创 2021-02-13 20:31:22 · 1532 阅读 · 0 评论 -
saprk randomSplit方法
目的将rdd或者dataframe按照一定的比例进行拆分,拆分后的结果还是RDD或者dataframe类型.拆分RDDdef main(args: Array[String]): Unit = { val spark: SparkSession = SparkSession.builder().master("local").getOrCreate() val rdd: RDD[Int] = spark.sparkContext.parallelize(Array(1, 2, 3, 4原创 2021-02-13 20:07:33 · 1159 阅读 · 0 评论 -
Ad-Hoc Query入门
概念Ad hoc is latin for “for this purpose”. You might call it an “on thefly” query, or a “just so” query. It’s the kind of SQL query you justloosely type out where you need it在人可容忍的交互时间内(5秒内),对于给定查询返回结果,典型应用场景为:产品运营实时洞察A/B Testing用户增长领域特点(灵活性) 查询原创 2021-02-05 14:51:51 · 922 阅读 · 0 评论 -
Spark控制消费速率
spark.streaming.backpressure.initialRatespark2.0版本以上这是启用背压机制时每个接收器将接收第一批数据的初始最大接收速率。限制第一次批处理应该消费的数据,因为程序冷启动 队列里面有大量积压,防止第一次全部读取,造成系统阻塞This is the initial maximum receiving rate at which each receiver will receive data for the first batch when the backp原创 2021-02-04 14:59:10 · 679 阅读 · 0 评论 -
Spark与MR的区别
速度spark把运算的中间数据存放在内存,迭代计算效率更高;MR的中间结果需要落地,需要保存到磁盘,这样必然会有磁盘IO操作,影响性能容错性spark容错性高,它通过弹性分布式数据集RDD来实现高效容错,RDD是一组分布式的存储在节点内存中的只读性质的数据集,这些集合是弹性的,某一部分丢失或者出错,可以通过整个数据集的计算流程的血缘关系来实现重建;MR的话容错可能只能重新计算了,成本较高适用面spark更加通用,spark提供了transformation和action这两大类的多个功能的api原创 2021-02-03 17:30:42 · 451 阅读 · 0 评论 -
ORC 和 Parquet比较入门
ORC 和 Parquet 都是 Hadoop 生态系统中流行的开源列文件存储格式,在效率和速度方面非常相似,最重要的是,它们旨在加快大数据分析工作负载。使用 ORC 文件与处理 Parquet 文件一样简单,因为它们提供了高效的读写功能,比基于行的对应文件更高效。两者都有其优缺点,很难找出哪一个比另一个更好。让我们更好地看看它们。我们先从 ORC 开始,然后转到 Parquet。ORCORC (Optimized Row Columnar),是专为 Hadoop 工作负载设计的免费开源列存储格式。正如原创 2021-02-03 14:22:22 · 5277 阅读 · 1 评论 -
spark 读写SequenceFile
DataFrame没有相关API,df可以转为RDD然后再用,另外 也是只有pairRDD才能用RDD def save3(): Unit = { val spark: SparkSession = SparkSession.builder().master("local[1]").appName("test").getOrCreate() //只有pairRDD才能存储为SequenceFile //一般你随便读个json 很多字段是没法保存成SequenceFile的原创 2021-02-02 10:30:54 · 1107 阅读 · 0 评论 -
Spark sample入门到精通
Spark 采样是一种从数据集获取随机采样记录的机制,当您拥有较大的数据集并且想要分析/测试数据子集(例如原始文件的 10%)时,这非常有用。Spark 提供了 RDD、DataFrame 和DataSet API 上的采样方法来获取样本数据,本文将介绍如何获取随机采样记录以及如何每次运行时获取相同的随机采样,以及更多使用 scala 示例获取更多示例。数据分析师和数据科学家最常用数据采样来获取数据集子集的统计数据,然后再将其应用于大型数据集。dataframe 取样val spark: Spark原创 2021-02-02 09:41:23 · 1869 阅读 · 0 评论 -
spark SQL压缩入门
parquet默认压缩格式:snappy可用压缩格式:none, snappy, gzip, lzo默认是snappy压缩的parquet格式,不指定的情况下保存为gzip压缩的parquetgzip压缩格式的parquetdef compress(): Unit ={ val spark: SparkSession = SparkSession.builder().master("local[1]").appName("test").getOrCreate() spark.s原创 2021-02-01 20:19:28 · 1623 阅读 · 0 评论 -
SparkSQL默认存储格式入门
SparkSQL默认存储格式是Parquet,如下操作存储为parquet格式,parquet格式可以有效节省存储空间.另外由于列式存储,读取也比较快.存储为Parquetimport org.apache.spark.sql.{DataFrame, SparkSession}object SaveAsParquet { def main(args: Array[String]): Unit = { val spark: SparkSession = SparkSession.buil原创 2021-02-01 19:38:10 · 1217 阅读 · 0 评论 -
spark 数据倾斜之两阶段聚合(局部聚合+全局聚合)
两阶段聚合(局部聚合+全局聚合)方案适用场景:对RDD执行reduceByKey等聚合类shuffle算子或者在Spark SQL中使用groupby语句进行分组聚合时,比较适用这种方案。方案实现思路:这个方案的核心实现思路就是进行两阶段聚合。第一次是局部聚合,先给每个key都打上一个随机数,比如10以内的随机数,此时原先一样的key就变成不一样的了,比如(hello,(hello, 1) (hello, 1) (hello, 1),就会变成(1_hello, 1) (1_hello,原创 2021-01-30 16:55:03 · 1548 阅读 · 0 评论 -
spark数据倾斜解决之提高并行度
调整并行度分散同一个Task的不同Key方案适用场景:如果我们必须要对数据倾斜迎难而上,那么建议优先使用这种方案,因为这是处理数据倾斜最简单的一种方案。方案实现思路:在对RDD执行shuffle算子时,给shuffle算子传入一个参数,比如reduceByKey(1000),该参数就设置了这个shuffle算子执行时shuffle redu task的数量。对于Spark SQL中的shuffle类语句,比如groupby、join等,需要设置一个参数,即spark.sql.shuffl转载 2021-01-30 16:28:12 · 580 阅读 · 0 评论 -
spark 尽量避免数据源的数据倾斜
比如数据源是Kafka:以Spark Stream通过DirectStream方式读取Kafka数据为例。由于Kafka的每一个Partition对应Spark的一个Task(Partition),所以Kafka内相关Topic的各Partition之间数据是否平衡,直接决定Spark处理该数据时是否会产生数据倾斜。Kafka某一Topic内消息在不同Partition之间的分布,主要由Producer端所使用的Partition实现类决定。如果使用随机Partitioner,则每条消息会随机发送到一个转载 2021-01-30 16:11:26 · 217 阅读 · 0 评论 -
Spark如何定位导致数据倾斜的代码
数据倾斜只会发生在shuffle过程中。这里给大家罗列一些常用的并且可能会触发shuffle操作的算子:distinct、groupByKey、reduceByKey、aggregateByKey、join、cogroup、repartition等出现数据倾斜时,可能就是你的代码中使用了这些算子中的某一个所导致的。某个task执行特别慢的情况首先要看的,就是数据倾斜发生在第几个stage中。可以通过Spark Web UI来查看当前运行到了第几个stage,看一下当前这个stage各个task分原创 2021-01-30 14:59:08 · 1354 阅读 · 0 评论 -
Spark数据倾斜是如何造成的
什么是数据倾斜对Spark/Hadoop这样的大数据系统来讲,数据量大并不可怕,可怕的是数据倾斜。何谓数据倾斜?数据倾斜指的是,并行处理的数据集中,某一部分(如Spark或Kafka的一个Partition)的数据显著多于其它部分,从而使得该部分的处理速度成为整个数据集处理的瓶颈。如果数据倾斜没有解决,完全没有可能进行性能调优,其他所有的调优手段都是一个笑话。数据倾斜是最能体现一个spark大数据工程师水平的性能调优问题。数据倾斜如果能够解决的话,代表对spark运行机制了如指掌。数据倾斜俩大直接原创 2021-01-30 14:43:06 · 361 阅读 · 1 评论 -
Spark部署模式入门
部署模式概述Spark支持的主要的三种分布式部署方式分别是standalone、spark on mesos和 spark on YARN。standalone模式即独立模式,自带完整的服务,可单独部署到一个集群中,无需依赖任何其他资源管理系统。它是Spark实现的资源调度框架,其主要的节点有Client节点、Master节点和Worker节点。yarn模式yarn是统一的资源管理机制,在上面可以运行多套计算框架,如mapreduce、storm等根据driver在集群中的位置不同,分为y原创 2021-01-30 14:07:11 · 823 阅读 · 0 评论 -
Spark内存空间分配机制
静态内存管理在 Spark 最初采用的静态内存管理机制下,存储内存、执行内存和其他内存的大小在 Spark 应用程序运行期间均为固定的,但用户可以应用程序启动前进行配置,堆内内存的分配如图 2 所示:可以看到,可用的堆内内存的大小需要按照下面的方式计算:可用堆内内存空间:可用的存储内存 = systemMaxMemory * spark.storage.memoryFraction * spark.storage.safetyFraction可用的执行内存 = systemMaxMemory *原创 2021-01-30 10:53:44 · 411 阅读 · 0 评论 -
spark foreach与foreachPartition的区别
val spark: SparkSession = SparkSession.builder().master("local").getOrCreate() val sc: SparkContext = spark.sparkContext val rdd: RDD[Int] = sc.parallelize(Array(1, 1, 2, 3)) rdd.foreach((x: Int) =>{ println(x) })val spark: Spark原创 2021-01-29 14:35:19 · 714 阅读 · 0 评论 -
spark reduce与reduceByKey的区别
reduce针对集合是单个元素的,reduceByKey针对有key的reduce是行动算子,reduceByKey的转换算子案例reduce val spark: SparkSession = SparkSession.builder().master("local").getOrCreate() val sc: SparkContext = spark.sparkContext val rdd: RDD[Int] = sc.parallelize(Array(1, 2, 3).原创 2021-01-29 14:13:59 · 603 阅读 · 0 评论 -
Spark知识点总结
Spark有几种部署方式?请分别简要论述1)Local:运行在一台机器上,通常是练手或者测试环境。2)Standalone:构建一个基于Master+Slaves的资源调度集群,Spark任务提交给Master运行。是Spark自身的一个调度系统。3)Yarn: Spark客户端直接连接Yarn,不需要额外构建Spark集群。有yarn-client和yarn-cluster两种模式,主要区别在于:Driver程序的运行节点。4)Mesos:国内大环境比较少用。4.10.2 Spark任务使用什么原创 2021-01-29 11:25:47 · 1091 阅读 · 0 评论 -
Spark StreamingContext创建方式
方式1//get a conf object val conf = new SparkConf().setAppName("SparkStreamWordcount").setMaster("local[2]") val duration: Duration = Seconds.apply(10) //获取StreamingContext val ssc = new StreamingContext(conf, duration) val dstream: ReceiverInput原创 2021-01-28 10:38:03 · 553 阅读 · 0 评论 -
Spark Session 与 Spark Context的区别
Spark Session是Spark 2.0中Spark应用程序的统一入口点。 它提供了一种以较少数量的构造与各种spark功能交互的方法。 此时就不需要spark context, hive context, SQL context这些了,都包含在Spark Session中了.创建SparkSessionimport org.apache.spark.sql.SparkSessionval spark = SparkSession.builder.appName("SparkSessionEx原创 2021-01-28 09:53:01 · 5302 阅读 · 0 评论 -
spark-submit参数入门
./bin/spark-submit \ --master spark://192.168.1.1:7077 \ --num-executors 100 \ --executor-memory 6G \ --executor-cores 4 \ --total-executor-cores 400 \ ##standalone default all cores --driver-memory 1G \ --conf spark.default.parallelism=1000转载 2021-01-27 16:50:28 · 214 阅读 · 0 评论 -
spark写入数据到elasticsearch
本例中将DataFrame写入ES,之后利用kibana进行统计展示.import com.hm.util.SparkHelperimport org.apache.spark.sql.{DataFrame, SaveMode, SparkSession}object Test { def main(args: Array[String]): Unit = { val spark: SparkSession = SparkHelper.getSparkSession val op原创 2021-01-22 18:59:13 · 1117 阅读 · 0 评论 -
spark读取Hbase数据
import com.hm.util.SparkHelperimport org.apache.hadoop.conf.Configurationimport org.apache.hadoop.hbase.HBaseConfigurationimport org.apache.hadoop.hbase.client.Resultimport org.apache.hadoop.hbase.io.ImmutableBytesWritableimport org.apache.hadoop.hbas原创 2021-01-21 14:21:32 · 708 阅读 · 0 评论 -
Hbase ImmutableBytesWritable数据类型
实现了WritableComparable接口public class ImmutableBytesWritableimplements WritableComparable<ImmutableBytesWritable>可用作key或value的字节序列。基于BytesWritable,该类不可调整大小,并且不像BytesWritable那样区分序列大小和当前容量。因此它相对来说是“不变的”。创建此类的新实例时,不会复制byte[],而只是引用它。当我们进行序列化时,将访问备份缓冲区。原创 2021-01-21 13:57:10 · 1625 阅读 · 0 评论 -
spark graphX属性图
假设我们要构造一个属性图,它由GraphX项目上的各种协作者组成。vertex属性可能包含用户名和职业。我们可以用描述协作者之间关系的字符串来注释边:生成的图形将具有类型签名:val userGraph: Graph[(String, String), String]参考GraphX - Spark 3.0.1 Documentation...原创 2021-01-21 11:34:34 · 199 阅读 · 0 评论 -
spark graphx入门
引入例子import com.hm.util.SparkHelperimport org.apache.spark.graphx.{Edge, Graph, VertexId, VertexRDD}import org.apache.spark.rdd.RDDimport org.apache.spark.sql.SparkSessionobject GraphTest { def main(args: Array[String]): Unit = { val spark: Sp原创 2021-01-21 09:50:42 · 205 阅读 · 0 评论 -
spark读取数据写入hbase
import com.hm.util.SparkHelperimport org.apache.hadoop.conf.Configurationimport org.apache.hadoop.hbase.{HColumnDescriptor, HTableDescriptor, TableName}import org.apache.hadoop.hbase.client.{Admin, Connection, ConnectionFactory, Put}import org.apache.h原创 2021-01-20 19:33:35 · 357 阅读 · 0 评论 -
spark TF-IDF入门
在Spark ML库中,TF-IDF被分成两部分:TF (+hashing) 和 IDF。TF: HashingTF 是一个Transformer,在文本处理中,接收词条的集合然后把这些集合转化成固定长度的特征向量。这个算法在哈希的同时会统计各个词条的词频。IDF: IDF是一个Estimator,在一个数据集上应用它的fit()方法,产生一个IDFModel。 该IDFModel 接收特征向量(由HashingTF产生),然后计算每一个词在文档中出现的频次。IDF会减少那些在语料库中出现频率较高的原创 2021-01-18 09:32:07 · 1031 阅读 · 2 评论