zoukankan      html  css  js  c++  java
  • Spark集群搭建(local、standalone、yarn)

    Spark集群搭建

    local本地模式

    下载安装包解压即可使用,测试(2.2版本)
    ./bin/spark-submit --class org.apache.spark.examples.SparkPi --master local[1] ./examples/jars/spark-examples_2.11-2.2.0.jar 100

    local[1]:1代表线程数
    100:spark类中需要的一个参数,越大计算的越准

    集群搭建过程中,基本上是哪台机器上有datanode,就在哪台机器上装一个spark,为了维持数据本地性

    standalone集群模式

    spark提供的模式
    主:master
    从:worker
    worker的作用是在机器上启动executor进程
    1. 配置slaves
    # A Spark Worker will be started on each of the machines listed below.
    bigdata1
    bigdata2
    2. 配置master
    bigdata3
    3. 配置spark-env.sh
    ###jdk dir
    export JAVA_HOME=/home/hadoop/jdk1.7/jdk1.7.0_51
    ###scala dir
    export SCALA_HOME=/home/hadoop/scala
    ###the ip of master node of spark
    export SPARK_MASTER_IP=bigdata3
    export SPARK_MASTER_PORT=7077
    ###the max memory size of worker
    export SPARK_WORKER_CORES=1 一个线程
    export SPARK_WORKER_INSTANCES=1 一个物理节点只有一个worker进程
    export SPARK_WORKER_MEMORY=2048m
    启动
    ./sbin/start-all.sh
    http://192.168.1.113:8080

    任务测试
    ./bin/spark-submit --class org.apache.spark.examples.SparkPi --master spark://bigdata3:7077 --executor-memory 512m --total-executor-cores 1 ./lib/spark-examples-1.5.1-hadoop2.6.0.jar 100
    这两个选项可以不用配,默认
    --executor-memory:执行任务所需内存
    --total-executor-cores:整个application占几核,如果为1的话只能同步执行一个executor

    一个application可以切分为多个job,根据action来切分,一个application对应一个driver,driver是用来分配task到worker中执行
    client模式:结果可以直接在命令行可见,提交程序的客户端,driver也在该台机器
    ./bin/spark-submit --class org.apache.spark.examples.SparkPi --master spark://bigdata3:7077 --executor-memory 512m --total-executor-cores 1 ./lib/spark-examples-1.5.1-hadoop2.6.0.jar 100
    --deploy-mode默认是client
    cluster模式:结果在提交客户端看不到,driver扔到worker所在的节点去执行,想看结果得找driver所在的worker节点。
    ./bin/spark-submit --class org.apache.spark.examples.SparkPi --master spark://bigdata3:7077 --deploy-mode cluster --executor-memory 512m --total-executor-cores 1 ./lib/spark-examples-1.5.1-hadoop2.6.0.jar 100

    standalone做HA
    可以使用zookeeper做热备,master挂了另一个自动接管
    可以使用本地文件系统做冷备,如果master挂了,需要手动启动另一个master且手动读取本地文件系统的元数据信息。

    配置spark-env.sh
    export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=bigdata1:2181,bigdata2:2181,bigdata3:2181"

    启动zookeeper
    重启spark集群
    配置热备master
    将备用节点的spark-env.sh中的export SPARK_MASTER_IP=bigdata2改为本节点名
    启动备用master
    bigdata2节点上 ./sbin/start-master.sh
    此时bigdata3上的master状态为alive,bigdata2上的master状态为standby
    节点接管时间1-2分钟,在这段时间内无法提交新的应用程序,正在跑的应用不影响

    相当于运行了一个spark应用程序,在bigdata3:8080页面可看到
    ./spark-shell --master spark://bigdata3:7077
    自动创建一个应用程序,并且提供了sparkcontext,可以直接使用

    Spark_Yarn集群模式搭建

    配置spark-env.sh
    ###jdk dir
    export JAVA_HOME=/home/hadoop/jdk1.7/jdk1.7.0_51
    ###scala dir
    export SCALA_HOME=/home/hadoop/scala

    ###the ip of master node of spark
    export SPARK_MASTER_IP=bigdata3
    export SPARK_MASTER_PORT=7077
    ###the max memory size of worker
    export SPARK_WORKER_CORES=1
    export SPARK_WORKER_INSTANCES=1
    export SPARK_WORKER_MEMORY=2048m
    export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=bigdata1:2181,bigdata2:2181,bigdata3:2181"
    ###hadoop configuration file dir
    export HADOOP_HOME=/home/hadoop/hadoop-2.6.0
    export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
    export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop
    export SPARK_HOME=/home/hadoop/spark/
    export SPARK_JAR=$SPARK_HOME/lib/spark-assembly-1.5.1-hadoop2.6.0.jar
    export PATH=$SPARK_HOME/bin:$PATH

    此时不能./sbin/start-all.sh了,start-all.sh会启动master,和yarn冲突,产生资源争抢
    此时环境已经准备好了,跑任务试试
    ./spark-submit --class org.apache.spark.examples.SparkPi --master yarn-client --executor-memory 1G --num-executors 1 ./../lib/spark-examples-1.5.1-hadoop2.6.0.jar 100
    写yarn-client会自动的找active的resourcemanager

    执行过程
    yarn如何run spark
    会将代码example jar包、assembly jar包提交到HDFS中去,driver驱动程序会在本地运行example jar,example中是spark代码,提交上去需要一个spark的环境,然后找到spark的一些相关信息

    master和resourcemanager是分配资源的
    driver是分配task的

    yarn模式下,resourcemanager分配资源,指定spark任务跑在哪几个节点,然后在这几个节点上会有对应的nodemanager创建container,container中跑的任务就是由driver来指定的。

    driver找resourcemanager申请资源,resourcemanager给driver分配资源,driver向对应的节点再次申请资源,找nodemanager,nodemanager创建container来跑任务, driver将task任务发送到container中执行,task任务执行完后会将结果返回给driver,当所有task任务跑完后,driver会告诉resourcemanager,自己的任务跑完了,resourcemanager就会通知nodemanager销毁container回收资源。

    在yarn环境中,driver叫做application master
    yarn
    resourcemanager
    nodemanager
    applicationmaster
    container

    yarn-cluster
    ./spark-submit --class org.apache.spark.examples.SparkPi --master yarn-cluster --executor-memory 1G --num-executors 1 ./../lib/spark-examples-1.5.1-hadoop2.6.0.jar 100

    client和cluster的区别:driver所在的位置不一样
    client模式:driver在执行任务的客户端
    cluster模式:driver会放在集群中某个从节点执行,任务名:package包+类名

    在http://192.168.1.111:8088中点击任务进去点击logs可以看到任务执行结果。

  • 相关阅读:
    python函数名和左括号之间不能有空格
    linux版本选择
    filter_map
    awk统计总结
    Spring Boot + Redis 实现各种操作
    手机号正则校验
    判断windows系统
    Redis分布式锁
    shell 脚本快速部署 SpringBoot 项目
    Java主流的Http请求--原生的HttpURLConnection
  • 原文地址:https://www.cnblogs.com/EnzoDin/p/8552284.html
Copyright © 2011-2022 走看看