Spark的广播变量机制

Spark广播变量

什么是广播变量?

在同一个Execute共享同一份计算逻辑的变量

广播变量使用场景

我现在要在在这些内容中过滤java和object-c


过滤内容
  • 使用广播变量过滤代码逻辑:
package com.chenzhipeng.spark.examples01;

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.Function;
import org.apache.spark.broadcast.Broadcast;

import java.util.ArrayList;
import java.util.List;

/**
 * <p>Title:BroadcastMain</p>
 * <p>Description:广播变量</p>
 * @version V1.0
 * @author ZhiPeng_Chen
 * @date: 2017/12/23
 */
public class BroadcastMain {

    public static void main(String[] args) {

        SparkConf sparkConf = new SparkConf();

        sparkConf.setMaster("local").setAppName("BroadcastMain");

        JavaSparkContext context = new JavaSparkContext(sparkConf);

        JavaRDD<String> rdd = context.textFile("examples-01/src/main/resources/names");

        //添加过滤的信息
        List list = new ArrayList<String>();
        list.add("java");
        list.add("object-c");

        //使用广播变量
       final Broadcast<List> broadcast = context.broadcast(list);

        JavaRDD<String> filter = rdd.filter(new Function<String, Boolean>() {

            private static final long serialVersionUID = 1L;

            @Override
            public Boolean call(String v1) throws Exception {
                //过滤集合中的内容
                return !broadcast.value().contains(v1);

            }
        });

        //触发执行后的过滤后结果
        List<String> collect = filter.collect();

        for (String str : collect) {
            System.out.println(str);
        }

        context.close();
        context.stop();

    }

}

执行结果:


过滤后结果

为什么要使用广播变量?

主要用于节约内存的开销。

Driver每次分发任务的时候会把task和计算逻辑的变量发送给Executor,不是使用广播变量会有多份的变量副本。这样会导致消耗大量的内存导致严重的后果。

  • 不使用广播变量:
不使用广播变量
  • 使用广播变量:
使用广播变量

总结

如果不使用广播变量,task的个数越多越消耗性能,使用广播变量Driver端不管分发有多少个task在同一个Executor只享用同一份变量。

使用注意事项

  • 广播变量在Driver端定义
  • 广播变量在Execoutor只能读取不能修改
  • 广播变量的值只能在Driver端修改
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spark的性能调优实际上是由很多部分组成的,不是调节几个参数就可以立竿见影提升作业性能的。我们需要根据不同的业务...
    东皇Amrzs阅读 5,525评论 0 17
  • 1 前言 在大数据计算领域,Spark已经成为了越来越流行、越来越受欢迎的计算平台之一。Spark的功能涵盖了大数...
    wisfern阅读 7,042评论 3 39
  • Broadcast 顾名思义,broadcast 就是将数据从一个节点发送到其他各个节点上去。这样的场景很多,比如...
    Albert陈凯阅读 22,818评论 7 10
  • 1 数据倾斜调优 1.1 调优概述 有的时候,我们可能会遇到大数据计算中一个最棘手的问题——数据倾斜,此时Spar...
    wisfern阅读 7,933评论 0 23
  • 调优之前是将功能实现...然后算法优化,设计优化,再是spark调优!,需得一步一步来,不得直接越过,直接调优! ...
    终生学习丶阅读 10,861评论 0 12