一、spark开发调优

1.避免重复RDD

  • 原则一:避免创建重复的RDD

    • 对同一份数据,只应该创建一个RDD,不能创建多个RDD来代表同一份数据
    • 极大浪费内存

2.尽可能复用RDD

  • 原则二:尽可能复用同一个RDD

    • 比如:一个RDD数据格式是key-value,另一个是单独value类型,这两个RDD的value部分完
      全一样,这样可以复用达到减少算子执行次数

3.多次使用的RDD持久化

  • 原则三:对多次使用的RDD进行持久化处理

    • 每次对一个RDD执行一个算子操作时,都会重新从源头处理计算一遍,计算出那个RDD出来,然后进一步操作,这种方式性能很差
    • 对多次使用的RDD进行持久化,将RDD的数据保存在内存或磁盘中,避免重复劳动
    • 借助cache()和persist()方法

  • 原则三:对多次使用的RDD进行持久化处理

    • persist持久化级别

4.避免shuffle

  • 原则四:避免使用shuffle类算子

    • 在spark作业运行过程中,最消耗性能的地方就是shuffle过程
    • 将分布在集群中多个节点上的同一个key,拉取到同一个节点上,进行聚合和join处理,比如
      groupByKey、reduceByKey、join等算子,都会触发shuffle

  • Broadcast+map的join操作,不会导致shuffle操作,但前提适合RDD数据量较少时使用

5.map-side预聚合

  • 原则五:使用map-side预聚合的shuffle操作

    • 一定要使用shuffle的,无法用map类算子替代的,那么尽量使用map-site预聚合的算子
    • 思想类似MapReduce中的Combiner
    • 可能的情况下使用reduceByKey或aggregateByKey算子替代groupByKey算子,因为
      reduceByKey或aggregateByKey算子会使用用户自定义的函数对每个节点本地相同的key进行
      预聚合,而groupByKey算子不会预聚合

6.使用Kryo优化序列化性能

  • 原则六:使用Kryo优化序列化性能

    • Kryo是一个序列化类库,来优化序列化和反序列化性能
    • Spark默认使用Java序列化机制(ObjectOutputStream/ ObjectInputStream API)进行序列化和反序列化
    • Spark支持使用Kryo序列化库,性能比Java序列化库高很多,10倍左右

7.数据倾斜解决方案

1、提高shuffle操作的并行度。
2、使用随机数前缀进行Join操作。对key增加随机数。
3、将reduce join转为map join。
4、过滤少数导致数据倾斜的 key。如null值数据。
5、使用hive预处理数据。
6、使用两阶段聚合操作。
7、单独处理倾斜的key
8、rangepartioner+key转换处理

二、spark开发环境准备

1.提交spark任务准备:如开发spark_wordcount

(1)SBT编译器安装

安装包: sbt-0.13.15.tgz

(2)拷贝spark-assembly-1.6.0-hadoop2.6.0.jar

  • 创建文件
[root@master spark_test]# mkdir -p spark_wordcount/lib
[root@master spark_test]# mkdir -p spark_wordcount/project
[root@master spark_test]# mkdir -p spark_wordcount/src
[root@master spark_test]# mkdir -p spark_wordcount/target
[root@master spark_test]# mkdir -p spark_wordcount/src/main/scala
  • 拷贝spark-assembly-1.6.0-hadoop2.6.0.jar到spark_wordcount/lib目录下

(3)编译

  • 写完code后,执行编译:

    • ]# sbt compile

(4)打包

  • 执行打包命令:

    • ]# sbt package

(5)提交任务

  • spark-submit命令

    • yarn cluster:调试后在集群跑任务,适用于生产模式
    • yarn client:适用于交互和调试
      • Driver在任务提交机上运行
      • AM(ApplicationMaster)只负责向RM(ResourceManager)申请executor需要的资源。
      • 基于yarn时,spark-shell和pyspark必须要使用yarn-client模式。
    • yarn cluster和yarn client唯一的区别:cluster模式是AM在RM指定的NM上运行,哪个空闲哪个概率大;client模式是AM运行在提交任务的节点上。
    • 示例
  • spark进程
    • Yarn(通用)

      • Master/Slave结构

        • RM:全局资源管理器,负责系统的资源管理和分配
        • NM:每个节点上的资源和任务管理器
        • AM:每个应用程序都有一个,负责任务调度和监视,并与RM调度器协商为任务获取资源
    • Standalone(Spark自带)
      • Master/Slave结构

        • Master:类似Yarn中的RM
        • Worker:类似Yarn中的NM

(6)杀死任务

  • 另外:杀死一个任务的方法:

    • ]# yarn application -kill application_1491925179093_0012

2.使用IDEA配置spark运行环境运行WordCount

(1)安装scala插件、添加scala sdk

  • 安装scala插件

    • file-setting-plugins搜索scala安装
  • 添加scala sdk

(2)配置SDK、JDK

  • 添加jdk:file-project Structure-Project SDK

    新建maven项目
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.adihs</groupId><artifactId>wordcount_spark</artifactId><version>1.0-SNAPSHOT</version><properties><scala.version>2.11</scala.version><spark.version>2.0.2</spark.version></properties><dependencies><dependency><groupId>org.apache.spark</groupId><artifactId>spark-core_2.11</artifactId><version>${spark.version}</version></dependency><dependency><groupId>org.apache.spark</groupId><artifactId>spark-streaming_2.11</artifactId><version>${spark.version}</version></dependency><dependency><groupId>org.apache.spark</groupId><artifactId>spark-sql_2.11</artifactId><version>${spark.version}</version></dependency><dependency><groupId>org.apache.spark</groupId><artifactId>spark-hive_2.11</artifactId><version>${spark.version}</version></dependency><dependency><groupId>org.apache.spark</groupId><artifactId>spark-mllib_2.11</artifactId><version>${spark.version}</version></dependency></dependencies>
</project>

三、其他博客

1.sparksql操作hive

spark开发及调优相关推荐

  1. Spark开发性能调优

    Spark开发性能调优 标签(空格分隔): Spark –Write By Vin 1. 分配资源调优 Spark性能调优的王道就是分配资源,即增加和分配更多的资源对性能速度的提升是显而易见的,基本上 ...

  2. Spark系列之Spark的资源调优

    title: Spark系列 第十一章 Spark的资源调优 11.1 概述 ​ 在开发完Spark作业之后,就该为作业配置合适的资源了.Spark的资源参数,基本都可以在sparksubmit命令中 ...

  3. spark 资源参数调优

    资源参数调优 了解完了Spark作业运行的基本原理之后,对资源相关的参数就容易理解了.所谓的Spark资源参数调优,其实主要就是对Spark运行过程中各个使用资源的地方,通过调节各种参数,来优化资源使 ...

  4. Apache Spark Jobs 性能调优(二)

    Apache Spark Jobs 性能调优(二) 调试资源分配 调试并发 压缩你的数据结构 数据格式 在这篇文章中,首先完成在 Part I 中提到的一些东西.作者将尽量覆盖到影响 Spark 程序 ...

  5. Apache Spark Jobs 性能调优(一)

    Apache Spark Jobs 性能调优(一) Spark 是如何执行程序的 选择正确的 Operator 什么时候不发生 Shuffle 什么情况下 Shuffle 越多越好 二次排序 结论 当 ...

  6. Spark的性能调优

    下面这些关于Spark的性能调优项,有的是来自官方的,有的是来自别的的工程师,有的则是我自己总结的. 基本概念和原则 首先,要搞清楚Spark的几个基本概念和原则,否则系统的性能调优无从谈起: 每一台 ...

  7. Spark RDD JOIN 调优

    Spark RDD JOIN 调优 一. 大表关联小表 1. 小表数据量非常小时 一般当副表的数据比较小时,可以考虑将这部分的小表数据直接加载到内存中,如加工成为一个Map 结构的对象,在使用的时候将 ...

  8. Spark+Alluxio性能调优十大技巧

    戳蓝字"CSDN云计算"关注我们哦! 由于统一访问对象存储(如S3)和HDFS数据的场景的出现和普及,Apache Spark结合Alluxio的大数据栈越来越受欢迎.此外,越来越 ...

  9. Apache Spark Jobs 性能调优

    当你开始编写 Apache Spark 代码或者浏览公开的 API 的时候,你会遇到各种各样术语,比如transformation,action,RDD(resilient distributed d ...

最新文章

  1. 用什么服务器开发小程序,开发小程序用什么服务器系统
  2. GitHub:TensorFlow、PyTorch最全资料集锦
  3. 【Groovy基础系列】 Groovy运算符
  4. LinuxC下获取UDP包中的路由目的IP地址和头标识目的地址
  5. Android技术博文
  6. NIO和BIO如何影响应用程序的设计-设置处理线程数
  7. android jxl.jar 使用,使用jxl.jar在Android中操作Excel表格——重中之重——对隐藏表的处理...
  8. c++设置一个二维字符组初值_C语言 | 统计一段话中的字符
  9. 雷军:哈哈哈哈哈哈 网友:小米9要来了!
  10. 遍历字段_以字段覆盖标准指导的高效测试生成技术
  11. MTK6589百度云ROM移植教程
  12. web day2 作业
  13. 毕业设计 单片机心率检测器设计与实现 - stm32
  14. Debian - Add the checking mail notification - mutt
  15. Matlab填充多边形
  16. 导航栏保持居中并使用swiper作为轮播图进行背景轮播背景
  17. AI人工智能图片无损放大软件,这软件神了
  18. C语言编程题—结构体—设计程序,已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。请编写函数 fun:找出成绩最低的学生记录,通过形参返回主函数(规定只有一个最低分
  19. Linux 下的网卡配置文件解析
  20. MPEG DASH MPD文件字段解释

热门文章

  1. 浅谈 Facade 模式
  2. spo2数据集_氧仪主要测量指标分别为脉率、血氧饱和度、灌注指数(PI)
  3. mysql主从复制(一):一主多从
  4. 项目经理需要的基本技能
  5. 计算机里没有四款小游戏,电脑里一些隐藏在程序里有趣的小游戏
  6. 鸿蒙os适配机vivo型,originos系统适配机型有哪些
  7. 【日常】pytorch编写“自创”的MRR损失函数
  8. Blackbox_exporter概述
  9. PHP:【微信小程序】初识微信小程序,微信小程序配置
  10. 31 个Python代码实现的常用功能(附案例源码)