Spark Configuration(Spark配置)

Spark提供了三个位置来配置系统:

  • Spark Properties(Spark 属性)控制大多数 application 参数,并且可以使用 SparkConf 对象设置
  • 通过配置每个节点上的 conf/spark-env.sh 脚本,可以配置每台机器的环境变量,如 ip 地址
  • 日志可以通过 log4j.properties 配置

Spark 属性

Spark属性控制 application 绝大多数配置并可为每个 application 单独配置。这些属性可以被在传给你的 SparkContext 的 SparkConf上直接设置。SparkConf 允许你配置一些常用属性(如 master URL和application name),和通过 set() 方法设置键值对效果一样。你可以像下面例子一样初始化一个 application:

val conf = new SparkConf()
             .setMaster("local")
             .setAppName("CountingSheep")
             .set("spark.executor.memory", "1g")
val sc = new SparkContext(conf)

动态加载 Spark 属性

有些情况下,你可能想避免硬编码某些 SparkConf 配置。例如,如果你想用不同的 masters 或不同的内存数执行相同的程序。Spark 允许你简单地创建一个空得 conf。

val sc = new SparkContext(new SparkConf())

然后,你可以在运行时提供参数:

./bin/spark-submit --name "My app" --master local[4] --conf spark.shuffle.spill=false 
  --conf "spark.executor.extraJavaOptions=-XX:+PrintGCDetails -XX:+PrintGCTimeStamps" myApp.jar

Spark shell和 spark-submit 工具支持两种方式来动态加载配置。第一种是命令行选项,如上述的 --master。spark-submit 通过 --conf 标志可以设置任何 spark 属性。运行 ./bin/spark-submit --help 会列出这些选项的完整列表。

bin/spark-submit 也会读取并加载 conf/spark-defaults.conf。spark-defaults.conf 中每行包含一个由空格风格的key value对。如:

spark.master            spark://5.6.7.8:7077
spark.executor.memory   512m
spark.eventLog.enabled  true
spark.serializer        org.apache.spark.serializer.KryoSerializer

任何被指定为标记或在属性文件中的值将被传给 application 并和通过 SparkConf 指定的值合并。通过 SparkConf 直接指定的属性具有最高优先级,然后是传给 spark-submit 或 spark-shell 的标记,最后是 spark-defaults.conf 中的配置。

查看 Spark 属性

application 页面 http://driver:4040 在“Environment”标签页列出了 Spark 属性。这是一个非常有用的地方让你确认你是否正确配置了属性。只有通过 spark-defaults.conf 或 SparkConf 明确指定的属性才会出现在页面上。所有其他的配置,你可以假定使用了默认值。

可用属性

大部分属性有合理的默认值。以下为最常用的属性设置:

Application 属性
属性名默认值含义
spark.app.name(none)application名,将会出现在页面和日志中
spark.master(none)集群管理地址(YARN 模式下为 ResourceManager 地址)
spark.executor.memory512m每个 executor 进程使用的内存数,和 JVM 内存描述相同(如 512m、2g)
spark.serializerorg.apache.spark.serializer.JavaSerializer用来序列化通过网络传输或需要缓存的对象的类。默认使用 Java 序列化对于所有可序列化的 Java 对象有效,但非常慢。如果需要更快的,建议使用org.apache.spark.serializer.KryoSerializer并配置 Kryo 序列化。可以是任何 org.apache.spark.Serializer 的子类
spark.kryo.registrator(none)如果使用 Kryo 序列化,设置该类来向 Kryo 注册你的自定义类。该类需要继承 KryoRegistrator
spark.local.dir/tmp保存临时文件的目录。包括 map 的输出文件、保存在磁盘的 RDD。这应是一个速度很快的本地磁盘。可以是逗号分隔的多个不同的目录。注意,在 Spark 1.0 及之后的版本中,该值会被 SPARK_LOCAL_DIRS(Standalone, Mesos)或LOCAL_DIRS (YARN) 环境变量覆盖
spark.logConffalse当一个 SparkContext 启动,以 INFO 等级记录有效的 SparkConf

除这些,下面的属性也可以使用并在某些情况下有用。


运行时环境
属性名默认值含义
spark.executor.memory512m每个 executor 进程使用的内存数,和 JVM 内存描述相同(如 512m、2g)
spark.executor.extraJavaOptions(none)要传给 executors 的额外的 JVM 选项字符串。注意,使用该选项设置 Spark 属性或堆大小是非法的。Spark 属性应用 SparkConf 或 spark-defaults 设置。配置文件和 spark-submit 脚本配合使用。堆大小可由 spark.executor.memory 设置
spark.executor.extraClassPath(none)添加到 executors classpath的额外 classpath 条目。用户通常不需要设置该选项
spark.executor.extraLibraryPath(none)当启动 executor JVM的指定的库路径
spark.python.worker.memory512m每个 python workder 进程聚合时的内存数。如果聚合过程中使用的内存超过了这个值,会将数据刷入磁盘中
spark.executorEnv.[EnvironmentVariableName](none)添加由 EnvironmentVariableName 指定的环境变量至 executor 进程。用户可以指定多个该选型以设置多个环境变量
spark.mesos.executor.homedriver side SPARK_HOME

Shuffle 行为
属性名默认值含义
spark.shuffle.consolidateFilesfalse如果设为“true”,shuffle过程中会创建中间文件。创建少量文件可以提高整个文件系统在处理大量 reduce task 时的表现。当使用 ext4 或 xfs 文件系统时,建议使用 “true”。在 ext3 上,由于文件系统的局限性,该选项可能会降低8核以上机器的表现

未完待续~


Spark 用户界面
属性名默认值含义
spark.ui.port4040你的 application 的“仪表盘”端口,将显示内存和负载数据
spark.ui.retainedStages1000在垃圾回收前 Spark UI记住的 stages 的个数
spark.ui.killEnabledtrue是否允许从 web ui 上结束 stage 和对应的 job
spark.eventLog.enabledfalse是否记录 Spark 事件,对于在 application 完成后重建 web ui 是有用的
spark.eventLog.compressfalse是否压缩记录的事件,如果 spark.eventLog.enabled 为 true
spark.eventLog.dirfile:///tmp/spark-eventsSpark event 日志存放的基本目录,如果 spark.eventLog.enabled 为 true。在该基本目录中,Spark 为每个 application 创建一个子目录。用户会希望将这设为一个统一目录,比如一个 HDFS 目录以便于 history 文件可以被 history 服务读取

压缩和序列化

未完待续


Executor 行为
属性名默认值含义
spark.default.parallelism本地模式:本地机器的内核数;Mesos细粒度模式:8;其他:所有 executor 节点上的核心总数或2,取更大的一个5

未完待续


调度
属性名默认值含义
spark.task.cpus1每个 task 分配的核心数
spark.task.maxFailures4在放弃 job 前每个 task 最大失败次数。应大于等于 1。重试次数为该值减 1
spark.scheduler.modeFIFO提交至同一个 SparkContext 的 job 之间的调度模式。可以设为 FAIR 来使用公平分享代替一个接一个的 FIFO。对于多用户服务有用
spark.cores.max未设置当运行在 standalone 或 Mesos 模式时,为每个 application 请求的最大 CPU 核心数时跨越整个集群的,而不是来自某台机器。如果未设置,standalone 模式下为 spark.deploy.defaultCores 的值, Mesos 模式下为无穷大(即所有可用的核心)
spark.speculationfalse如果设为 “true”,表示一个或多个 task 在一个 stage 执行缓慢将被重启

环境变量

通过环境变量可以设置明确的 Spark 设置,即读取 conf/spark-env.sh 脚本。在 Standalone 和 Mesos 模式下,这个文件可以给机器具体的信息,如主机名。
注意,当安装完 Spark 之后 conf/spark-env.sh 并不存在,你需要拷贝 conf/spark-env.sh.template 来创建。确定你执行了拷贝动作。
以下变量可以在 spark-env.sh 中设定:

环境变量含义
JAVA_HOMEJava 安装路径(如果没有在你的 ‘PATH’ 中指定)
PYSPARK_PYTHON为 PySpark 准备的 Python 使用的可执行的二进制文件
SPARK_LOCAL_IP机器要绑定的 ip 地址
SPARK_PUBLIC_DNS你的 Spark 程序将要通知其他机器的主机名

由于 spark-env.sh 是一个 shell 脚本,选项可以以更编程化的方式设置。如,你也许会通过查找网络接口来计算 SPARK_LOCAL_IP。

日志配置

Spark 使用 log4j 记录日志。你可以通过在 conf 目录下添加一个 log4j.properties 来配置。一种可行的方式是从 log4j.properties.template 拷贝

### 回答1: CDH(Cloudera's Distribution for Hadoop)是Cloudera公司针对Hadoop生态系统进行的一系列软件包和工具的集成,其中包括Hive on Spark配置。 Hive是一个建立在Hadoop之上的数据仓库基础架构,它提供了类似于SQL的查询语言HiveQL,方便用户使用SQL语言对存储在Hadoop中的大型数据集进行查询和分析。Spark是一个快速、通用的数据处理引擎,具有内存计算的特性,能在内存中高效地处理大规模数据。 在CDH中配置Hive on Spark需要进行以下步骤: 1. 确保CDH集群已经正确安装和配置,并且已经启动了Hive服务和Spark服务。 2. 在CDH管理界面中,选择Hive服务,然后点击“配置”选项卡。 3. 在配置页面中,找到“Hive 服务”下的“Ancillary Service Configuration”部分。在“Spark”部分中,填写正确的Spark主节点地址和端口号。 4. 点击“保存并重启”以应用配置更改。 5. 在CDH管理界面中,选择Spark服务,然后点击“配置”选项卡。 6. 在配置页面中,找到“Spark 特定”的部分。在“Spark 实例模式”中选择“Standalone”,表示将使用独立的Spark集群。 7. 在“Spark 主节点地址”中填写正确的Spark主节点的地址。 8. 点击“保存并重启”以应用配置更改。 9. 配置完成后,可以使用HiveQL语句在Hive中使用Spark进行查询和分析数据。在Hive命令行或Hue界面中,编写需要的查询语句并执行。 通过以上步骤,就可以在CDH上成功配置Hive on Spark。这样就可以同时利用Hive和Spark的强大功能,实现对大规模数据的高效分析和处理。 ### 回答2: CDH配置Hive on Spark是指在CDH平台上配置使用Spark作为Hive的计算引擎。下面是具体的步骤: 1. 首先,确保已经在CDH平台上安装了Hive和Spark组件。 2. 在Hive的配置文件中,需要添加以下参数来启用Hive on Spark: hive.execution.engine = spark hive.spark.client.connect.timeout = 300s hive.spark.client.server.connect.timeout = 300s 3. 在Spark配置文件中,需要增加以下参数来支持Hive on Sparkspark.master = yarn-client spark.deploy.mode = client spark.submit.deployMode = client spark.yarn.queue = default spark.executor.instances = 10 spark.executor.memory = 4G spark.executor.cores = 2 spark.driver.memory = 4G 4. 然后,重启Hive和Spark的服务。 5. 运行Hive脚本或者Hive命令时,可以在Hive中使用"hive.execution.engine=spark"设置为Spark引擎,或者在命令行中使用"--engine=spark"参数。 配置完成后,Hive会将相应的作业提交给Spark来执行,利用Spark的分布式计算能力加速Hive查询的执行速度。需要注意的是,配置Hive on Spark需要确保CDH平台中的Hive和Spark是兼容的,并且调整Spark的资源配置以满足计算需求。 总之,通过CDH配置Hive on Spark可以充分发挥Spark的并行处理能力,提高Hive查询的执行效率和性能。 ### 回答3: CDH是一种大数据解决方案,用于配置Hive on Spark的步骤如下: 1. 首先,确保已安装CDH集群并启动了Hive和Spark组件。如果还没有安装,请按照CDH文档进行安装和配置。 2. 检查Hive和Spark的版本兼容性。Hive on Spark需要Hive和Spark版本之间的兼容性,查看CDH文档以了解哪些版本适用于您的集群。 3. 在Hive配置文件中启用Hive的Spark支持。打开Hive配置文件(hive-site.xml),设置hive.execution.engine为spark。 4. 配置Spark属性。在Spark配置文件(spark-defaults.conf)中,设置spark.master为yarn-client或yarn-cluster,这取决于您的CDH集群配置。还可以通过设置其他属性来优化Spark执行引擎的性能。 5. 启动Hive服务。重启Hive服务以使配置更改生效。您可以使用以下命令重新启动Hive服务: sudo service hive-server2 restart 6. 测试Hive on Spark。使用Hive命令行或其他Hive客户端,运行一些Hive查询并确认它们是否在Spark上执行。 配置Hive on Spark可以提供更好的性能和资源利用率。而且,使用Spark作为执行引擎还可以充分利用Spark提供的丰富的数据处理功能和API。通过使用CDH的Hive on Spark配置,您可以更好地处理和分析大规模的数据集。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值