• Spark简介及安装


    2019-12-11

     Spark简介

    官网:http://spark.apache.org/

    Spark是一种快速、通用、可扩展 的 大数据分析引擎,2009年诞生于加州大学伯克利分校AMPLab,2010年开源,2013年6月成为Apache孵化项目,2014年2月成为Apache顶级项目。项目是用Scala进行编写

    目前,Spark生态系统已经发展成为一个包含多个子项目的集合,其中包含SparkSQL、Spark Streaming、GraphX、MLib、SparkR等子项目,Spark是基于内存计算的大数据并行计算框架。除了扩展了广泛使用的 MapReduce 计算模型,而且高效地支持更多计算模式,包括交互式查询和流处理。Spark 适用于各种各样原先需要多种不同的分布式平台的场景,包括批处理、迭代算法、交互式查询、流处理。通过在一个统一的框架下支持这些不同的计算,Spark 使我们可以简单而低耗地把各种处理流程整合在一起。而这样的组合,在实际的数据分析 过程中是很有意义的。不仅如此,Spark 的这种特性还大大减轻了原先需要对各种平台分 别管理的负担。

     

    Spark特点

    1)

    与Hadoop的MapReduce相比,Spark基于内存的运算要快100倍以上,基于硬盘的运算也要快10倍以上。Spark实现了高效的DAG执行引擎,可以通过基于内存来高效处理数据流。

    2)易用

    Spark支持Java、Python和Scala的API,还支持超过80种高级算法,使用户可以快速构建不同的应用。而且Spark支持交互式的Python和Scala的shell,可以非常方便地在这些shell中使用Spark集群来验证解决问题的方法。

    3)通用

    Spark提供了统一的解决方案。Spark可以用于批处理、交互式查询(Spark SQL)、实时流处理(Spark Streaming)、机器学习(Spark MLlib)和图计算(GraphX)。这些不同类型的处理都可以在同一个应用中无缝使用。Spark统一的解决方案非常具有吸引力,毕竟任何公司都想用统一的平台去处理遇到的问题,减少开发和维护的人力成本和部署平台的物力成本。

    4)兼容性

    Spark可以非常方便地与其他的开源产品进行融合。比如,Spark可以使用Hadoop的YARN和Apache Mesos作为它的资源管理和调度器,器,并且可以处理所有Hadoop支持的数据,包括HDFS、HBase和Cassandra等。这对于已经部署Hadoop集群的用户特别重要,因为不需要做任何数据迁移就可以使用Spark的强大处理能力。Spark也可以不依赖于第三方的资源管理和调度器,它实现了Standalone作为其内置的资源管理和调度框架,这样进一步降低了Spark的使用门槛,使得所有人都可以非常容易地部署和使用Spark。此外,Spark还提供了在EC2上部署Standalone的Spark集群的工具。

    Spark的安装包下载

    另外的两种下载方式:

    http://archive.apache.org/dist

    https://github.com/apache/spark

    Spark集群安装

    Spark集群是一个典型的主从模式(Master-Slave)
    Master是主节点,主要是负责管理worker(集群节点运行任务)和Driver(任务)
    Slave是从节点,在Spark中是worker

    前提:时间同步(ntpdate ntp1.aliyun.com),免密登陆,JDK1.8,iptables配置

    服务器IP:

      Master:hadoop01

      Worker:hadoop02

      Worker:hadoop03

    1.上传并解压缩

    tar -zxvf ./spark-2.2.0-bin-hadoop2.7.tgz -C /opt/software/

    2.进入当前Spark的安装路径中,进入到conf目录下进行文件配置

    cd /opt/software/spark-2.2.0-bin-hadoop2.7/conf

    3.对conf目录中的spark-env.sh文件进行配置

    mv spark-env.sh.template spark-env.sh

    vim spark-env.sh

    在文件的末尾添加

    export JAVA_HOME=/opt/software/jdk1.8.0_221 (JDK安装路径)
    export SPARK_MASTER_IP=hadoop01 (主节点的IP地址,需要注意配置了hosts文件就写主机名否则写IP)
    export SPARK_MASTER_PORT=7077 (主节点通信端口号即内部通信端口号)

    4.配置slaves

    mv slaves.template slaves

    vim slaves

    hadoop02
    hadoop03
    hadoop04
    ps: 需要注意配置了hosts文件就写主机名否则写IP;删除原有localhost,添加自己的新worker节点(根据自己节点适当删减)

    5.分发

    scp -r ./spark-2.2.0-bin-hadoop2.7/ root@hadoop02:$PWD

    scp -r ./spark-2.2.0-bin-hadoop2.7/ root@hadoop03:/opt/software/
    ps: $PWD必须是在当前安装spark目录下执行 否则就写全路径

    6.配置环境变量

    #vim /etc/profile

    export SPARK_HOME=/opt/software/spark-2.2.0-bin-hadoop2.7

    export $PATH=$PATH:$SPARK_HOME/bin

    #source /etc/profile

    7.启动集群

    ps:因为Spark的集群启动命令和Hadoop的启动命令是一样的,所以需要进入Spark的sbin目录下
    ./start-all.sh
    支持使用jps命了进行进程查询
    只要节点启动master 或 worker就证明当前spark 集群启动成功

    spark是存在webUI界面的, master的IP地址:8080

    Spark的运行模式

    Local: 本地模式.多用于在编译器中书写spark代码用自己的电脑模拟spark运行

    Standalone 是Spark自带的一个资源调用框架,它支持完全分布式(搭建的就是这个模式)

    Yarn Hadoop生态圈中提供的资源调度框架,Spark完全支持 Spark on Yarn

    Messos 独立资源调度框架,必须独立安装,很少很少很少使用

    Spark运行程序和任务调教流程

    #案例一:计算 π
    cd $SPARK_HOME/bin
    ./spark-submit 
    --class org.apache.spark.examples.SparkPi 
    --master spark://hadoop01:7077 
    /opt/software//spark-2.2.0-bin-hadoop2.7/examples/jars/spark-examples_2.11-2.2.0.jar 100
    
    
    说明:
    1)spark-submit    提交jar到集群
    2)-- class    指定要运行类(这个类是存在main方法的类)
    3)--master    提交到集群中主节点(即master是谁)
    4)最后是jar包存在的路径并且和执行的参数

     提交任务的节点会启动一个Driver进程:

    PS:Client提交任务的客户端

    Driver进程启动后,首先会构建SparkContext对象,SparkContext主要包含两个部分DAGScheduler和TaskScheduler

    TaskScheduler会寻找Master节点,向Master阶段注册Application信息,然后Master通过调度算法,在自己集群的worker上启动Executor进程,Executor启动后会反向注册到TaskScheduler上,

    注册成功,TaskSheduler会发送任务到Executor上执行

    Executor进程内部会维护一个线程池,Executor没接收一个task都会用TaskRunner封装,然后从线程池中取出一个线程执行task,TaskRunner主要包含两种:shuffleMap Task和Result Task

    除了最后一个Stage是resultTask之外,其他的都是shuffleMap。

    Driver进程,划分成一个一个Stage,这个Stage的触发存在宽窄依赖关系,一个action算子触发就是一个job的产生

    名次解释:

    Standalone模式下存在的角色:

    client:负责提交作业

    Master:Standalone模式中主节点,负责接收Client提交的作业,管理worker,并命令worker启动Executor,Driver的启动也是归master完成;

    worker: Standalone模式中从节点,负责管理本节点的资源,定期向Master汇报心跳信息没接收Master命令,启动Executor(cluster模式下Worker会启动Driver);

    Driver:一个Spark作业运行包含一个Driver进程,也是作业的主进程,负责解析作业,生成Stage并调度Task到Executor,包含DAGScheduler和TaskScheduler;

    Executor:真正执行task的地方,一个集群中包含多个Executor,每个Executor接收Driver的命令执行task,一个Executor可以执行一个到到多个task

    在提交任务到集群的时候,除了执class 和 master之外还可以指定 Executor使用资源情况
    spark-submit 
    --class org.apache.spark.examples.SparkPi 
    --master spark://hadoop01:7077 
    --executor-memory 512M 
    --total-executor-cores 2 
    /opt/software//spark-2.2.0-bin-hadoop2.7/examples/jars/spark-examples_2.11-
    2.2.0.jar 100
    修改Executor的内存信息 --executor-memory 内存大小[M或G] 内存大小必须小于等于实际节点内
    存大小
    修改Executor的核心数 --total-executor-cores 数值 这个数值是小于等于整个集群中核心数的
    大小
    

      

     

  • 相关阅读:
    c# 国际化国家代码
    转:Oracle Connect By用法
    函数关系: 单射 满射 双射
    python 乱码
    2010年下半年全国计算机技术与软件专业技术资格(水平)考试试题下载
    HDU1068 Girls and Boys 最大独立子集
    HDU1151 Air Raid 最小简单路径覆盖
    POJ2411 Mondriaan's Dream 状态压缩+DP
    HDU1556 方格取数(1) 状态压缩+dp
    POJ2239 Selecting Courses 二分匹配
  • 原文地址:https://www.cnblogs.com/yumengfei/p/12026084.html
Copyright © 2020-2023  润新知