• Spark学习之初识Spark


    Spark概述

    Spark定义

    Apache Spark 是一个快速的, 多用途的集群计算系统, 相对于 Hadoop MapReduce 将中间结果保存在磁盘中, Spark 使用了内存保存中间结果, 能在数据尚未写入硬盘时在内存中进行运算.
    Spark 只是一个计算框架, 不像 Hadoop 一样包含了分布式文件系统和完备的调度系统, 如果要使用 Spark, 需要搭载其它的文件系统和更成熟的调度系统

    Spark组件

    Spark 提供了 批处理(RDDs), 结构化查询(DataFrame), 流计算(SparkStreaming), 机器学习(MLlib), 图计算(GraphX) 等组件

    这些组件均是依托于通用的计算引擎 RDDs 而构建出的, 所以 spark-core 的 RDDs 是整个 Spark 的基础

    Spark的优点

    1. 速度快

      • Spark 的在内存时的运行速度是 Hadoop MapReduce 的100倍
      • 基于硬盘的运算速度大概是 Hadoop MapReduce 的10倍
      • Spark 实现了一种叫做 RDDs 的 DAG 执行引擎, 其数据缓存在内存中可以进行迭代处理
    2. 易用

      df = spark.read.json("logs.json")
      df.where("age > 21") 
        .select("name.first") 
        .show()
      
      • Spark 支持 Java, Scala, Python, R, SQL 等多种语言的API.
      • Spark 支持超过80个高级运算符使得用户非常轻易的构建并行计算程序
      • Spark 可以使用基于 Scala, Python, R, SQL的 Shell 交互式查询.
    3. 通用

      • Spark 提供一个完整的技术栈, 包括 SQL执行, Dataset命令式API, 机器学习库MLlib, 图计算框架GraphX, 流计算SparkStreaming
      • 用户可以在同一个应用中同时使用这些工具, 这一点是划时代的
    4. 兼容

      • Spark 可以运行在 Hadoop Yarn, Apache Mesos, Kubernets, Spark Standalone等集群中

      • Spark 可以访问 HBase, HDFS, Hive, Cassandra 在内的多种数据库

    Spark与Hadoop

    Hadoop Spark
    类型 基础平台, 包含计算, 存储, 调度 分布式计算工具
    场景 大规模数据集上的批处理 迭代计算, 交互式计算, 流计算
    延迟
    易用性 API 较为底层, 算法适应性差 API 较为顶层, 方便使用
    价格 对机器要求低, 便宜 对内存有要求, 相对较贵

    Spark集群搭建

    1. 下载

      [Spark]:

      , 下载时候选择对应的 Hadoop 版本

    2. 修改配置文件spark-env.sh, 以指定运行参数

      • 进入配置目录, 并复制一份新的配置文件, 以供在此基础之上进行修改

        cd /export/servers/spark/conf
        cp spark-env.sh.template spark-env.sh
        vi spark-env.sh
        
      • 将以下内容复制进配置文件末尾

        # 指定 Java Home
        export JAVA_HOME=/export/servers/jdk1.8.0
        
        # 指定 Spark Master 地址
        export SPARK_MASTER_HOST=node01
        export SPARK_MASTER_PORT=7077
        
    3. 修改配置文件 slaves,以指定从节点为止, 从在使用 sbin/start-all.sh 启动集群的时候, 可以一键启动整个集群所有的 Worker

      • 进入配置目录, 并复制一份新的配置文件, 以供在此基础之上进行修改

        cd /export/servers/spark/conf
        cp slaves.template slaves
        vi slaves
        
      • 配置所有从节点的地址

        node02
        node03
        
    4. 配置 HistoryServer

      • 默认情况下, Spark 程序运行完毕后, 就无法再查看运行记录的 Web UI 了, 通过 HistoryServer 可以提供一个服务, 通过读取日志文件, 使得我们可以在程序运行结束后, 依然能够查看运行过程

      • 复制 spark-defaults.conf, 以供修改

        cd /export/servers/spark/conf
        cp spark-defaults.conf.template spark-defaults.conf
        vi spark-defaults.conf
        
      • 将以下内容复制到spark-defaults.conf末尾处, 通过这段配置, 可以指定 Spark 将日志输入到 HDFS 中

        spark.eventLog.enabled  true
        spark.eventLog.dir      hdfs://node01:8020/spark_log
        spark.eventLog.compress true
        
      • 将以下内容复制到spark-env.sh末尾, 配置 HistoryServer 启动参数, 使得 HistoryServer 在启动的时候读取 HDFS 中写入的 Spark 日志

        # 指定 Spark History 运行参数
        export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=4000 -Dspark.history.retainedApplications=3 -Dspark.history.fs.logDirectory=hdfs://node01:8020/spark_log"
        
      • 为 Spark 创建 HDFS 中的日志目录

        hdfs dfs -mkdir -p /spark_log
        
    5. 分发和运行

      • 将 Spark 安装包分发给集群中其它机器

        cd /export/servers
        scp -r spark root@node02:$PWD
        scp -r spark root@node03:$PWD
        
      • 启动 Spark Master 和 Slaves, 以及 HistoryServer

        cd /export/servers/spark
        sbin/start-all.sh
        sbin/start-history-server.sh
        
    6. sa

    Spark 集群高可用搭建

    保证zookeeper可用

    1. 停止 Spark 集群

      cd /export/servers/spark
      sbin/stop-all.sh
      
    2. 修改配置文件, 增加 Spark 运行时参数, 从而指定 Zookeeper 的位置

      • 进入 spark-env.sh 所在目录, 打开 vi 编辑

        cd /export/servers/spark/conf
        vi spark-env.sh
        
      • 编辑 spark-env.sh, 添加 Spark 启动参数, 并去掉 SPARK_MASTER_HOST 地址

        db287fa523a39bd1a5e277c3ccd10a26

        # 指定 Java Home
        export JAVA_HOME=/export/servers/jdk1.8.0_141
        
        # 指定 Spark Master 地址
        # export SPARK_MASTER_HOST=node01
        export SPARK_MASTER_PORT=7077
        
        # 指定 Spark History 运行参数
        export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=4000 -Dspark.history.retainedApplications=3 -Dspark.history.fs.logDirectory=hdfs://node01:8020/spark_log"
        
        # 指定 Spark 运行时参数
        export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=node01:2181,node02:2181,node03:2181 -Dspark.deploy.zookeeper.dir=/spark"
        
    3. 分发配置文件到整个集群

      cd /export/servers/spark/conf
      scp spark-env.sh node02:$PWD
      scp spark-env.sh node03:$PWD
      
    4. 启动

      • node01 上启动整个集群

        cd /export/servers/spark
        sbin/start-all.sh
        sbin/start-history-server.sh
        
      • node02 上单独再启动一个 Master

        cd /export/servers/spark
        sbin/start-master.sh
        
    5. 查看 node01 masternode02 master 的 WebUI

    6. Spark各服务端口

      Service port
      Master WebUI node01:8080
      Worker WebUI node01:8081
      History Server node01:4000

  • 相关阅读:
    Jmeter——引入第三方jar包
    Linux系统中安装和卸载node
    Element和Event中的各种offsetTop,clientTop,scrollTop等位置
    关于Linux下LaTeX无法找到已安装字体的问题与解决
    Ubuntu 21.04 使用命令行分配静态IP地址
    批量下载YouTube播放列表(playlist)视频、字幕
    修改tomcat的server.xml,context.xml文件后又自动还原问题
    Echarts legend属性设置
    剑指-30:包含min函数的栈
    无网安装Docker及Docker镜像的导入导出
  • 原文地址:https://www.cnblogs.com/xp-thebest/p/14253685.html
Copyright © 2020-2023  润新知