spark standalone 部署与运行

前言

由于项目使用的是Elasticsearch来做的数据存储,没有引用hadoop,自然也就没有使用yarn模式的spark集群部署方案。
standalone的部署方案,指的是单独的spark集群,任务的更新和资源的分配等都是spark自己去维护。
本问讲的是stanalone集群的部署方案,和代码的打包上传,运行等。

配置环境

当前环境:
centos7.x(三台机器分别是114,116,117)
jdk1.8.0_181
scala-2.11.12

java选择1.8以上,scala选择与spark匹配的版本,如果使用到kafka,最好提前考虑到是否兼容。
笔者使用的是spark-2.1.2-bin-hadoop2.7,kafka用的是kafka_2.12-2.2.0

前置部署教程:
jdk安装
scala安装
kafka的搭建
实现集群的免密登录

部署

下载解压

下载
wget https://archive.apache.org/dist/spark/spark-2.1.2/spark-2.1.2-bin-hadoop2.7.tgz
把下载的安装包发送到其他的服务器上面
scp -r spark-2.1.2-bin-hadoop2.7.tgz [email protected]:/opt/
scp -r spark-2.1.2-bin-hadoop2.7.tgz [email protected]:/opt/
分别解压各个服务器上的安装包
tar -zxvf spark-2.1.2-bin-hadoop2.7.tgz

配置

进入114,解压后的spark目录下,进入conf目录
复制spark-env.sh.template
cp spark-env.sh.template spark-env.sh
1.配置spark-env.sh(三台都配置上

export JAVA_HOME=/usr/local/jdk1.8.0_181
export SCALA_HOME=/usr/local/scala-2.11.12
export KAFKA_HOME=/opt/kafka_2.12-2.2.0
#export HADOOP_HOME=/opt/hadoop-3.1.2
#export HADOOP_CONF_DIR=/opt/hadoop-3.1.2/etc/hadoop
#export SPARK_MASTER_IP=127.0.0.1
export SPARK_MASTER_HOST=10.25.1.114
export SPARK_MASTER_PORT=7077
export SPARK_WORKER_CORES=1
export SPARK_WORKER_MEMORY=800m
#export SPARK_HOME=/opt/spark-2.1.2-bin-hadoop2.7
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=10.25.1.114:2181,10.25.1.116:2181,10.25.1.117:2181"
# -Dspark.deploy.zookeeper.dir=/spark"

配置说明:

  • $JAVA_HOME$SCALA_HOME为环境变量配置。
  • 另外要在/etc/profile里面配置export SPARK_HOME=/opt/spark-2.1.2-bin-hadoop2.7,不然启动的时候系统会找不到目录。
  • SPARK_MASTER_HOST为每台机器的ip
  • 根据每台服务器的资源,配置其SPARK_WORKER_CORESSPARK_WORKER_MEMORY
  • SPARK_DAEMON_JAVA_OPTS是为了配置spark的高可用的,后面还会讲到

2.配置slaves(三台都配置上
添加从节点的ip(要提前确认之间可以免密登录了,集群需要通过免密登录来共享资源的)

10.25.1.114
10.25.1.116
10.25.1.117

到此,就配置完成了,接下来就是启动就行了。
进入./sbin/目录下,会看到各个启动脚本

[root@10 sbin]# ll
总用量 92
-rwxr-xr-x 1 elasticsearch elasticsearch 2803 10月  3 2017 slaves.sh  
-rwxr-xr-x 1 elasticsearch elasticsearch 1429 10月  3 2017 spark-config.sh
-rwxr-xr-x 1 elasticsearch elasticsearch 5688 10月  3 2017 spark-daemon.sh
-rwxr-xr-x 1 elasticsearch elasticsearch 1262 10月  3 2017 spark-daemons.sh
-rwxr-xr-x 1 elasticsearch elasticsearch 1190 10月  3 2017 start-all.sh   #启动当前的master和所有的slaves
-rwxr-xr-x 1 elasticsearch elasticsearch 1274 10月  3 2017 start-history-server.sh
-rwxr-xr-x 1 elasticsearch elasticsearch 2050 10月  3 2017 start-master.sh #启动当前的master
-rwxr-xr-x 1 elasticsearch elasticsearch 1877 10月  3 2017 start-mesos-dispatcher.sh
-rwxr-xr-x 1 elasticsearch elasticsearch 1423 10月  3 2017 start-mesos-shuffle-service.sh
-rwxr-xr-x 1 elasticsearch elasticsearch 1279 10月  3 2017 start-shuffle-service.sh
-rwxr-xr-x 1 elasticsearch elasticsearch 3151 10月  3 2017 start-slave.sh
-rwxr-xr-x 1 elasticsearch elasticsearch 1527 10月  3 2017 start-slaves.sh  #启动所有的slaves
-rwxr-xr-x 1 elasticsearch elasticsearch 1857 10月  3 2017 start-thriftserver.sh
-rwxr-xr-x 1 elasticsearch elasticsearch 1478 10月  3 2017 stop-all.sh   #停止当前的master和所有的slaves
-rwxr-xr-x 1 elasticsearch elasticsearch 1056 10月  3 2017 stop-history-server.sh
-rwxr-xr-x 1 elasticsearch elasticsearch 1080 10月  3 2017 stop-master.sh 
-rwxr-xr-x 1 elasticsearch elasticsearch 1227 10月  3 2017 stop-mesos-dispatcher.sh
-rwxr-xr-x 1 elasticsearch elasticsearch 1084 10月  3 2017 stop-mesos-shuffle-service.sh
-rwxr-xr-x 1 elasticsearch elasticsearch 1067 10月  3 2017 stop-shuffle-service.sh
-rwxr-xr-x 1 elasticsearch elasticsearch 1557 10月  3 2017 stop-slave.sh
-rwxr-xr-x 1 elasticsearch elasticsearch 1064 10月  3 2017 stop-slaves.sh
-rwxr-xr-x 1 elasticsearch elasticsearch 1066 10月  3 2017 stop-thriftserver.sh

启动

启动start-all.sh,使用jps会看到主节点

[root@10 opt]# jps
14801 Worker 
14722 Master
23292 Jps

从节点

[root@10 sbin]# jps
24830 Jps
23727 Worker

浏览器进入主节点IP:8080,你会看到如下画面
spark standalone 部署与运行_第1张图片
说明已经成功启动

spark的高可用

由于不是yarn模式部署的,主节点挂掉之后,整个集群也就挂掉了。这个时候使用spark的高可用可以有效的避免这个问题。
spark_env.sh里面配置export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=10.25.1.114:2181,10.25.1.116:2181,10.25.1.117:2181"可以配置spark的高可用。
当主节点挂掉之后,zookeeper会从剩下的standby的节点选择一个成为主节点,其中的耗时大约为一分钟多。

测试

  • 启动144的./sbin/start_all.sh于是114的master,114,116,117的worker启动了。
  • 进入116,启动./sbin/start_master.sh,于是standby的一个master就启动了。这个时候登录116:8080还可以看到,这个主节点的状态为standby(114的为alive)
  • 同样的,进入117,启动./sbin/start_master.sh

测试:运行114的./sbin/stop_master.sh脚本,这样114的master就挂掉了。等待一分钟左右,你会发现114或者是117的其中一台变成了alive状态,且下面拥有三个workers,这就是spark的高可用。

代码打包

spark项目的代码打包,这里使用的idea做开发工具,用的maven-shade进行一个项目的打包。
别的打包方式,很容易造成jar包的丢失,导致spark包classNotFound的错误。
下面是pom.xml打包部分的配置

    <build>
        <sourceDirectory>src/main/javasourceDirectory>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-shade-pluginartifactId>
                <version>3.2.1version>
                <configuration>
                    <filters>
                        <filter>
                            <artifact>*:*artifact>
                            <excludes>
                                <exclude>META-INF/*.SFexclude>
                                <exclude>META-INF/*.DSAexclude>
                                <exclude>META-INF/*.RSAexclude>
                            excludes>
                        filter>
                    filters>
                    
                    <transformers>
                        <transformer  implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                            <mainClass>com.sunline.spark.sparkdemo.project.AnalysisLogKafkaStreamingmainClass>
                            <mainClass>com.sunline.spark.sparkdemo.project.CalcTwoLogsKafkaStreamingmainClass>
                            <mainClass>com.sunline.spark.sparkdemo.project.AnalysisGatewayLogKafkaStreamingmainClass>
                        transformer>
                    transformers>
                configuration>
                <executions>
                    <execution>
                        <phase>packagephase>
                        <goals>
                            <goal>shadegoal>
                        goals>
                    execution>
                executions>
            plugin>
            <plugin>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-compiler-pluginartifactId>
                <configuration>
                    <source>8source>
                    <target>8target>
                configuration>
            plugin>
        plugins>
    build>

对项目进行打包。
spark standalone 部署与运行_第2张图片
在target下面,我们发现两个jar包:original-sparkdemo-1.0.0.jar,sparkdemo-1.0.0.jar。这里使用sparkdemo-1.0.0.jar,把jar包上传到集群(三台机器都要上传一份,目录一样!!!

spark_submit

进入spark目录下,提交jar包给spark

[root@10 opt] ./bin/spark-submit \    
--class com.sunline.spark.sparkdemo.project.AnalysisLogKafkaStreaming \  #mainclass的名字
--master spark://10.25.0.193:7077  \   	#主节点
--deploy-mode cluster \		#采用cluster模式提交
--supervise \			# 要支持自动重启
--executor-memory 1g \  #每个executor的内存,默认是1G
--total-executor-cores 1   \  #所有executor总共的核数。
/opt/spark-2.1.2-bin-hadoop2.7/sparkdemo-1.0.0.jar \  #刚刚打的jar包
10.25.1.114:9092 testAppLog1 testAppLog    #代码的入参,即main方法的args[]

此时,在114:8080就能看到有任务在跑了

你可能感兴趣的:(spark)