zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    input搜索框实时检索功能实现(超简单,核心原理请看思路即可)
    django blank 和autonow
    dwebsocket的坑
    vue 动态添加active+父子传值
    NO 2,人生苦短,我学python之python+selenium元素定位
    NO 1,人生苦短,我学python之python+selenium自动化环境搭建
    SPU与SKU概念
    数据库,缓存数据一致性常用解决方案总结
    利用注解 + 反射消除重复代码
    Nacos学习与实战
  • 原文地址:https://www.cnblogs.com/xp-thebest/p/14253685.html
Copyright © 2011-2022 走看看