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

原文地址:https://www.cnblogs.com/xp-thebest/p/14253685.html