spark总结
一: spark 概述
1. Spark 是 分布式内存计算框架
Apache Spark 是一个快速的, 多用途的集群计算系统, 相对于 Hadoop MapReduce 将中间结果保存在磁盘中,
Spark 使用了内存保存中间结果, 能在数据尚未写入硬盘时在内存中进行运算.
1. Spark是Apache的开源框架
2. Spark的母公司叫做 Databricks
3. Spark 是为了解决 MapReduce 等过去的计算系统无法在内存中保存中间结果的问题
4. Spark 的核心是 RDDs, RDDs 不仅是一种计算框架, 也是一种数据结构

二: Spark的特点
1. 速度快
spark为什么比hadoop要快?
1. mapreduce的计算结果保存在HDFS中,而spark的数据首先是保存在内存中,内存不够后才保存在磁盘中(从内存读取数据比从磁盘/HDFS中速度更快)
2. mapreduce的task是进程级别的,spark的task是线程级别的.
2. 易用
Spark 支持 Java, Scala, Python, R, SQL 等多种语言的API.
3. 通用
Spark 提供一个完整的技术栈, 包括 SQL执行, Dataset命令式API, 机器学习库MLlib,
图计算框架GraphX, 流计算SparkStreaming等
4. 兼容
Spark 可以运行在 Hadoop Yarn, Apache Mesos, Kubernets, Spark Standalone等集群中
Spark 可以访问 HBase, HDFS, Hive, Cassandra 在内的多种数据库
总结:
1. 支持Java,Scala,Python 和R的API
2. 可扩展超过8K个节点
3. 能够在内存中缓存数据集,以实现交互式数据分析
4. 提供命令行窗口,减少探索式的数据分析的反应时间

三: Spark 的组件
1. Spark-Core 和 弹性分布式数据集(RDDs)
Spark 最核心的功能是 RDDs, RDDs 存在于 spark-core 这个包内, 这个包也是 Spark 最核心的包.
Spark-Core 是整个 Spark 的基础, 提供了分布式任务调度和基本的 I/O 功能
Spark 的基础的程序抽象是弹性分布式数据集(RDDs), 是一个可以并行操作, 有容错的数据集合
2. Sprk SQL
Spark SQL 在 spark-core 基础之上带出了一个名为 DataSet 和 DataFrame 的数据抽象化的概念
Spark SQL 提供了在 Dataset 和 DataFrame 之上执行 SQL 的能力
Spark SQL 提供了 DSL, 可以通过 Scala, Java, Python 等语言操作 DataSet 和 DataFrame
它还支持使用 JDBC/ODBC 服务器操作 SQL 语言
3. Spark Streaming
Spark Streaming 充分利用 spark-core 的快速调度能力来运行流分析
它截取小批量的数据并可以对之运行 RDD Transformation(按照时间切分数据)
4. MLlib
MLlib 是 Spark 上分布式机器学习的框架. Spark分布式内存的架构 比 Hadoop磁盘式 的 Apache Mahout 快上 10 倍, 扩展性也非常优良
MLlib 可以使用许多常见的机器学习和统计算法, 简化大规模机器学习
汇总统计, 相关性, 分层抽样, 假设检定, 随即数据生成
支持向量机, 回归, 线性回归, 逻辑回归, 决策树, 朴素贝叶斯
协同过滤, ALS
K-means
SVD奇异值分解, PCA主成分分析
TF-IDF, Word2Vec, StandardScaler
SGD随机梯度下降, L-BFGS
5. Graphx
GraphX 是分布式图计算框架, 提供了一组可以表达图计算的 API, GraphX 还对这种抽象化提供了优化运行

四: Spark集群结构
1. spark集群结构
1. Master
负责集群管理,资源分配
2. Workder
任务执行节点
executor:进程,用来执行任务的进程
task:要执行的任务
3. Driver
1. 运行main方法
2. 创建SparkContext对象。SparkContext是spark程序的入口,负责任务的切分以及任务的调度
运行一个 Spark 程序大致经历如下几个步骤
1. 启动 Drive, 创建 SparkContext
2. Client 提交程序给 Drive, Drive 向 Cluster Manager 申请集群资源
3. 资源申请完毕, 在 Worker 中启动 Executor
4. Driver 将程序转化为 Tasks, 分发给 Executor 执行
spark可以使用如下几个集群管理工具:
1. Spark Standalone
2. Hadoop Yarn
3. Apache Mesos
4. Kubernets
常用的是:2,3,4
2. Driver 和 Worker 什么时候被启动?
1. 在Standalone集群模式中,
Worker在集群启动的时候就会启动
Driver启动的分为两种模式:
1. 在Client模式下时, Driver 运行在 Client 端, 在 Client 启动的时候被启动.
2. 在 Cluster 模式下, Driver 运行在某个 Worker中,任务提交的时候启动,任务结束时,Driver消失
2. 在 spark on yarn 模式下
1、Worker相当于不存在,executor启动在nodemanager上的container
2、Driver是在任务提交的时候才会启动,任务结束,Driver消失
spark on yarn中client与Cluster的区别?
client模式的时候Driver在client端,client端不能够关闭。关闭之后Driver消失,不能进行任务的切分和调度,导致spark任务失败
cluster模式的时候Driver在AppMaster所处的位置,client端可以关闭

五: 集群搭建(个人搭建,公司搭建使用CDH)
准备工作: 分配好资源
步骤1 下载和解压
下载 Spark 安装包, 下载时候选择对应的 Hadoop 版本(避免版本不兼容问题)
下载地址 https://archive.apache.org/dist/spark/spark-2.2.0/spark-2.2.0-bin-hadoop2.7.tgz
上传/解压到指定目录
tar xzvf spark-2.2.0-bin-hadoop2.7.tgz -C /export/servers

步骤2 修改配置文件 spark-env.sh
cd /export/servers/spark/conf
vim 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 slave
配置所有从节点的地址
node02
node03

步骤4 配置 HistoryServer
默认情况下, Spark 程序运行完毕后, 就无法再查看运行记录的 Web UI 了, 通过 HistoryServer
可以提供一个服务, 通过读取日志文件, 使得我们可以在程序运行结束后, 依然能够查看运行过程
1. 复制 spark-defaults.conf, 以供修改
2. 将以下内容复制到spark-defaults.conf末尾处, 通过这段配置, 可以指定 Spark 将日志输入到 HDFS 中
spark.eventLog.enabled true
spark.eventLog.dir hdfs://node01:8020/spark_log
spark.eventLog.compress true
3. 将以下内容复制到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"
4. 为 Spark 创建 HDFS 中的日志目录
hdfs dfs -mkdir -p /spark_log

步骤5 分发和运行
将 Spark 安装包分发给集群中其它机器
启动 Spark Master 和 Slaves, 以及 HistoryServer
cd /export/servers/spark
sbin/start-all.sh
sbin/start-history-server.sh

spark集群高可用搭建
在上述的基础上
步骤1 spark-env.sh, 添加 Spark 启动参数, 并去掉 SPARK_MASTER_HOST 地址
# 指定 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"

步骤2 分发配置文件到整个集群
步骤3 启动集群
在 node01 上启动整个集群
在 node02 上单独再启动一个 Master
步骤4 查看 node01 master 和 node02 master 的 WebUI

Spark各服务端口
Master WebUI -> node01:8080
Worker WebUI -> node01:8081
History Server -> node01:4000

六: 应用运行示例
步骤1 进入 Spark 安装目录中(或者配置环境变量可省去)
cd /export/servers/spark/
步骤2 运行 Spark 示例任务
bin/spark-submit
–class org.apache.spark.examples.SparkPi
–master spark://node01:7077,node02:7077 \ (根据开启的master来写)
–executor-memory 1G
–total-executor-cores 2
/export/servers/spark/examples/jars/spark-examples_2.11-2.2.3.jar
100
步骤3 运行结果
Pi is roughly 3.141550671141551

七: Spark 入门案例
编写 Spark 程序的两种常见方式
spark-shell
spark-submit
1. Spark shell 的方式编写 WordCount
第一步 创建maven工程 增加 Scala支持
第二步 编写 Maven 配置文件 pom.xml(配置依赖,复制)

     <properties><scala.version>2.11.8</scala.version><spark.version>2.2.0</spark.version><slf4j.version>1.7.16</slf4j.version><log4j.version>1.2.17</log4j.version></properties><dependencies><dependency><groupId>org.scala-lang</groupId><artifactId>scala-library</artifactId><version>${scala.version}</version></dependency><dependency><groupId>org.apache.spark</groupId><artifactId>spark-core_2.11</artifactId><version>${spark.version}</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>2.6.0</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>jcl-over-slf4j</artifactId><version>${slf4j.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${slf4j.version}</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>${slf4j.version}</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>${log4j.version}</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.10</version><scope>provided</scope></dependency></dependencies><build><sourceDirectory>src/main/scala</sourceDirectory><testSourceDirectory>src/test/scala</testSourceDirectory><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.0</version><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin><plugin><groupId>net.alchim31.maven</groupId><artifactId>scala-maven-plugin</artifactId><version>3.2.0</version><executions><execution><goals><goal>compile</goal><goal>testCompile</goal></goals><configuration><args><arg>-dependencyfile</arg><arg>${project.build.directory}/.scala_dependencies</arg></args></configuration></execution></executions></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>3.1.1</version><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><filters><filter><artifact>*:*</artifact><excludes><exclude>META-INF/*.SF</exclude><exclude>META-INF/*.DSA</exclude><exclude>META-INF/*.RSA</exclude></excludes></filter></filters><transformers><transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"><mainClass></mainClass></transformer></transformers></configuration></execution></executions></plugin></plugins></build>因为在 pom.xml 中指定了 Scala 的代码目录, 所以创建目录 src/main/scala 和目录 src/test/scala

第三步: 编写代码

         object WordCounts {def main(args: Array[String]): Unit = {// 1. 创建 Spark Contextval conf = new SparkConf().setMaster("local[2]")val sc: SparkContext = new SparkContext(conf)// 2. 读取文件并计算词频val source: RDD[String] = sc.textFile("hdfs://node01:8020/dataset/wordcount.txt", 2)val words: RDD[String] = source.flatMap { line => line.split(" ") }val wordsTuple: RDD[(String, Int)] = words.map { word => (word, 1) }val wordsCount: RDD[(String, Int)] = wordsTuple.reduceByKey { (x, y) => x + y }// 3. 查看执行结果println(wordsCount.collect)}}

第四步: 运行
spark 独立应用大致有两种方式, 一种是直接在 IDEA 中调试,
另一种是可以在提交至 Spark 集群中运行, 而 Spark 又支持多种集群, 不同的集群有不同的运行方式

spark-submit 集群运行方式的参数说明
bin/spark-submit
–class
–master
–deploy-mode
–conf =
… # other options

[application-arguments]
1) --class : 指定运行的主类[带有main方法object]
2) --master : 指定资源管理器的位置 standalone:spark://node01:7077:7077,node02, yarn:yarn
3) --deploy-mode : 指定运行模式<client/cluster>
4) --executor-core : 指定每个executor的CPU核数<只用于spark on yarn>
5) --executor-memory : 指定每个executor的内存大小
6) --num-executor : 指定executor的个数<只用于spark on yarn>
7) --driver-memory : 指定 Driver的内存大小
8) --queue :指定队列
9) --total-executor-cores 指定executor的总CPU核数<用于standalone或者spark on mesos模式>

spark-shell
1、启动方式: spark-shell --master <local[num]/yarn/spark://node01:7077>
2、spark-shell中已经自动创建了sparkcontext,赋值为sc
读取HDFS文件
1、读取方式:
1、sc.textFile(“hdfs://node01:8020/…”)
2、sc.textFile(“hdfs:///user/”) [必须在配置文件中配置HADOOP配置文件的路径]
3、sc.textFile("/user/hdfs/…") [必须在配置文件中配置HADOOP配置文件的路径]

spark学习基础篇1--spark概述与入门相关推荐

  1. Spark学习之路一——Spark基础及环境搭建

    Spark学习之路一--Spark基础及环境搭建 文章目录 一. Spark 概述 1.1 概述 1.2 优势特性 1.2.1 运行速度快 1.2.2 容易使用 1.2.3 通用性 1.2.4 运行模 ...

  2. Spark学习(1)-Spark基础

    1 spark定义 定义:Apache Spark是用于大规模数据(large-scala data)处理的统一(unified)分析引擎. Spark是一款分布式内存计算的统一分析引擎. 其特点就是 ...

  3. SQL学习——基础篇

    SQL学习--基础篇 0. 数据库的概念 0.1 数据库设计的基本步骤 1. SQL的语法特点 2. SQL数据类型 2.1 常用类型 2.2 text类型 2.3 number类型 2.4 date ...

  4. python传递参数格式_Python语言学习基础篇之Python发送Post请求之根据参数位置传参、数据类型、不同方式传参...

    本文主要介绍了Python语言学习基础篇之Python发送Post请求之根据参数位置传参.数据类型.不同方式传参,通过具体的内容向大家展现,希望对大家Python语言的学习有所帮助. 目录 一.验证 ...

  5. 回溯法采用的搜索策略_强化学习基础篇(三十四)基于模拟的搜索算法

    强化学习基础篇(三十四)基于模拟的搜索算法 上一篇Dyna算法是基于真实经验数据和模拟经验数据来解决马尔科夫决策过程的问题.本篇将结合前向搜索和采样法,构建更加高效的搜索规划算法,即基于模拟的搜索算法 ...

  6. LINUX学习基础篇(六)帮助命令

    LINUX学习基础篇(六)帮助命令 帮助命令 man(Manual) info help - -help 帮助命令 man(Manual) 作用:查看联机帮助手册. 执行权限:所有用户. man命令的 ...

  7. LINUX学习基础篇(十二)痕迹命令

    LINUX学习基础篇(十二)痕迹命令 系统痕迹命令 w命令 who命令 last命令 lastlog命令 lastb命令 系统痕迹命令 系统中有一些重要的痕迹日志文件,如/var/log/wtmp./ ...

  8. LINUX学习基础篇(十五)软件包管理

    LINUX学习基础篇(十五)软件包管理 软件包管理 软件包分类 源码包 二进制包 选择 依赖性 rpm包安装 rpm包命名规则 rpm包安装和卸载 服务命令 rpm查询命令 验证 数字证书 rpm中文 ...

  9. 深度学习基础篇【5】从0开始搭建YOLOV5 并进行测试

    深度学习基础篇[5] 从0开始搭建 YOLOV5  并进行测试 如何评价YOLO V5,那就必须拿"上一代"YOLO V4来做对照了.先说结论,YOLO V5 在性能上稍弱于YOL ...

最新文章

  1. 机器“血液”登上Nature:一条假鱼靠它续航36小时,无需固态电池
  2. Ubuntu 16.04 LTS下编译GPU版tensorflow
  3. .Net Telerik Web UI 安装和使用入门
  4. java做 excel文件的 导入导出 (SSM+layer)
  5. leetcode574. 当选者(SQL)
  6. Protobuffer教程
  7. 数据结构_C语言_实验一_线性结构 ——一元多项式求导
  8. linux做伪分布时ip设置,Linux下伪分布模式的Hadoop部署
  9. 【链表】链表中倒数最后k个节点
  10. jQuery1.3以上版本@的问题
  11. dedecms flag标签属性
  12. div3 C. Dominant Piranha
  13. 第四集:让声音变得更有磁性 —— 共鸣训练(汇播课程演说笔记)
  14. 【基础数学】单射、满射和双射的定义、区别
  15. APP跟网址最常见的攻击和防守
  16. 放射组学常用到的一些工具(软件)
  17. python-名字按拼音排序-(用pypinyin)
  18. 如何构建高质量的 QA 问答知识库
  19. session过期时间设置
  20. 杜比的发展历史是什么?

热门文章

  1. 1020 月饼 (25分) 冒泡排序
  2. camunda数据库表结构介绍
  3. 机器学习第三课--LWR的疑惑与想法
  4. 福特汉姆大学计算机科学专业,福特汉姆大学研究生学院
  5. 【JDBC】连接MySQL数据库实现增删改查
  6. 纯c++实现光线追踪渲染器
  7. AI实现的两种方案,暴力推演与因果率
  8. 判断是否多喝一瓶酸奶
  9. 计算机显卡的安装步骤简约,自己组装电脑:显卡安装教程
  10. 【Android Gradle 插件】 Splits 配置 ② ( Splits#abi{} 脚本块配置 | 根据 CPU 架构进行分包 | AbiSplitOptions 配置简介 )