本文共 1613 字,大约阅读时间需要 5 分钟。
在 Apache Spark 中,任何程序的执行都必须从 SparkContext 开始。SparkContext 的初始化需要一个 SparkConf 对象,该对象包含了 Spark 集群的各种配置参数。通过 SparkConf,我们可以指定集群的 master 地址、应用名称等关键信息,从而为 SparkContext 的运行提供必要的环境配置。
常见的 SparkConf 初始化方式如下:
val conf = new SparkConf().setMaster("master").setAppName("appName")val sc = new SparkContext(conf) 或者更简洁地:
val sc = new SparkContext("master", "appName") 需要注意的是,一旦 SparkConf 对象被传递给 Spark,就会被克隆,用户无法再对其进行修改。这意味着 SparkConf 的设置必须在初始化时就已经完成。
单元测试优化:在单元测试中,可以通过调用 SparkConf(false) 来跳过外部设置,获取相同的配置。
setMaster 和 setAppName 的作用:
setMaster("master") 用于指定 SparkContext 的 master 地址。setAppName("appName") 用于设置应用程序的显示名称。set 函数来修改配置参数。ConcurrentHashMap 的内部机制:SparkConf 使用了 ConcurrentHashMap 来存储配置参数。该数据结构采用锁分段技术,通过将数据分成多个段,每个段配有一把锁,从而在高并发环境下提高访问效率。
SparkSession 是 SQLContext 和 HiveContext 的综合体现,其核心功能是支持 Structured Data 的处理。以下是创建 SparkSession 的示例:
val sparkSession = SparkSession.builder .master("master") .appName("appName") .getOrCreate() 或者如果需要启用 Hive 支持:
val sparkSession = SparkSession.builder .master("master") .appName("appName") .enableHiveSupport() .getOrCreate() getOrCreate() 方法具有懒初始化的特点:如果已经有一个 SparkSession 存在,则直接返回它;如果不存在,则创建一个新的。这在多次初始化时非常有用。
以下是关于 SparkConf 的简单使用示例:
val conf = new SparkConf()conf.set("k1", "v1")val s1 = SparkSession.builder.config(conf).getOrCreate()val s2 = SparkSession.builder.config("k2", "v2").getOrCreate()return s1.conf.get("k1") == s2.conf.get("k2") 返回值为 true,这表明两个 SparkSession 的配置参数是相同的。
通过以上方法,我们可以轻松地配置并使用 SparkContext 和 SparkSession,充分发挥其强大功能。
转载地址:http://ylefk.baihongyu.com/