spark验证部署和_Spark部署实操手册

本文详细介绍了Spark在Standalone和Yarn模式下的部署步骤,包括配置文件修改、分发、启动等。对于Standalone模式,重点讲述了Master和Slave的设置,以及如何解决“JAVA_HOME not set”问题。在Yarn模式下,讲解了客户端和集群模式的区别,配置Yarn和Spark的环境,以及如何查看日志。此外,还提到了Spark HistoryServer的配置和Master的高可用性设置。
摘要由CSDN通过智能技术生成

1. Standalone模式

1.1 概述

使用Standalone需要构建一个完整的Master+Slaves的Spark集群,分布式部署,资源管理和任务监控都是依赖Spark自带架构实现。

1.2 安装使用

1)进入spark安装目录下的conf文件夹

[centos@hadoop102 module]$ cd spark/conf/

2)修改配置文件名称

[centos@hadoop102 conf]$ mv slaves.template slaves

[centos@hadoop102 conf]$ mv spark-env.sh.template spark-env.sh

3)修改slave文件,添加work节点

[centos@hadoop102 conf]$ vim slaves

hadoop102

hadoop103

hadoop104

4)修改spark-env.sh文件,添加如下配置

[centos@hadoop102 conf]$ vim spark-env.sh

SPARK_MASTER_HOST=hadoop102

SPARK_MASTER_PORT=7077

5)分发spark包

[centos@hadoop102 module]$ xsync spark/

6)启动

[centos@hadoop102 spark]$ sbin/start-all.sh

网页查看: hadoop102:8080

注意:如果遇到 “JAVA_HOME not set” 异常,可以在sbin目录下的spark-config.sh 文件中加入如下配置

export JAVA_HOME=XXXX

2. Yarn模式

2.1 概述

Spark客户端直接连接Yarn,不需要额外构建Spark集群。有yarn-client和yarn-cluster两种模式,主要区别在于:Driver程序的运行节点。

yarn-client:Driver程序运行在客户端,适用于交互、调试,希望立即看到app的输出。

yarn-cluster:Driver程序运行在由RM(ResourceManager)启动的AP(APPMaster)适用于生产环境。

2.1 安装使用

1)修改hadoop配置文件yarn-site.xml,添加如下内容:

[centos@hadoop102 hadoop]$ vi yarn-site.xml

yarn.nodemanager.pmem-check-enabled

false

yarn.nodemanager.vmem-check-enabled

false

2)修改spark-env.sh,添加如下配置

[centos@hadoop102 conf]$ vi spark-env.sh

YARN_CONF_DIR=/opt/module/hadoop-2.7.2/etc/hadoop

3)将以下文件分发同步到hadoop103和hadoop104上

1. /opt/module/hadoop-2.7.2/etc/hadoop/yarn-site.xml

2. spark-env.sh

4)执行一个示例程序

[centos@hadoop102 spark]$ bin/spark-submit \

--class org.apache.spark.examples.SparkPi \

--master yarn \

--deploy-mode client \

./examples/jars/spark-examples_2.11-2.1.1.jar \

100

注意:在提交任务之前需启动HDFS以及YARN集群。

2.2 日志查看

1)修改配置文件spark-defaults.conf

添加如下内容:

spark.yarn.historyServer.address=hadoop102:18080

spark.history.ui.port=18080

2)重启spark历史服务

[centos@hadoop102 spark]$ sbin/stop-history-server.sh

[centos@hadoop102 spark]$ sbin/start-history-server.sh

3)提交任务到Yarn执行

[centos@hadoop102 spark]$ bin/spark-submit \

--class org.apache.spark.examples.SparkPi \

--master yarn \

--deploy-mode client \

./examples/jars/spark-examples_2.11-2.1.1.jar \

100

4)Web页面查看日志

3.配置HistoryServer

Ø 临时配置,对本次提交的应用程序起作用

./spark-shell --master spark://node1:7077

--name myapp1

--conf spark.eventLog.enabled=true

--conf spark.eventLog.dir=hdfs://node1:9000/spark/test

停止程序,在Web Ui中Completed Applications对应的ApplicationID中能查看history。

Ø spark-default.conf配置文件中配置HistoryServer,对所有提交的Application都起作用

在客户端节点,进入../spark-2.3.4/conf/ spark-defaults.conf最后加入

//开启记录事件日志的功能

spark.eventLog.enabled true

//设置事件日志存储的目录

spark.eventLog.dir hdfs://node1:9000/spark/test

//设置HistoryServer加载事件日志的位置

spark.history.fs.logDirectory hdfs://node1:9000/spark/test

//日志优化选项,压缩日志

spark.eventLog.compress true

启动HistoryServer

./start-history-server.sh

效果展示

4. Master HA

4.1 Master的高可用原理

Standalone集群只有一个Master,如果Master挂了就无法提交应用程序,需要给Master进行高可用配置,Master的高可用可以使用fileSystem(文件系统)和zookeeper(分布式协调服务)。

fileSystem只有存储功能,可以存储Master的元数据信息,用fileSystem搭建的Master高可用,在Master失败时,需要我们手动启动另外的备用Master,这种方式不推荐使用。

zookeeper有选举和存储功能,可以存储Master的元素据信息,使用zookeeper搭建的Master高可用,当Master挂掉时,备用的Master会自动切换,推荐使用这种方式搭建Master的HA。

4.2 Master高可用搭建

1)在Spark Master节点上配置主Master,配置spark-env.sh

export SPARK_DAEMON_JAVA_OPTS="

-Dspark.deploy.recoveryMode=ZOOKEEPER

-Dspark.deploy.zookeeper.url=node3:2181,node4:2181,node5:2181

-Dspark.deploy.zookeeper.dir=/sparkmaster0821"

2) 发送到其他worker节点上

3) 找一台节点(非主Master节点)配置备用 Master,修改spark-env.sh配置节点上的MasterIP

4)启动集群之前启动zookeeper集群

../zkServer.sh start

5) 启动spark Standalone集群,启动备用Master

6) 打开主Master和备用Master WebUI页面,观察状态。

4.3 注意点

Ø 主备切换过程中不能提交Application。

Ø 主备切换过程中不影响已经在集群中运行的Application。因为Spark是粗粒度资源调度。

4.4 测试验证

提交SparkPi程序,kill主Master观察现象。

./spark-submit

--master spark://node1:7077,node2:7077

--class org.apache.spark.examples.SparkPi

../lib/spark-examples-2.3.4-hadoop2.7.0.jar

10000

5. 硬件说明

1. Cpu:每台计算机上至少配置8-16个内核。

2. Memory: 通常,Spark可以在每台机器8 GB到数百GB的内存中运行良好。在所有情况下,我们建议仅为Spark分配最多75%的内存;其余的留给操作系统和缓冲区高速缓存。

3. 磁盘:每个节点有4-8个磁盘。

6. Spark容器镜像制作

Spark2.3.4 部署资料包以及更具体脚本请见资料目录,此处列举关键脚本内容。

首先需要Docker运行环境以便执行Docker命令。

DockerFile如下

FROM harbor.gaoming.net/gaoming-snapshot/base:1.0.0

MAINTAINER Gao

USER root

ADD spark-2.3.4-bin-hadoop2.7.tgz /usr/local/

RUN cd /usr/local && ln -s spark-2.3.4-bin-hadoop2.7 spark

ADD bootstrap.sh /etc/bootstrap.sh

RUN chown root:root /etc/bootstrap.sh && chmod 700 /etc/bootstrap.sh

ENV SPARK_HOME /usr/local/spark

ENV PATH $PATH:$SPARK_HOME/bin

ENV BOOTSTRAP /etc/bootstrap.sh

ENTRYPOINT ["/etc/bootstrap.sh"]

Boostrap.sh如下

#!/usr/bin/env bash

DAEMON=true

if [ -z "${LOG_DIR}" ]; then

export LOG_DIR="/var/log/spark-app/default/"

fi

if [ "${BEFORE_RUN}" ]; then

$BEFORE_RUN

fi

DATETIME=`date +%Y-%m-%d`

log_file=$LOG_DIR/$DATETIME

mkdir -p $LOG_DIR

echo log4j.appender.FILE.File=$log_file >> /usr/local/spark/conf/log4j.properties

if [ "${SPARK_RUN}" ]; then

echo $SPARK_RUN > /home/spark_run.sh

sh /home/spark_run.sh

else

$*

fi

if [ "${AFTER_RUN}" ]; then

$AFTER_RUN

fi

if [ "${DAEMON}" ]; then

# TODO: use other command

while :

do

sleep 300

echo `date `" sleep !!"

done

fi

在DockerFile和boostrap.sh目录下执行如下命令完成容器制作

docker build -t 容器名:容器版本 .

注意:不要忘记最后的.

7. Spark+Hadoop容器镜像制作

由于Docker Hub星级排名最高的Spark镜像只支持1.6.x,如下所示

NAME DESCRIPTION STARS OFFICIAL AUTOMATED

sequenceiq/spark An easy way to try Spark 450 [OK]

因此当我们要使用Spark 2.x以上版本时候需要自己动手制作,具体操作如下。首先准备Docker运行环境

拉取hadoop 镜像

docker pull sequenceiq/hadoop-docker:2.7.0.

3. 关键脚本编写如下

DockerFile如下

FROM sequenceiq/hadoop-docker:2.7.0

MAINTAINER Gao

RUN mkdir /usr/local/java

ADD jdk-8u231-linux-x64.tar.gz /usr/local/java/

ENV JAVA_HOME /usr/local/java/jdk1.8.0_231

ENV JRE_HOME $JAVA_HOME/jre

ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH

ENV PATH $JAVA_HOME/bin:$PATH

#support for Hadoop 2.7.0

# RUN curl -s http://d3kbcqa49mib13.cloudfront.net/spark-1.6.1-bin-hadoop2.6.tgz | tar -xz -C /usr/local/

ADD spark-2.3.4-bin-hadoop2.7.tgz /usr/local

RUN cd /usr/local && ln -s spark-2.3.4-bin-hadoop2.7 spark

ENV SPARK_HOME /usr/local/spark

RUN mkdir $SPARK_HOME/yarn-remote-client

ADD yarn-remote-client $SPARK_HOME/yarn-remote-client

# RUN $BOOTSTRAP && $HADOOP_PREFIX/bin/hadoop dfsadmin -safemode leave && $HADOOP_PREFIX/bin/hdfs dfs -put $SPARK_HOME-2.1.0-bin-hadoop2.6/jars /spark && $HADOOP_PREFIX/bin/hdfs dfs -put $SPARK_HOME-2.1.0-bin-hado# op2.6/examples/jars /spark

RUN $BOOTSTRAP && $HADOOP_PREFIX/bin/hadoop dfsadmin -safemode leave && $HADOOP_PREFIX/bin/hdfs dfs -put $SPARK_HOME-2.3.4-bin-hadoop2.7/jars /spark && $HADOOP_PREFIX/bin/hdfs dfs -put $SPARK_HOME-2.3.4-bin-hadoop2.7/examples/jars /spark

ENV YARN_CONF_DIR $HADOOP_PREFIX/etc/hadoop

ENV PATH $PATH:$SPARK_HOME/bin:$HADOOP_PREFIX/bin

# update boot script

COPY bootstrap.sh /etc/bootstrap.sh

RUN chown root.root /etc/bootstrap.sh

RUN chmod 700 /etc/bootstrap.sh

#install R

#RUN rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

#RUN yum -y install R

ENTRYPOINT ["/etc/bootstrap.sh"]

Boostrap.sh如下

#!/bin/bash

: ${HADOOP_PREFIX:=/usr/local/hadoop}

$HADOOP_PREFIX/etc/hadoop/hadoop-env.sh

rm /tmp/*.pid

# installing libraries if any - (resource urls added comma separated to the ACP system variable)

cd $HADOOP_PREFIX/share/hadoop/common ; for cp in ${ACP//,/ }; do echo == $cp; curl -LO $cp ; done; cd -

# altering the core-site configuration

sed s/HOSTNAME/$HOSTNAME/ /usr/local/hadoop/etc/hadoop/core-site.xml.template > /usr/local/hadoop/etc/hadoop/core-site.xml

# setting spark defaults

echo spark.yarn.jar hdfs:///spark/* > $SPARK_HOME/conf/spark-defaults.conf

cp $SPARK_HOME/conf/metrics.properties.template $SPARK_HOME/conf/metrics.properties

service sshd start

$HADOOP_PREFIX/sbin/start-dfs.sh

$HADOOP_PREFIX/sbin/start-yarn.sh

DAEMON=true

if [ "${DAEMON}" ]; then

# TODO: use other command

while :

do

sleep 1000

echo `date `" sleep !!"

done

fi

CMD=${1:-"exit 0"}

if [[ "$CMD" == "-d" ]];

then

service sshd stop

/usr/sbin/sshd -D -d

else

/bin/bash -c "$*"

fi

在DockerFile和boostrap.sh目录下执行如下命令完成容器制作

docker build -t 容器名:容器版本 .

8. SparkBench大数据性能基准测试工具

1.构建Hibench

build all modules in HiBench,use the below command

1.build all modules in HiBench,use the below command

Build a specific framework benchmark

mvn -Phadoopbench -Dspark=2.1 -Dscala=2.11 clean package

Build a single module

mvn -Psparkbench -Dmodules -Psql -Dspark=2.1 -Dscala=2.11 clean package

Set up

Python 2.x(>=2.6) is required.

bc is required to generate the HiBench report.

Supported Hadoop version: Apache Hadoop 2.x, CDH5.x, HDP

Supported Spark version: 1.6.x, 2.0.x, 2.1.x, 2.2.x

Start HDFS, Yarn, Spark in the cluster

Configure hadoop.conf 和Configure spark.confPropertyMeaning

hibench.hadoop.homeThe Hadoop installation location

hibench.hadoop.executableThe path of hadoop executable. For Apache Hadoop, it is /YOUR/HADOOP/HOME/bin/hadoop

hibench.hadoop.configure.dirHadoop configuration directory. For Apache Hadoop, it is /YOUR/HADOOP/HOME/etc/hadoop

hibench.hdfs.masterThe root HDFS path to store HiBench data, i.e. hdfs://localhost:8020/user/username

hibench.hadoop.releaseHadoop release provider. Supported value: apache, cdh5, hdp

hibench.spark.home The Spark installation location

hibench.spark.master The Spark master, i.e. `spark://xxx:7077`, `yarn-client`

Run a workload

bin/workloads/micro/wordcount/prepare/prepare.sh

bin/workloads/micro/wordcount/spark/run.sh

性能测验

流处理

性能测试流程步骤如下

1. 创造数据放置HDFS

2. 向Kafka发送记录消息

本次发送数据测试指标详情如下

Interval Span : 50 ms

Record Per Interval : 5

Record Length : 200 bytes

Producer Number : 1

Total Records : -1 [Infinity]

Total Rounds : -1 [Infinity]

Kafka Topic : identity

====================================================

Estimated Speed :

100 records/second

0.02 Mb/second

3. 开启流式任务处理

如下Spark Streaming任务阻塞,正在处理消费数据

4. 观察流处理过程中详情

Running batches of 100 msfor 4 hours 26 minutes 36 secondssince 2020/03/30 23:47:44(159979 completed batches, 2070074 records)

5. 观察流处理后的指标统计

指标包括

1.磁盘,比如io写,io读效率 (byte/second)

2.CPU 比如system ,idle ,iowait,irq ,softirq 等

3.内存 比如label = 'total', total = 131918500, used = 1, buffer_cache = 35182820, free = 78597416, map = 283156)

{

'timestamp': 1585559452.413635,

'hostname': 'rgibns1',

'proc': Proc(label = 'total', load5 = 0.28, load10 = 0.29, load15 = 0.63, running = 5, procs = 2903),

'memory/total': Memory(label = 'total', total = 65595720, used = 22327984, buffer_cache = 23487860, free = 19779876, map = 347428)

}

2. 批处理

创造数据放置HDFS

此处参考流处理

执行批量任务WordCount负载

3. 观察结果

目前跑两次批量任务,一个是tiny任务,数据流大约35704比特

另外一个是GB数据量。

测验报告如下

我在生产上使用的启动命令

spark-submit --class com.batch.GaomingJob --name com.batchGaomingJob --master local[*] --conf spark.ui.port=4042 --conf spark.scheduler.mode=FIFO --conf spark.shuffle.manager=sort --conf spark.default.parallelism=8 --conf spark.locality.wait=0s --conf spark.executor.logs.rolling.strategy=time --conf spark.executor.logs.rolling.time.interval=daily --conf spark.executor.logs.rolling.maxRetainedFiles=10 --conf spark.streaming.concurrentJobs=1 --conf spark.shuffle.consolidateFiles=true --conf spark.shuffle.file.buffer=1024k --conf spark.reducer.maxSizeInFlight=128m --conf spark.shuffle.sort.bypassMergeThreshold=100 --conf spark.ui.showConsoleProgress=false /home/gaoming/webapps/spark-stream-1.0.0.jar >/home/logs/GaomingJob.log 2>&1 &

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值