《Spark与Hadoop大数据分析》一一3.4 Spark 应用程序

    xiaoxiao2023-06-20  174

    本节书摘来自华章计算机《Spark与Hadoop大数据分析》一书中的第3章,第3.4节,作者:文卡特·安卡姆(Venkat Ankam) 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

    3.4 Spark 应用程序

    让我们来了解 Spark Shell 和 Spark 应用程序之间的区别,以及如何创建和提交它们。3.4.1 Spark Shell 和 Spark 应用程序Spark 让你可以通过一个简单的、专门用于执行 Scala、Python、R 和 SQL 代码的 Spark shell 访问数据集。用户探索数据并不需要创建一个完整的应用程序。他们可以用命令开始探索数据,这些命令以后可以转换为程序。这种方式提供了更高的开发生产效率。Spark 应用程序则是使用 spark-submit 命令提交的带有 SparkContext 的完整程序。Scala 程序通常使用 Scala IDE 或 IntelliJ IDEA 编写,并用 SBT 进行编译。Java 程序通常在 Eclipse 中编写,用 Maven 进行编译。Python 和 R 程序可以在任何文本编辑器中编写,也可以使用 Eclipse 等 IDE。一旦编写好 Scala 和 Java 程序,它们会被编译并用 spark-submit 命令执行,如下所示。由于 Python 和 R 是解释型语言,它们是使用 spark-submit 命令直接执行的。因为 Spark 2.0 是用 scala 2.11 构建的,因此,用 Scala 构建 Spark 应用程序就需要用到 scala 2.11。3.4.2 创建 Spark 环境任何 Spark 程序的起点都是创建一个 Spark 环境,它提供了一个到 Spark API 的入口。要设置配置属性,需要把一个 SparkConf 对象传递到 SparkContext,如下面的 Python 代码所示:

    3.4.3 SparkConf SparkConf 是 Spark 中的主要配置机制,创建新的 SparkContext 时需要一个它的实例。SparkConf 实例包含的是一些字符串的键/值对,对应了用户需要覆盖默认值的那些配置选项。SparkConf 设置可以被硬编码到应用程序代码中,从命令行传递,或从配置文件传递,如以下代码所示:

    与具体应用程序相关联的那个 SparkConf 一旦传递给了 SparkContext 构造函数,它就是不可变的。这意味着所有配置的决定必须在实例化 SparkContext 之前做出。3.4.4 SparkSubmit spark-submit 脚本用于在具有任何集群资源管理器的集群上启动 Spark 应用程序。SparkSubmit 允许动态设置配置,然后在应用程序启动时(当构建新的 SparkConf 时)注入到环境中。如果使用 SparkSubmit,用户的应用程序可以只构造一个“空”的 SparkConf,并将其直接传递给 SparkContext 构造函数。SparkSubmit 工具为最常见的 Spark 配置参数提供了内置标志(flag),还提供了一个通用的 --conf 标志,它可以接受任何 Spark 配置值,如下所示:

    在有多个配置参数的情况下,可以将它们全部放在一个文件中,并利用 --properties-file 参数把该文件传递给应用程序:

    --jars 选项里包含的应用程序依赖 JAR 包会自动发送到工作机节点。对于 Python 而言,等效的 --py-files 选项可用于将 .egg、.zip 和 .py 库分发到执行进程。注意,这些 JAR 包和库文件会被复制到执行进程节点上每个 SparkContext 的工作目录中。在创建 JAR 包时,最好把所有代码依赖都添加到一个 JAR 包里。这可以在 Maven 或 SBT 中轻松完成。要获取 spark-submit 的完整选项列表,请使用以下命令:

    3.4.5 Spark 配置项的优先顺序Spark 配置优先顺序,从高到低,如下所示:(1)在用户代码中用 SparkConf 对象上的 set() 函数显式声明的配置。(2)传递给 spark-submit 或 spark-shell 的标志。(3)在 spark-defaults.conf 属性文件中的值。(4)Spark 的默认值。3.4.6 重要的应用程序配置 用于提交应用程序的一些重要配置参数如下表所示:

    最新回复(0)