美文网首页
安装Spark

安装Spark

作者: 峰峰仔 | 来源:发表于2019-04-17 15:49 被阅读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。

    • Cluster模式:一切都运行在集群上,例如,你从你的笔记本电脑开启一个job,尽管你关闭你的电脑,但是job还会继续运行。在这种模式下,Spark Driver是在Yarn Application Master中的。
    • Client模式:Spark Driver运行在客户端,例如你的笔记本电脑,如果客户端关闭,那么job会失败,Spark Executors仍然运行在集群上,为了调用一切,一个小的Yarn Application Master被创建。
      客户端模式很适合交互式的jobs,但是如果客户端停止的话,那么applications将会失败。对于运行时间比较长的jobs,cluster模式会更适合一点。

    配置内存分配

    如果内存分配没有合理的配置,那么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-defaults.conf
      在cluster模式下,分配给Spark Driver的内存(默认是1G)可以以下进行设置:
    spark.driver.memory 512m
    
    • 命令行
      使用--driver-memory参数来配置spark-submit请求的内存

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

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

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

    • spark-defaults.conf
      spark.yarn.am.memory 512m
      这个值不能通过命令行来进行设置

    配置Spark Executors的内存

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

    • spark.executor.memory: 设置使用在计算上的内存
    • spark.yarn.executor.memoryOverhead:添加到spark.executor.memory内存上,默认是spark.executor.memory值的7%,但是最小值是384MB。

    确保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()
    

    相关文章

      网友评论

          本文标题:安装Spark

          本文链接:https://www.haomeiwen.com/subject/xbynwqtx.html