zoukankan      html  css  js  c++  java
  • Spark 性能调优提高任务效率

    1. 资源调优

    ①    搭建Spark集群的时候要给Spark集群足够的资源(core,memory)

    在spark安装包的conf下spark-env.sh

            SPARK_WORKER_CORES     --worker节点的可用核数

                   SPARK_WORKER_MEMORY

            SPARK_WORKER_INSTANCE

     

    在提交Application的时候给Application分配更多的资源。

    提交命令选项:(在提交Application的时候使用选项)

            --executor-cores

                   --executor-memory

                   --total-executor-cores

           

    配置信息:(在Application的代码中设置,在Spark-default.conf中设置)

           spark.executor.cores

                   spark.executor.memory

            spark.max.cores

     

    1. 并行度调优

    原则:一个core一般分配2~3个task,每一个task一般处理1G数据(task的复杂度类似wc)

    ①     提高并行度的方式:

    1) .如果读取的数据在HDFS上,降低block块的大小

    2) .sc.textFile(path,numPartitions)

    3) sc.parallelize(list,numPartitions) 一般用于测试

    4) coalesce、repartition可以提高RDD的分区数。

    5) 配置信息:

    spark.default.parallelism  not set (默认executor core的总个数)

    spark.sql.shuffle.partitions 200

    6) 自定义分区器

     

     

    1. 代码调优

    ①     避免创建重复的RDD

    val rdd1 = sc.textFile(“xxx”)

    val rdd2 = sc.textFile(“xxx”)

    在执行效率上没有区别,但是代码乱。

    ②     在其他的job中对于重复使用的RDD要使用持久化算子

    cache:

           MEMORY_ONLY

    persist:

           MEMORY_ONLY

           MEMORY_ONLY_SER

           MEMORY_AND_DISK_SER

    一般不要选择带有_2的持久化级别。

    checkpoint:

    ①    如果一个RDD的计算时间比较长或者计算起来比较复杂,一般将这个RDD的计算结果保存到HDFS上,这样数据会更加安全。

    ②    如果一个RDD的依赖关系非常长,也会使用checkpoint,会切断依赖关系,提高容错的效率。

    ③    尽量使用广播变量

    使用广播变量可以大大的降低集群中变量的副本数。

    不使用广播变量:变量的副本数和task数一致。

    使用广播变量:变量的副本数与Executor数一致。

    广播变量最大可以是多大?

    ExecutorMemory*60%*90%*80%

  • 相关阅读:
    mysql中txt的导入及导出
    邮箱手机正则
    用yum安装完mysql后没有mysqld的问题
    利用php在图片上写字(中英文)
    修改MYSQL密码及权限
    mysql 索引!
    MySQL对表的复制,修改及删除
    防止表单重复提交!
    Linux学习篇SVN命令详解
    Linux 安装PHP配置参数
  • 原文地址:https://www.cnblogs.com/eric666666/p/11288829.html
Copyright © 2011-2022 走看看