Spark
爱吃西蓝花的老张
这个作者很懒,什么都没留下…
展开
-
Spark写redis最佳实践
使用 Jedis Pipline1、JedisClusterPipelinepackage com.xiaomi.jedisClient;/** */import org.slf4j.Logger;import org.slf4j.LoggerFactory;import redis.clients.jedis.*;import redis.clients.jedis.exceptions.JedisMovedDataException;import redis.clients.jedi原创 2020-05-12 17:23:18 · 2435 阅读 · 0 评论 -
Scala解析Json、JsonMap、并排序
不多哔哔,上代码import com.google.gson.{Gson, JsonObject}import scala.util.Tryval a = "{\"id\":\"1e6d6e19326dc9ef9871390ff0c5b966\",\"items\":{\"26772178\":768.46793983337}}"val b = Try{new Gson().fromJ...原创 2019-10-29 19:00:44 · 1098 阅读 · 0 评论 -
Spark分区操作rePartition和coalesce的异同
1、先上结论rePartition是coalesce的shuffle为true的情况2、看源码先看看rePartition/*** Return a new RDD that has exactly numPartitions partitions.** Can increase or decrease the level of parallelism in this RDD. In...原创 2019-07-01 09:34:30 · 581 阅读 · 0 评论 -
Spark scala 中RDD操作实现行转列
目标:"zjf","1,2,3" 转换成zjf,1zjf,2zjf,3不多BB,上代码val originPlayVideoTags = sc.parallelize(List(("zjf","1,2,3")))val a = originPlayVideoTags.collect()for (_a <- a){println(_a)}val b = originPla...原创 2019-06-03 17:10:31 · 3071 阅读 · 2 评论 -
Spark 作业执行常用参数、常用优化参数
1. spark重试次数失败重试次数,默认重试4次,前期任务调试阶段,重试次数最好设置为1,可以较快得到执行结果;后期业务上线,也使用默认参数--conf spark.yarn.maxAppAttempts=12. 开启Driver多线程机制.set("spark.driver.allowMultipleContexts", "true") 3.开启自动调节机制,根据当前的处理速...原创 2019-01-23 16:06:09 · 1882 阅读 · 0 评论 -
SparkStreaming编程优化经验
1.代码精简、逻辑清晰代码的精简往往能带来很大的提升,这一点甚至比外部的调优效果更好。比如去除一些不必要的filter、选择合适的算子2.避免shuffle所谓shuffle,就是在网络间传输数据。Spark作业运行过程中,最消耗性能的地方就是shuffle过程。shuffle过程,简单来说,就是将分布在集群中多个节点上的同一个key,拉取到同一个节点上,进行聚合或join等操作。比如red...原创 2018-12-11 11:29:21 · 718 阅读 · 0 评论 -
Spark 引用ProtoBuffer报错:Unable to find proto buffer class
使用 yarn 的spark-submit提交时,加入超序列化参数:--conf spark.serializer=org.apache.spark.serializer.KryoSerializer \另,附:Spark-submit提交作业的shell版本模板。一个好的shell脚本,不仅让人看起来赏心悦目,更易于查找问题,方便交接#!/bin/sh>>descr...原创 2018-12-02 11:51:27 · 966 阅读 · 0 评论 -
Spark异常:task cannont be Serializable
原因:在入库操作中,在 map\foreachePartition 等等分布式环境中new了连接对象(可以是redis、mysql等等),而此连接对象只能在本机起作用他们无法被序列化,所以在别的机器中找不到连接对象类似下例代码,就会抛出该错:val imClient = MistoreClientFactory.getMistoreClient(cateLog)rsRdd .map(w...原创 2018-12-02 08:08:38 · 471 阅读 · 3 评论 -
Spark RDD 特征及其依赖
1 RDD特征分区(partition)有一个数据分片列表,能够将数据进行切分,切分后的数据能够进行并行计算,是数据集的原子组成部分函数 compute计算每个分片,得出一个可遍历的结果,用于说明在父RDD上执行何种计算依赖 dependency计算每个RDD对父RDD的依赖列表,源RDD没有依赖,通过依赖关系描述血统(lineage)优先位置(可选)每一个分片的优先计算位置(pr...原创 2018-09-23 15:12:43 · 1193 阅读 · 0 评论 -
Spark Broadcast
顾名思义,broadcast 就是将数据从一个节点发送到其他各个节点上去。这样的场景很多,比如 driver 上有一张表,其他节点上运行的 task 需要 lookup 这张表,那么 driver 可以先把这张表 copy 到这些节点,这样 task 就可以在本地查表了。如何实现一个可靠高效的 broadcast 机制是一个有挑战性的问题。先看看 Spark 官网上的一段话: Broadc...转载 2018-09-05 21:44:28 · 1709 阅读 · 0 评论 -
scala-zipWithIndex、zipWithUniqueId 函数用法解析
1. 是什么 顾名思义,zipWithIndex:通过主键打包,ZipWithUniqueId:通过唯一主键打包。二者的主要作用1. def zipWithIndex(): RDD[(T, Long)]该函数将RDD中的元素和这个元素在RDD中的ID(索引号)组合成键/值对。2. def zipWithUniqueId(): RDD[(T, Long)]该函数将RDD...原创 2018-09-05 21:34:42 · 4142 阅读 · 1 评论 -
Spark中distinct、reduceByKey和groupByKey的区别与取舍
1. 代码实例:a.val rdd = sc.makeRDD(Seq("aa", "bb", "cc", "aa", "cc"), 1)//对RDD中的元素进行去重操作rdd.distinct(1).collect().foreach(println)rs:aabbccb.val rdd:原创 2018-07-30 21:13:58 · 6751 阅读 · 0 评论 -
Spark编程优化与建议
用 aggregateByKey 替代 reduceByKey 和 groupByKeyrepartition适用于RDD[V], partitionBy适用于RDD[K,V]如果有RDD复用,尤其是该RDD需要花费比较长的时间,建议对该RDD做catch,如果该RDD每个Partition需要消耗很多内存,建议开启Kryo序列化机制(可节省2到5倍空间),如果还是有比较大的内存开销,建议...原创 2018-07-28 19:01:15 · 420 阅读 · 0 评论