安装Spark

2019-04-17  本文已影响0人  峰峰仔

Spark是什么

Spark是一个集群计算系统,可以在集群上部署和运行并行的应用,Spark初始是运行Scala应用,但是也支持Java,Python,R。
Spark不但可以作为独立的集群管理器,也可以使用Yarn或者Mesos的集群管理器。

安装之前的准备

  1. 安装和配置三节点的Hadoop集群,一个节点是master节点(包含HDFS NameNode和YARN ResourceManager)。另两个节点是slave节点(HDFS DataNode和YARN NodeManager),分别是node1和node2.
  2. 运行jps,确保HDFS和YARN正常运行。

下载和安装Spark

  1. 安装Spark到/opt目录下
  2. 配置SPARK_HOME环境变量到~/.bashrc
  3. 配置$SPARK_HOME/bin到PATH环境变量

集成Spark和Yarn

为了连接Yarn资源管理器,Spark必须知道Hadoop的配置文件,可以通过HADOOP_CONF_DIR环境变量来实现。

  1. 在~/.bashrc中添加如下内容
export HADOOP_CONF_DIR=$HADOOP_HOME/etct/hadoop
export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native:$LD_LIBRARY_PATH
  1. 重命名Spark的spark-defaults.conf.template
mv $SPARK_HOME/conf/spark-defaults.conf.template $SPARK_HOME/conf/spark-defaults.conf
  1. 编辑spark-defaults.conf
spark.master yarn

理解client和cluster模式

Spark job可以在Yarn中以两种模式运行,cluster模式和client模式,理解这两种模式的不同,对于使用合适的内存分配配置是非常重要的。
一个Spark job包含两部分,Spark Executors执行实际的任务,Spark Driver用来调度Executors。

配置内存分配

如果内存分配没有合理的配置,那么Spark容器会失败。对于小于4G内存的节点,默认的配置是不合适的,因为可能会触发交换和差的性能,甚至可能会导致初始化应用失败,由于内存的缺失。
在编辑Spark内存设置之前,一定要理解Yarn如何管理内存分配。这样才能更好的利用Yarn的能力。

给予Yarn容器最大允许的内存

如果请求的内存超过了允许的最大大限,那么Yarn将会拒绝容器的创建,Spark应用将不会开启。

  1. 在$HADOOP_CONF_DIR/yarn-site.xml中的yarn.scheduler.maximum-allocation-mb的值是决定单个容器允许的最大内存,以MB为单位。
  2. 确保接下来配置的Spark内存分配小于yarn.scheduler.maximum-allocation-mb的值。

在cluster模式下配置Spark Driver内存

在cluster模式下,Spark Driver运行在Yarn Application Master中。在初始化过程中,Spark请求的内存大小可以在spark-defaults.conf或者命令行配置。

spark.driver.memory 512m

命令行中的值会覆盖在spark-defaults.conf中的值

在client模式下,配置Spark Application Master的内存

在client模式下,Spark Driver不运行在集群上,上面的配置将会无效。一个Yarn Application Master需要被创建是为了调度Spark executor,你可以设置它的内存大小。
在client模式下,通过使用spark.yarn.am.memory参数来application master的内存大小。

配置Spark Executors的内存

Spark Executors的内存是基于在spark-defaults.conf中的两个参数决定的。

确保Executor请求的内存(包括overhead内存)小于Yarn最大允许的内存,否则Spark应用将不能初始化
例如:spark.executor.memory的值是1G,必要的内存大小是1024 + 384 = 1408MB。对于512MB内存来说,必要的内存大小是512+384=896MB。
为了设置executor内存为512MB,编辑spark-defaults.conf

spark.executor.memory 512m

如何提交Spark应用到Yarn集群上

使用spark-submit命令提交spark应用,spark安装目录包含样本应用,可以进行测试

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。

监控Spark应用

当你提交一个job时,Spark Driver会自动开启一个端口是4040的web UI,显示关于应用的信息,但是当执行完成时,web UI将不能再访问了。
Spark提供history server,收集来自于HDFS的应用日志,在一个web UI上显示。下面的步骤是开启在HDFS上的日志持久化.

  1. 编辑spark-defaults.conf文件
spark.eventLog.enabled  true
spark.eventLog.dir hdfs://node-master:9000/spark-logs
  1. 在HDFS上创建目录
hdfs dfs  -mkdir /spark-logs
  1. 在spark-defaults.conf文件中配置关于History Server的属性
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

你可能会使用不同的spark.history.fs.update.interval的值,如果配置的值比较高,将会增大应用实时的状态和History Server的延迟。如果使用比较小的值,将会增加HDFS上的I/O

  1. 运行History Server
$SPARK_HOME/sbin/start-history-server.sh
  1. 重复上面计算Pi的例子,将会在HDFS上形成日志
  2. 在浏览器上通过http://node-master:18080 访问

运行Spark Shell

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()
上一篇下一篇

猜你喜欢

热点阅读