前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在Hadoop YARN群集之上安装,配置和运行Spark

在Hadoop YARN群集之上安装,配置和运行Spark

作者头像
Techeek
发布2018-09-19 15:43:44
3.5K0
发布2018-09-19 15:43:44
举报
文章被收录于专栏:云计算云计算云计算

什么是Spark?

Spark是一种通用的集群计算系统。它可以在从单个节点到数千个分布式节点的集群上部署和运行并行应用程序。Spark最初设计用于运行Scala应用程序,但也支持Java,Python和R.

Spark可以作为独立的集群管理器运行,也可以利用Apache Hadoop YARNApache Mesos等专用集群管理框架。

准备

  • 按照我们的指南,了解如何安装和配置三节点Hadoop集群以设置YARN集群。主节点(HDFS NameNode和YARN ResourceManager)称为节点主节点,从节点(HDFS DataNode和YARN NodeManager)称为node1node2。 除非另有说明,否则从node-master运行本指南中的命令。
  • 确保您的hadoop用户可以使用没有密码的SSH密钥访问所有群集节点。
  • 请注意Hadoop安装的路径。本指南假定它已安装/home/hadoop/hadoop。如果不是,请相应地调整示例中的路径。
  • jps在每个节点上运行以确认HDFS和YARN正在运行。如果不是,请通过以下方式启动服务:
start-dfs.sh 
start-yarn.sh

注意: 本指南是为非root用户编写的。需要提升权限的命令带有前缀sudo。如果您不熟悉该sudo命令,请参阅“ 用户和组”指南。

下载并安装Spark Binaries

Spark下载页面提供了Spark二进制文件。调整下面的每个命令以匹配正确的版本号。

  • 从Spark下载页面获取下载URL,下载并解压缩。 对于带有Hadoop 2.7或更高版本的Spark 2.2.0,node-masterhadoop用户身份登录,然后运行:

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

  • 将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

将Spark与YARN 集成

要与YARN资源管理器通信,Spark需要了解您的Hadoop配置。这是通过HADOOP_CONF_DIR环境变量完成的。该SPARK_HOME变量不是必需的,但在从命令行提交Spark作业时非常有用。

  1. 编辑hadoop用户配置文件/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
  2. 通过注销并再次登录来重新启动会话。
  3. 重命名spark默认模板配置文件: mv $SPARK_HOME/conf/spark-defaults.conf.template $SPARK_HOME/conf/spark-defaults.conf
  4. 编辑$SPARK_HOME/conf/spark-defaults.conf并设置spark.masteryarn: $ SPARK_HOME / conf目录/火花defaults.conf1 spark.master yarn

现在,Spark已准备好与您的YARN群集进行交互。

了解客户端和群集模式

Spark作业可以在YARN上以两种模式运行:集群模式和客户端模式。了解两种模式之间的差异对于选择适当的内存分配配置以及按预期提交作业非常重要。

Spark作业由两部分组成:运行实际任务的Spark Executors和调度Executors的Spark Driver。

  • 集群模式:一切都在集群内部运行。您可以通过笔记本电脑开始工作,即使关闭计算机,作业也会继续运行。在此模式下,Spark驱动程序封装在YARN Application Master中。
  • 客户端模式Spark驱动程序在客户端上运行,例如您的笔记本电脑。如果客户端关闭,则作业失败。Spark Executors仍然在集群上运行,为了安排一切,创建了一个小的YARN Application Master。

客户端模式非常适合交互式作业,但如果客户端停止,应用程序将失败。对于长时间运行的作业,群集模式更合适。

配置内存分配

如果未正确配置内存分配,则在YARN容器中运行的Spark容器的分配可能会失败。对于RAM少于4G的节点,默认配置不充分,可能会触发交换和性能不佳,甚至由于内存不足导致应用程序初始化失败。

在编辑Spark内存设置之前,请务必了解Hadoop YARN如何管理内存分配,以便您的更改与YARN群集的限制兼容。

注意:有关管理YARN群集内存的更多详细信息,请参阅“ 安装和配置3节点Hadoop群集”指南的内存分配部分。

为您的YARN容器提供最大允许内存

如果请求的内存高于允许的最大值,YARN将拒绝创建容器,并且您的Spark应用程序将无法启动。

  1. 获得yarn.scheduler.maximum-allocation-mbin 的价值$HADOOP_CONF_DIR/yarn-site.xml。这是单个容器的最大允许值(MB)。
  2. 确保在以下部分中配置的Spark内存分配值低于最大值。

本指南将使用1536for 的示例值yarn.scheduler.maximum-allocation-mb。如果您的设置较低,请使用您的配置调整样本。

在群集模式配置Spark驱动程序内存分配

在群集模式下,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应用程序主内存分配

在客户端模式下,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 Executors的内存分配基于以下两个参数计算$SPARK_HOME/conf/spark-defaults.conf

  • spark.executor.memory:设置计算中使用的基本内存
  • spark.yarn.executor.memoryOverhead:被添加到基本内存中。它默认为基本内存的7%,最小值为384MB

注意:确保Executor请求的内存(包括开销内存)低于YARN容器的最大大小,否则Spark应用程序将不会初始化。

示例:对于spark.executor.memory1Gb,所需内存为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应用程序提交到YARN群集

使用该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指定要使用的模式,clientcluster

要在群集模式下运行相同的应用程序,请替换--deploy-mode client--deploy-mode cluster

监控您的Spark应用程序

提交作业时,Spark Driver会自动在端口上启动Web UI,4040以显示有关应用程序的信息。但是,执行完成后,Web UI将被应用程序驱动程序解除,并且无法再访问。

Spark提供了一个历史记录服务器,它从HDFS收集应用程序日志并将其显示在持久Web UI中。以下步骤将在HDFS中启用日志持久性:

  1. 编辑$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
  2. 在HDFS中创建日志目录: hdfs dfs -mkdir /spark-logs
  3. 配置History Server相关属性$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.
  4. 运行历史记录服务器: $SPARK_HOME/sbin/start-history-server.sh
  5. 重复上一节中的步骤以启动作业,spark-submit这将在HDFS中生成一些日志:
  6. 通过在Web浏览器中导航到http:// node-master:18080来访问History Server :

运行Spark Shell

Spark shell提供了一种检查和处理数据的交互方式。

  1. 将一些数据放入HDFS进行分析。此示例使用Gutenberg项目中的Alice In Wonderland文本: cd /home/hadoop wget -O alice.txt https://www.gutenberg.org/files/11/11-0.txt hdfs dfs -mkdir inputs hdfs dfs -put alice.txt inputs
  2. 启动Spark shell: spark-shell var input = spark.read.textFile("inputs/alice.txt") // Count the number of non blank lines input.filter(line => line.length()>0).count()

Scala Spark API超出了本指南的范围。您可以在官方Apache Spark文档中找到官方文档

接下来做什么?

既然您有一个正在运行的Spark集群,您可以:

更多信息

有关此主题的其他信息,您可能需要参考以下资源。虽然提供这些是希望它们有用,但请注意,我们无法保证外部托管材料的准确性或及时性。

更多教程请前往腾讯云+社区学习更多知识。


参考文献:《https://www.linode.com/docs/databases/hadoop/install-configure-run-spark-on-top-of-hadoop-yarn-cluster/

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是Spark?
  • 准备
  • 下载并安装Spark Binaries
  • 将Spark与YARN 集成
  • 了解客户端和群集模式
  • 配置内存分配
    • 为您的YARN容器提供最大允许内存
      • 在群集模式配置Spark驱动程序内存分配
        • 在客户端模式配置Spark应用程序主内存分配
          • 配置Spark Executors的内存分配
          • 如何将Spark应用程序提交到YARN群集
          • 监控您的Spark应用程序
          • 运行Spark Shell
          • 接下来做什么?
          • 更多信息
          相关产品与服务
          容器服务
          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档