Spark是一种通用的集群计算系统。它可以在从单个节点到数千个分布式节点的集群上部署和运行并行应用程序。Spark最初设计用于运行Scala应用程序,但也支持Java,Python和R.
Spark可以作为独立的集群管理器运行,也可以利用Apache Hadoop YARN或Apache Mesos等专用集群管理框架。
hadoop
用户可以使用没有密码的SSH密钥访问所有群集节点。/home/hadoop/hadoop
。如果不是,请相应地调整示例中的路径。start-dfs.sh
start-yarn.sh
注意: 本指南是为非root用户编写的。需要提升权限的命令带有前缀
sudo
。如果您不熟悉该sudo
命令,请参阅“ 用户和组”指南。
Spark下载页面提供了Spark二进制文件。调整下面的每个命令以匹配正确的版本号。
node-master
以hadoop
用户身份登录,然后运行:cd /home/hadoop
wget https://d3kbcqa49mib13.cloudfront.net/spark-2.2.0-bin-hadoop2.7.tgz
tar -xvf spark-2.2.0-bin-hadoop2.7.tgz
mv spark-2.2.0-bin-hadoop2.7 spark
PATH
。编辑/home/hadoop/.profile
并添加以下行:
对于Debian / Ubuntu系统:
/home/hadoop/.profile1
PATH=/home/hadoop/spark/bin:$PATH对于RedHat / Fedora / CentOS系统:
/home/hadoop/.profile1
pathmunge /home/hadoop/spark/bin要与YARN资源管理器通信,Spark需要了解您的Hadoop配置。这是通过HADOOP_CONF_DIR
环境变量完成的。该SPARK_HOME
变量不是必需的,但在从命令行提交Spark作业时非常有用。
/home/hadoop/.profile
并添加以下行:
/home/hadoop/.profile1 2 3
export HADOOP_CONF_DIR=/home/hadoop/hadoop/etc/hadoop export SPARK_HOME=/home/hadoop/spark export LD_LIBRARY_PATH=/home/hadoop/hadoop/lib/native:$LD_LIBRARY_PATH$SPARK_HOME/conf/spark-defaults.conf
并设置spark.master
为yarn
:
$ SPARK_HOME / conf目录/火花defaults.conf1
spark.master yarn现在,Spark已准备好与您的YARN群集进行交互。
Spark作业可以在YARN上以两种模式运行:集群模式和客户端模式。了解两种模式之间的差异对于选择适当的内存分配配置以及按预期提交作业非常重要。
Spark作业由两部分组成:运行实际任务的Spark Executors和调度Executors的Spark Driver。
客户端模式非常适合交互式作业,但如果客户端停止,应用程序将失败。对于长时间运行的作业,群集模式更合适。
如果未正确配置内存分配,则在YARN容器中运行的Spark容器的分配可能会失败。对于RAM少于4G的节点,默认配置不充分,可能会触发交换和性能不佳,甚至由于内存不足导致应用程序初始化失败。
在编辑Spark内存设置之前,请务必了解Hadoop YARN如何管理内存分配,以便您的更改与YARN群集的限制兼容。
注意:有关管理YARN群集内存的更多详细信息,请参阅“ 安装和配置3节点Hadoop群集”指南的内存分配部分。
如果请求的内存高于允许的最大值,YARN将拒绝创建容器,并且您的Spark应用程序将无法启动。
yarn.scheduler.maximum-allocation-mb
in 的价值$HADOOP_CONF_DIR/yarn-site.xml
。这是单个容器的最大允许值(MB)。本指南将使用1536
for 的示例值yarn.scheduler.maximum-allocation-mb
。如果您的设置较低,请使用您的配置调整样本。
在群集模式下,Spark驱动程序在YARN Application Master中运行。Spark在初始化时请求的内存量可以在spark-defaults.conf
命令行中配置,也可以通过命令行配置。
从 spark-defaults.conf
spark.driver.memory
(此值默认为1G
)设置在群集模式下分配给Spark Driver的默认内存量。要将其设置为512MB
,请编辑该文件:
$ SPARK_HOME / conf目录/火花defaults.conf1
spark.driver.memory 512m从命令行
--driver-memory
参数指定请求的内存量spark-submit
。请参阅以下有关示例的应用程序提交的部分。
注意从命令行给出的值将覆盖已设置的值spark-defaults.conf
。在客户端模式下,Spark驱动程序不会在群集上运行,因此上述配置将不起作用。仍然需要创建YARN Application Master来安排Spark执行程序,并且可以设置其内存要求。
在客户端模式下设置分配给Application Master的内存量spark.yarn.am.memory
(默认为512M
)
$ SPARK_HOME / conf目录/火花defaults.conf
1 | spark.yarn.am.memory 512m |
---|
无法从命令行设置此值。
Spark Executors的内存分配基于以下两个参数计算$SPARK_HOME/conf/spark-defaults.conf
:
spark.executor.memory
:设置计算中使用的基本内存spark.yarn.executor.memoryOverhead
:被添加到基本内存中。它默认为基本内存的7%,最小值为384MB
注意:确保Executor请求的内存(包括开销内存)低于YARN容器的最大大小,否则Spark应用程序将不会初始化。
示例:对于spark.executor.memory
1Gb,所需内存为1024 + 384 = 1408MB。对于512MB,所需内存为512 + 384 = 896MB
要将执行程序内存设置为512MB
,请编辑$SPARK_HOME/conf/spark-defaults.conf
并添加以下行:
$ SPARK_HOME / conf目录/火花defaults.conf
1 | spark.executor.memory 512m |
---|
使用该spark-submit
命令提交应用程序。Spark安装包包含示例应用程序,例如Pi的并行计算,您可以运行它来练习启动Spark作业。
要运行示例Pi计算,请使用以下命令:
spark-submit --deploy-mode client \
--class org.apache.spark.examples.SparkPi \
$SPARK_HOME/examples/jars/spark-examples_2.11-2.2.0.jar 10
第一个参数,--deploy-mode
指定要使用的模式,client
或cluster
。
要在群集模式下运行相同的应用程序,请替换--deploy-mode client
为--deploy-mode cluster
。
提交作业时,Spark Driver会自动在端口上启动Web UI,4040
以显示有关应用程序的信息。但是,执行完成后,Web UI将被应用程序驱动程序解除,并且无法再访问。
Spark提供了一个历史记录服务器,它从HDFS收集应用程序日志并将其显示在持久Web UI中。以下步骤将在HDFS中启用日志持久性:
$SPARK_HOME/conf/spark-defaults.conf
并添加以下行以启用Spark作业以登录HDFS:
$ SPARK_HOME / conf目录/火花defaults.conf1 2
spark.eventLog.enabled true spark.eventLog.dir hdfs://node-master:9000/spark-logs$SPARK_HOME/conf/spark-defaults.conf
:
$ SPARK_HOME / conf目录/火花defaults.conf1 2 3 4
spark.history.provider org.apache.spark.deploy.history.FsHistoryProvider spark.history.fs.logDirectory hdfs://node-master:9000/spark-logs spark.history.fs.update.interval 10s spark.history.ui.port 18080您可能希望使用与默认值不同的更新间隔10s
。如果指定更大的间隔,则在历史记录服务器中看到的内容与应用程序的实时状态之间会有一些延迟。如果使用较短的间隔,则会增加HDFS的I / O.spark-submit
这将在HDFS中生成一些日志:Spark shell提供了一种检查和处理数据的交互方式。
Scala Spark API超出了本指南的范围。您可以在官方Apache Spark文档中找到官方文档。
既然您有一个正在运行的Spark集群,您可以:
有关此主题的其他信息,您可能需要参考以下资源。虽然提供这些是希望它们有用,但请注意,我们无法保证外部托管材料的准确性或及时性。
更多教程请前往腾讯云+社区学习更多知识。