Spark框架概述、 Spark 框架模块详解、Spark 是什么、Spark 四大特点——速度快、易于使用、通用性强、运行方式多样

1. Spark 框架概述

Spark 是加州大学伯克利分校AMP实验室(Algorithms Machines and People Lab)开发的通用大数据框架。Spark生态圈也称为BDAS,是伯克利AMP实验室所开发的,力图在算法(Algorithms)、机器(Machines)和人(Person)三种之间通过大规模集成来展现大数据应用的一个开源平台。AMP实验室运用大数据、云计算等各种资源以及各种灵活的技术方案,对海量数据进行分析并转化为有用的信息,让人们更好地了解世界。

Spark的发展历史,经历过几大重要阶段,如下图所示:
在这里插入图片描述

Spark 是一种快速、通用、可扩展的大数据分析引擎,2009 年诞生于加州大学伯克利分校 AMPLab,2010 年开源, 2013年6月成为Apache孵化项目,2014年2月成为 Apache 顶级项目,用 Scala进行编写项目框架。

1.1 Spark 是什么

定义:Apache Spark是用于大规模数据(large-scala data)处理的统一(unified)分析引擎。

  • 官方网址:http://spark.apache.org/、https://databricks.com/spark/about

在这里插入图片描述

  • 官方定义:

在这里插入图片描述

Spark 最早源于一篇论文 Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing,该论文是由加州大学柏克莱分校的 Matei Zaharia 等人发表的。论文中提出了一种弹性分布式数据集(即 RDD)的概念,原文开头对其的解释是:

在这里插入图片描述

翻译过来就是:RDD 是一种分布式内存抽象,其使得程序员能够在大规模集群中做
内存运算,并且有一定的容错方式
。而这也是整个 Spark 的核心数据结构,Spark 整个平
台都围绕着RDD进行。

1.2 Spark 四大特点

Spark 使用Scala语言进行实现,它是一种面向、函数式编程语言,能够像操作本地集合一样轻松的操作分布式数据集。Spark具有运行速度快、易用性好、通用性强和随处运行等特点。

在这里插入图片描述

1.2.1 速度快

由于 Apache Spark 支持内存计算,并且通过 DAG(有向无环图)执行引擎支持无环数据流,所以官方宣称其在内存中的运算速度要比 Hadoop 的 MapReduce快 100 倍,在硬盘中要快 10 倍。

在这里插入图片描述

Spark处理数据与MapReduce处理数据相比,有如下两个不同点:

  • 其一、Spark处理数据时,可以将中间处理结果数据存储到内存中

在这里插入图片描述

  • 其二、Spark调度以DAG方式,并且每个任务Task执行以线程(Thread)方式,并不是天MapReduce以进程(Process)方式执行。

在这里插入图片描述

2014 年的如此Benchmark 测试中,Spark 秒杀Hadoop,在使用十分之一计算资源的情况下,相同数据的排序上,Spark 比Map Reduce快3倍

在这里插入图片描述

1.2.2 易于使用

Spark 的版本已经更新到 Spark 2.4.5,支持了包括 Java、Scala、Python 、R和SQL语言在内的多种语言。

在这里插入图片描述

1.2.3 通用性强

在 Spark 的基础上,Spark 还提供了包括 Spark SQL、Spark Streaming、MLib 及 GraphX 在内的多个工具库,我们可以在一个应用中无缝地使用这些工具库。其中,Spark SQL 提供了结构化的数据处理方式,Spark Streaming 主要针对流式处理任务(也是本书的重点),MLib 提供了很多有用的机器学习算法库,GraphX提供图形和图形并行化计算。

在这里插入图片描述

1.2.4 运行方式多样

Spark 支持多种运行方式,包括在 Hadoop 和 Mesos 上,也支持 Standalone的独立运行模式,同时也可以运行在云Kubernetes(Spark 2.3开始支持)上。

在这里插入图片描述

对于数据源而言,Spark 支持从HDFS、HBase、Cassandra 及 Kafka 等多种途径获取数据。

在这里插入图片描述

1.3 Spark 框架模块

整个 Spark 主要由 Spark Coke、 Spark SQL、 Spark Streaming、 Spark GraphX、 Spark MLlib组成,而后四项的能力都是建立在核心引擎之上 。

在这里插入图片描述

1.3.1 Spark Core

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

在这里插入图片描述

1.3.2 Spark SQL

Spark 用来操作结构化数据的程序包。通过 Spark SQL,我们可以使用 SQL操作数据。数据结构:Dataset/DataFrame = RDD + Schema

在这里插入图片描述

官网:http://spark.apache.org/sql/

1.3.3 Spark Streaming

Spark 提供的对实时数据进行流式计算的组件。提供了用来操作数据流的 API。 数据结构:DStream = Seq[RDD]

在这里插入图片描述

官网:http://spark.apache.org/streaming/

1.3.4 Spark MLlib

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

在这里插入图片描述

官网:http://spark.apache.org/mllib/

1.3.5 Spark GraphX

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

在这里插入图片描述

官网:http://spark.apache.org/graphx/

在Full Stack 理想的指引下,Spark 中的Spark SQL 、SparkStreaming 、MLLib 、GraphX 几大子框架和库之间可以无缝地共享数据和操作,这不仅打造了Spark 在当今大数据计算领域其他计算框架都无可匹敌的优势,而且使得Spark 正在加速成为大数据处理中心首选通用计算平台。

1.4 Spark 运行模式

Spark 框架编写的应用程序可以运行在本地模式(Local Mode)、集群模式(Cluster Mode)和云服务(Cloud),方便开发测试和生产部署。

在这里插入图片描述

  • 第一、本地模式:Local Mode

将Spark 应用程序中任务Task运行在一个本地JVM Process进程中,通常开发测试使用。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bOdNXX9D-1641908649911)(D:##myFile##learning\A-BIgData\mdfileImgPath\clip_image042.png)]

  • 第二、集群模式:Cluster Mode

将Spark应用程序运行在集群上,比如Hadoop YARN集群,Spark 自身集群Standalone及Apache Mesos集群,网址:http://spark.apache.org/docs/2.4.3/

在这里插入图片描述

Hadoop YARN集群模式**(生产环境使用):**运行在 yarn 集群之上,由 yarn 负责资源管理,Spark 负责任务调度和计算,好处:计算资源按需伸缩,集群利用率高,共享底层存储,避免数据跨集群迁移。

Spark Standalone集群模式**(开发测试及生成环境使用)**:类似Hadoop YARN架构,典型的Mater/Slaves模式,使用Zookeeper搭建高可用,避免Master是有单点故障的。

Apache Mesos集群模式(国内使用较少):运行在 mesos 资源管理器框架之上,由 mesos 负责资源管理,Spark 负责任务调度和计算。

  • 第三、云服务:Kubernetes 模式

中小公司未来会更多的使用云服务,Spark 2.3开始支持将Spark 开发应用运行到K8s上。

在这里插入图片描述

[hadoop@master module]$ python /opt/module/datax/bin/datax.py DataX (DATAX-OPENSOURCE-3.0), From Alibaba ! Copyright (C) 2010-2017, Alibaba Group. All Rights Reserved. Usage: datax.py [options] job-url-or-path Options: -h, --help show this help message and exit Product Env Options: Normal user use these options to set jvm parameters, job runtime mode etc. Make sure these options can be used in Product Env. -j <jvm parameters>, --jvm=<jvm parameters> Set jvm parameters if necessary. --jobid=<job unique id> Set job unique id when running by Distribute/Local Mode. -m <job runtime mode>, --mode=<job runtime mode> Set job runtime mode such as: standalone, local, distribute. Default mode is standalone. -p <parameter used in job config>, --params=<parameter used in job config> Set job parameter, eg: the source tableName you want to set it by command, then you can use like this: -p"-DtableName=your-table-name", if you have mutiple parameters: -p"-DtableName=your-table-name -DcolumnName=your-column-name".Note: you should config in you job tableName with ${tableName}. -r <parameter used in view job config[reader] template>, --reader=<parameter used in view job config[reader] template> View job config[reader] template, eg: mysqlreader,streamreader -w <parameter used in view job config[writer] template>, --writer=<parameter used in view job config[writer] template> View job config[writer] template, eg: mysqlwriter,streamwriter Develop/Debug Options: Developer use these options to trace more details of DataX. -d, --debug Set to remote debug mode. --
03-22
### DataX 的 `datax.py` 命令行参数及用法 DataX 是阿里巴巴开源的一款大的异构数据源离线同步工具,支持多种数据源之间的高效数据传输。以下是关于 `datax.py` 命令行参数及其使用的详细介绍。 #### 1. 数据同步的核心命令结构 运行 DataX 进行数据同步的核心命令如下所示: ```bash /opt/module/datax/bin/datax.py /path/to/json/config_file.json ``` 其中 `/path/to/json/config_file.json` 表示 JSON 配置文件的路径[^2]。此配置文件定义了数据读取器(Reader)、写入器(Writer)以及任务的具体参数。 --- #### 2. 支持的主要参数 除了指定 JSON 配置文件外,`datax.py` 提供了一些可选参数用于调试和性能调优: - **`--help` 或 `-h`**: 显示帮助信息并退出程序。 ```bash ./datax.py --help ``` - **`--loglevel` 或 `-l`**: 设置日志级别,默认为 INFO。可以通过该选项调整日志输出的详细程度,例如 DEBUG、WARN、ERROR 等。 ```bash ./datax.py config_file.json --loglevel=DEBUG ``` 此功能有助于排查问题时获取更详细的错误信息[^5]。 - **`--pluginconfdir` 或 `-p`**: 指定插件配置目录。如果自定义 Reader 和 Writer 插件,则需要通过此参数加载额外的插件配置。 ```bash ./datax.py config_file.json --pluginconfdir=/custom/plugins/ ``` - **`--speed-limit` 或 `-s`**: 控制单通道的数据流速限制(单位:KB/s)。适用于网络带宽有限或目标端负载较高的场景。 ```bash ./datax.py config_file.json --speed-limit=1024 ``` 上述例子表示每秒最多允许传输 1MB 数据[^4]。 - **`--channel-num` 或 `-c`**: 调整并发通道数以优化吞吐量。默认情况下会根据硬件资源自动分配,但也可以手动设置。 ```bash ./datax.py config_file.json --channel-num=4 ``` - **`--memory-limit` 或 `-m`**: 设定 JVM 内存上限来防止因大容量数据处理而导致 OOM 错误。 ```bash ./datax.py config_file.json --memory-limit=2g ``` --- #### 3. 实际应用中的注意事项 在实际部署过程中需要注意以下几点: - 如果解压后的 DataX 工具位于 `/opt/module/datax/` 目录下,则可以直接使用其自带的 Python 脚本启动任务而无需额外安装依赖环境。 - Java 应用可通过调用系统的 Shell 命令实现自动化调度[^3]。 - 对于复杂的业务需求,建议编写独立的 JSON 文件描述完整的任务逻辑,并将其存储在固定位置以便重复利用。 --- #### 4. 示例代码片段 下面是一个简单的脚本实例演示如何动态生成 JSON 并提交给 DataX 执行: ```python import json import subprocess # 定义JSON配置模板 config_template = { "job": { "content": [ { "reader": {"name": "txtfilereader", "parameter": {}}, "writer": {"name": "streamwriter", "parameter": {}} } ], "setting": {} } } # 动态填充具体参数 config_template["job"]["content"][0]["reader"]["parameter"] = { "path": "/input/path", "encoding": "utf-8" } config_template["job"]["content"][0]["writer"]["parameter"] = { "print": True } # 将字典转换成字符串形式保存到临时文件 json_str = json.dumps(config_template, indent=4) with open("/tmp/dynamic_config.json", "w") as f: f.write(json_str) # 调用subprocess执行datax.py result = subprocess.run( ["./datax.py", "/tmp/dynamic_config.json"], stdout=subprocess.PIPE, stderr=subprocess.PIPE ) if result.returncode != 0: print(f"Error occurred: {result.stderr.decode()}") else: print("Task completed successfully.") ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我:yueda

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值