Spark学习笔记[3]-Spark安装部署

Spark学习笔记[3]-Spark安装部署

1、下载对应版本的spark

  官网我始终都下不下来,推荐一个国内的镜像: https://mirrors.tuna.tsinghua.edu.cn/apache/spark

2、概述

2-1 安装模式

  虽然Spark是一个分布式计算框架,但是其不属于Hadoop Project,它有自己的资源层管理和文件系统,可以不依赖Hadoop的HDFS和Yarn,所以安装部署的时候可以只安装spark,对应的就是standalone集群, 但是一般都会使用HDFS作为数据存储层,使用Yarn进行资源管理(spark on yarn模式),这样就可以进行资源的复用,除了Yarn,还支持k8s等资源管理模块

  StandAlone模式和Yarn模式资源层对应的角色如下:

StandAlone Yarn
主节点(管理集群计算资源) Master resourceManager
工作节点(具体负责计算的节点) Worker nodeManager
2-2 作业执行大致流程

  从官网down了一张图:
Spark学习笔记[3]-Spark安装部署_第1张图片

  排除资源层的角色,剩下的就是计算层角色,主要是Driver和Executor,除了这两个角色,其实还有一个角色Client,只是Client的功能比较少,下结合这个图,介绍一下作业的执行流程:

  • 1)、启动client,client的主要功能就是负责启动Driver,Driver可以是一个单独的jvm进程,也可以运行在Client进程中,分别对应我们使用Spark-submit提交程序时指定的客户端模式(client)集群模式(cluster),无论哪种模式,driver启动后,后续的工作都主要由Driver负责,两个模式的主要区别是:
    • 在客户端模式,driver运行在client内部,和client率属于同一个jvm进程
    • 在集群模式,Client会先向资源管理主节点申请资源,主节点根据Driver启动所需的资源情况,从所有工作节点中选取一个工作节点,并在该工作节点启动一个新的JVM进程运行Driver程序,在Yarn模式下,Driver会运行在AppMater上
  • 2)、Driver启动成功后会向资源层申请计算资源,资源层根据申请的资源情况,挑选一批工作节点启动执行进程(Executor),等待执行计算任务,和MR不同的是,MR的map任务和reduce任务都是以进程的形式调度执行,Spark是先启动执行进程Executor,Executor内部有一个线程池,后续计算任务都由该线程池执行(由于spark是先申请资源再调度任务,所以spark在申请资源时会倾向于抢占资源,也就是尽量把集群资源抢光)

3、StandAlone模式安装(数据存储层使用HDFS,所以要先启动HDFS)

3-1 资源层角色规划
主机名称 Master Worker
hdp001 *
hdp002 *(HA模式需要) *
hdp003 *
hdp004 *
3-2 配置文件修改
3-2-1 配置worker节点($SPARK_HONE/conf/slaves)

hdp002
hdp003
hdp004
3-2-2 配置spark的环境变量spar-env.sh
   export JAVA_HOME=/opt/hadoop/jdk1.8.0_121 #远程登录主机执行需要该变量
   export HADOOP_CONF_DIR=/opt/hadoop/hadoop-2.9.2/etc/hadoop  #hadoop配置文件地址,根据它找到hdfs和**yarn**
   export SPARK_MASTER_HOST=hdp001 #主节点,写主节点对应的主机,如果hdp002也是主,则hdp002的配置文件要写hdp002主机
   export SPARK_MASTER_PORT=7077 #主节点端口
   export SPARK_WORKER_CORES=2  #worker虚拟核数
   export SPARK_WORKER_MEMORY=1g #woker内存
   export SPARK_MASTER_WEBUI_PORT=9090 #web界面端口

3-2-3 配置spark-default.conf(HA模式等配置需要)
   
    spark.deploy.recoveryMode ZOOKEEPER #也可以选择本地文件系统,一般都是zk
    spark.deploy.zookeeper.url hdp001:2181,hdp002:2181,hdp003:2181,hdp004:2181
    spark.deploy.zookeeper.dir /cmbspark #zk上的节点

3-2-4 在zk上创建一个新的目录节点(HA模式)
3-2-5 拷贝安装包和/etc/profile到其余节点
scp 源路径 hdp002:`pwd`
3-2-6 由于hdp002是备用主,需要将hdp002下的spark-env.sh的主节点主机改成hdp002
3-2-7 运行 sbin/start-all.sh启动集群
3-3 测试程序

  准备一个测试文件上传到hdfs

3-3-1 使用spark-shell

  命令格式:

spark-shell --master spark://hdp001:7077,hdp002:7077

  进入界面后执行如下代码即可看到对应的输出:

sc.textFile("hdfs://mycluster/user/hdp01/data_in/word.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect().foreach(println)
3-3-2 使用spark-submit

  spark-submit命令格式:

    
    spark-submit \
    --class <main-class> \
    --master <url> \
    --deploy-mode <client/cluster>
    -- conf <key>=<value>
    .... #other option
    <application-jar>
    [app-args<JVM参数或者其他>]

  准备一个sh脚本运行即可,使用的代码是spark自带的例子程序:

 claz=org.apache.spark.examples.SparkPi
    jar=$SPARK_HOME/examples/jars/spark-examples_2.11-2.4.7.jar
    $SPARK_HOME/bin/spark-submit \
    --master spark://hdp001:7077,hdp002:7077 \
    --class  $claz\
    --deploy-mode client \
    $jar
    100
3-4 历史记录服务

   默认情况下,spark进程退出后【包括yarn】,历史执行的任务信息也会丢失,需要配置历史记录服务存储历史任务的执行情况,不管是MR还是Spark,历史记录是由计算层负责写入对应存储层存储(比如HDFS),开启日志服务流程如下:

  • 1)、配置spark-default.conf

spark.eventLog.enabled true #开启日志记录
spark.eventLog.dir hdfs://mycluster/spark-logs #日志存储位置
spark.history.fs.logDirectory hdfs://mycluster/spark-logs #其他服务获取日志的路径,一般和上面一个是一样的

  • 2)、手动启动 sbin下的start-history-server.sh
  • 3)、访问启动historysever的主机的主机名,默认端口号是18080

4、Spark On Yarn模式

   Spark On Yarn模式使用的资源层是Yarn,所以可以关闭StandAlone集群,但是需要启动Yarn集群,然后进行如下操作:

  • 1)、修改spark-env.sh,保留以下两个
   export JAVA_HOME=/opt/hadoop/jdk1.8.0_121 #远程登录主机执行需要该变量
   export HADOOP_CONF_DIR=/opt/hadoop/hadoop-2.9.2/etc/hadoop  #hadoop配置文件地址
  • 2)、修改spark-default.conf,删除HA相关配置(也就是Zk相关的配置)
  • 3)、修改yarn的配置文件yarn-site.xml,新增如下配置
<property>
   <name>yarn.nodemanager.resource.memory-mbname>
   <value>1024value>
property>
<property>
   <name>yarn.nodemanager.cpu-coresname>
   <value>2value>
property>
<property>
   <name>yarn.nodemanager.vem-check-enablename>
   <value>falsevalue>
property>
  • 4)、上传依赖包到hdfs,以后就不需要每次从本地上传
  1、在hdfs创建目录 /work/spark_lib/jars
  2、上传spark安装目录的jars目录下的jar包到以上目录
  3、配置spark-default.conf
     spark.yarn.jars hdfs://mycluster/work/spark_lib/jars/*

  • 5)、测试程序,同样使用saprk-shell,命令为:
spark-shell --master yarn --executor-memory 512M --driver-memory 512M #有内存不能配置太小,有可能起不来

你可能感兴趣的:(大数据,spark,big,data)