Spark基础

一、spark基础

1、为什么使用Spark

Ⅰ、MapReduce编程模型的局限性

(1) 繁杂

只有Map和Reduce两个操作,复杂的逻辑需要大量的样板代码

(2) 处理效率低

Map中间结果写磁盘,Reduce写HDFS,多个Map通过HDFS交换数据 任务调度与启动开销大

(3) 不适合迭代处理、交互式处理和流式处理

Ⅱ、Spark是类Hadoop MapReduce的通用并行框架

(1) Job中间输出结果可以保存在内存,不再需要读写HDFS

(2) 比MapReduce平均快10倍以上

Ⅲ、Spark  VS Hadoop

Hadoop

Spark

类型

分布式基础平台,包含计算、存储、调度

分布式计算工具

场景

大规模数据集上的批处理

迭代计算、交互式计算、流计算

价格

对机器要求低,便宜

对内存有要求,相对较贵

编程范式

Map+Reduce,API较为底层,算法适应性差

RDD组成DAG有向无环图,API较为顶层,方便使用

数据存储结构

MpaReduce中间计算结果存在HDFS磁盘上,延迟大

RDD中间运算结果存在内存中,延迟小

运行方式

Task以进程方式维护,任务启动慢

Task以线程方式维护,任务启动快

2、Spark简介

诞生于加州大学伯克利分校AMP实验室,是一个基于内存的分布式计算框架

        发展历程:

        2009年诞生于加州大学伯克利分校AMP实验室

        2010年正式开源 2013年6月正式成为Apache孵化项目

        2014年2月成为Apache顶级项目

        2014年5月正式发布Spark 1.0版本

        2014年10月Spark打破MapReduce保持的排序记录

        2015年发布了1.3、1.4、1.5版本

        2016年发布了1.6、2.x版本

        ......

Hadoop 之父 Doug Cutting 指出:

Use of MapReduce engine for Big Data projects will decline, replaced by Apache Spark

(大数据项目的 MapReduce 引擎的使用将下降,由 Apache Spark 取代)。

3、Spark优势

(1)速度快

        基于内存数据处理,比MR快100个数量级以上(逻辑回归算法测试)

        基于硬盘数据处理,比MR快10个数量级以上

(2)易用性

        支持Java、Scala、Python、R语言 交互式shell方便开发测试

(3)通用性

        一栈式解决方案:批处理、交互式查询、实时流处理、图计算及机器学习

(4)多种运行模式

        YARN、Mesos、EC2、Kubernetes、Standalone、Local

4、Spark技术栈

(1)Spark Core

        核心组件,分布式计算引擎。

        实现了 Spark 的基本功能,包含 RDD、任务调度、内存管理、错误恢复、与存储系统交互等模块。

(2)Spark SQL

        高性能的基于Hadoop的SQL解决方案。

        Spark 用来操作结构化数据的程序包。通过 Spark SQL,我们可以使用 SQL 操作数据。

(3)Spark Streaming

        可以实现高吞吐量、具备容错机制的准实时流处理系统。

        Spark 提供的对实时数据进行流式计算的组件。提供了用来操作数据流的 API。

(4)Spark GraphX(图计算)

        分布式图处理框架。

        Spark 中用于图计算的 API,性能良好,拥有丰富的功能和运算符,能在海量数据上自如地运行复杂的图算法。

(5)Spark MLlib

        构建在Spark上的分布式机器学习库。

        提供常见的机器学习(ML)功能的程序库。包括分类、回归、聚类、协同过滤等,还提供了模型评估、数据导入等额外的支持功能。

(6)其他

        集群管理器:Spark 设计为可以高效地在一个计算节点到数千个计算节点之间伸缩计算。

        Structured Streaming:处理结构化流,统一了离线和实时的 API。

二、安装spark

spark下载地址https://archive.apache.org/dist/spark/spark-2.2.0/spark-2.2.0-bin-hadoop2.7.tgz

1、通过Xftp上传文件

2、解压文件至指定的安装目录

tar -zxvf /opt/install/scala-2.12.10.tgz -C /opt/soft/
tar -zxvf /opt/install/spark-3.1.2-bin-hadoop3.2.tgz -C /opt/soft/

3、进入安装目录更改名字

mv ./scala-2.12.10.tgz ./scala212
mv ./spark-3.1.2-bin-hadoop3.2.tgz ./spark312

4、配置环境变量

#SCALA
export SCALA_HOME=/opt/soft/scala212
export PATH=$SCALA_HOME/bin:$PATH
#SPARK
export SPARK_HOME=/opt/soft/spark312
export PATH=$SPARK_HOME/bin:$PATH

   !!! source /etc/profile

5、启动Scala

6、Spark环境部署

(1)进入/opt/soft/spark312/conf拷贝文件
cp ./workers.template ./workers
cp ./spark-env.sh.template ./spark-env.sh
(2)配置workers
# 编辑文件
vim workers
# 配置文件
localhost

(3)配置spark-env.sh
# 编辑文件
vim ./spark-env.sh
# 配置文件
export SCALA_HOME=/opt/soft/scala212
export JAVA_HOME=/opt/soft/jdk180
export SPARK_HOME=/opt/soft/spark312
export HADOOP_INSTALL=/opt/soft/hadoop313
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export SPARK_MASTER_IP=192.168.91.11
export SPARK_DRIVER_MEMORY=2G
export SPARK_EXECUTOR_MEMORY=2G
export SPARK_LOCAL_DIRS=/opt/soft/spark312
# 保存退出
:wq
# 刷新
source

7、启动交互式平台

spark-shell

8、Spark运行模式

(1)local 本地模式(单机)

        学习测试使用,分为local单线程和local-cluster多线程。

(2)standalone 独立集群模式

        学习测试使用,典型的Master/slave。

(3)standalone-HA 高可用模式

        生产环境使用,基于standalone模式,使用zk搭建高可用,避免Master是有单点故障的。

(4)on yarn 集群模式

        生产环境使用,运行在yarn负责资源管理,Spark负责任务调度和计算。

        好处:计算资源按需伸缩,集群利用率高,共享底层存储,避免数据跨集群迁移。

(5)on mesos 集群模式

        国内使用较少,运行在mesos资源管理器框架之上,由mesos负责资源管理,Spark负责任务调度和计算。

(6)on cloud 集群模式

        中小型公司未来会更多的使用云服务,比如AWS的EC2,使用这个模式能很方便的访问Amazon的S3。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/129671.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C/C++】指针函数与函数指针

1、指针函数--指针作为函数的返回值 指针函数本质是一个函数&#xff0c;只不过函数的返回值是一个指针 #include <stdio.h> #include <malloc.h> #include <string.h>char * funGetString(); int main() {char * sentence funGetString();printf(" %…

Java练习题-用冒泡排序法实现数组排序

✅作者简介&#xff1a;CSDN内容合伙人、阿里云专家博主、51CTO专家博主、新星计划第三季python赛道Top1&#x1f3c6; &#x1f4c3;个人主页&#xff1a;hacker707的csdn博客 &#x1f525;系列专栏&#xff1a;Java练习题 &#x1f4ac;个人格言&#xff1a;不断的翻越一座又…

域信息收集

DMZ&#xff0c;是英文“demilitarized zone”的缩写&#xff0c;中文名称为“隔离区”&#xff0c;也称“非军事化区”。它是为了解决安装防火墙后外部网络的访问用户不能访问内部网络服务器的问题&#xff0c;而设立的一个非安全系统与安全系统之间的缓冲区。该缓冲区位于企业…

Lua系列文章(1)---Lua5.4参考手册学习总结

windows系统上安装lua,下载地址&#xff1a; Github 下载地址&#xff1a;https://github.com/rjpcomputing/luaforwindows/releases 可以有一个叫SciTE的IDE环境执行lua程序 1 – 简介 Lua 是一种强大、高效、轻量级、可嵌入的脚本语言。 它支持过程编程&#xff0c; 面向对…

android Google官网 :支持不同的语言和文化 rtl / ltr : 本地化适配:RTL(right-to-left) 适配

参考 google官网&#xff1a; 支持不同的语言和文化 应用包含可能专门针对特定文化而设计的资源。例如&#xff0c;应用可以包含针对特定文化的字符串&#xff0c;这些字符串将转换为当前语言区域的语言。 将具有文化特异性的资源与应用的其他资源分开是一种很好的做法。And…

vue,mixins混入

痛点&#xff1a;当我们的项目越来越庞大&#xff0c;项目中的某些组件之间可能会存在一些相似的功能&#xff0c;这就导致了在各个组件中需要编写功能相同的代码段&#xff0c;重复地定义这些相同的属性和方法&#xff0c;导致代码地冗余&#xff0c;还不利于后期代码的维护。…

计算机竞赛 题目:基于机器视觉opencv的手势检测 手势识别 算法 - 深度学习 卷积神经网络 opencv python

文章目录 1 简介2 传统机器视觉的手势检测2.1 轮廓检测法2.2 算法结果2.3 整体代码实现2.3.1 算法流程 3 深度学习方法做手势识别3.1 经典的卷积神经网络3.2 YOLO系列3.3 SSD3.4 实现步骤3.4.1 数据集3.4.2 图像预处理3.4.3 构建卷积神经网络结构3.4.4 实验训练过程及结果 3.5 …

DATA URL:嵌入 URL 中的数据资源

文章目录 参考环境DATA URL概念结构DATA URL 的优缺点优点缺点 DATA URL 与图片获取图片的 Base64 编码结果在 HTML 中应用 DATA URL 以展示图片 DATA URL 与 allow_url_fopen 及 allow_url_include 配置项allow_url_fopen 配置项allow_url_include 配置项allow_url_fopen 与 a…

服务器数据恢复-V7000存储2块磁盘故障脱机的数据恢复案例

服务器数据恢复环境&#xff1a; P740AIXSybaseV7000存储&#xff0c;存储阵列柜上共12块SAS机械硬盘&#xff08;其中一块为热备盘&#xff09;。 服务器故障&#xff1a; 存储阵列柜中有磁盘出现故障&#xff0c;工作人员发现后更换磁盘&#xff0c;新更换的磁盘数据同步到40…

零基础快速自学SQL,2天足矣。

此文是《10周入门数据分析》系列的第6篇。 想了解学习路线&#xff0c;可以先行阅读“ 学习计划 | 10周入门数据分析 ” 上一篇分享了数据库的基础知识&#xff0c;以及如何安装数据库&#xff0c;今天这篇分享数据库操作和SQL。 SQL全称是 Structured Query Language&#x…

Android约束布局ConstraintLayout的Guideline,CardView

Android约束布局ConstraintLayout的Guideline&#xff0c;CardView <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:a…

力扣刷题 day39:10-09

1.统计有序矩阵中的负数 给你一个 m * n 的矩阵 grid&#xff0c;矩阵中的元素无论是按行还是按列&#xff0c;都以非递增顺序排列。 请你统计并返回 grid 中 负数 的数目。 方法一&#xff1a;二分法 #方法一&#xff1a;二分法 def countNegatives(grid):res0for nums in…