大数据 spark hive 总结
Apache Spark
简介
是一个开源的统一分析引擎,专为大规模数据处理而设计。它提供了高级API,支持Java、Scala、Python和R语言,并且包含了一个优化过的执行引擎,该引擎支持循环计算(如机器学习算法)和交互式查询。以下是Spark的一些关键特性和概念
核心特性
-
速度:Spark通过内存计算提高了数据处理的速度,比Hadoop MapReduce快达10到100倍。
-
易用性:提供丰富的高层次API,包括DataFrame和Dataset API,简化了数据操作。
-
通用性:除了Map和Reduce操作之外,还支持SQL查询、流处理、机器学习和图计算等多种工作负载。
-
可扩展性:能够有效地在数千个节点上并行运行。
-
容错性:使用RDD(Resilient Distributed Dataset)抽象层,自动处理节点故障恢复。
基本概念
1. RDD (Resilient Distributed Dataset)
-
定义:
RDD 是 Spark 的最底层抽象,表示分布在集群节点上的不可变、可分区的数据集合。它提供低级别的 API,强调对数据的细粒度控制。 -
特点:
-
强类型:存储任意类型的对象(如
RDD[User])。 -
手动优化:需要开发者自行处理序列化、分区、缓存等优化。
-
函数式操作:通过
map、filter、reduce等函数式算子处理数据。 -
容错性:通过血统(Lineage)机制重建丢失的分区。
-
-
适用场景:
非结构化数据、需要精细控制的分布式计算(如自定义分区策略)。
2. DataFrame
-
定义:
DataFrame 是基于 RDD 构建的结构化数据抽象,类似于关系型数据库的表或 Pandas 的 DataFrame。在 Spark 1.3 中引入。 -
特点:
-
Schema 约束:数据具有明确的结构(列名、数据类型),通过
Row对象表示行。 -
优化执行:利用 Catalyst 优化器和 Tungsten 执行引擎,自动优化查询计划。
-
API 类型:弱类型 API(列名在运行时检查),支持 SQL 语法。
-
跨语言支持:在 Java、Scala、Python、R 中接口一致。
-
-
适用场景:
结构化/半结构化数据(如 JSON、CSV)、SQL 式查询、需要自动优化的批处理。
3. Dataset
-
定义:
Dataset 是 Spark 1.6 引入的 API,结合了 RDD 的强类型特性和 DataFrame 的优化引擎。仅在 Scala 和 Java 中可用。 -
特点:
-
强类型 + 结构化:兼具
RDD的类型安全(如Dataset[User])和DataFrame的优化能力。 -
统一 API:与 DataFrame API 兼容(DataFrame =
Dataset[Row])。 -
编码器(Encoder):使用高效的二进制序列化(优于 Java 序列化)。
-
-
适用场景:
需要类型安全的复杂业务逻辑、结合函数式和关系式操作的场景。
核心区别对比
| 特性 | RDD | DataFrame | Dataset |
|---|---|---|---|
| 数据类型 | 任意对象(强类型) | 结构化的 Row 对象(弱类型) | 强类型对象(如 Dataset[User]) |
| 序列化 | Java 序列化(较慢) | Tungsten 二进制编码(高效) | Encoder 序列化(高效) |
| 优化 | 无自动优化,需手动调优 | Catalyst 优化器自动优化 | Catalyst 优化器自动优化 |
| API 风格 | 函数式(map, filter) | 声明式(SQL/DSL) | 混合式(强类型 API + DSL) |
| 类型安全 | 编译时类型检查 | 运行时类型检查 | 编译时类型检查 |
| 语言支持 | 所有 Spark 语言 | 所有 Spark 语言 | 仅 Scala/Java |
演进关系
-
Spark 1.x:RDD → DataFrame(为结构化数据优化)。
-
Spark 2.x:DataFrame 和 Dataset 统一为
Dataset[T](DataFrame =Dataset[Row])。
如何选择?
-
优先用 DataFrame/Dataset:
大多数场景下,结构化数据处理更高效(Catalyst 优化 + Tungsten)。 -
需要类型安全时用 Dataset:
如 Scala/Java 中复杂业务逻辑。 -
仅底层控制时用 RDD:
如自定义分区、非结构化数据,或需直接操作分布式数据。
代码示例

spark-submit 参数
在 Spark 中,spark-submit 是提交作业到集群的核心命令。以下是常用参数及其作用,分为 基础参数、资源参数和 调优参数:
一、基础参数
| 参数 | 说明 | 示例 |
|---|---|---|
--master | 指定集群模式 | yarn, local[*], spark://host:port, k8s://... |
--deploy-mode | 部署模式(客户端或集群) | client(默认)或 cluster(适合生产) |
--class | 主类名(含包路径) | --class com.example.MainApp |
--name | 作业名称(显示在集群UI) | --name "My Spark Job" |
--files | 上传文件到 Executor(如配置文件) | --files config.json |
--jars | 添加依赖的 JAR 包(逗号分隔) | --jars lib1.jar,lib2.jar |
--packages | 从仓库自动下载依赖(Maven格式) | --packages org.apache.kafka:kafka-clients:3.4.0 |
二、资源参数
| 参数 | 说明 | 示例 | 注意事项 |
|---|---|---|---|
--executor-memory | 每个 Executor 的内存 | --executor-memory 4g | 需预留内存给系统和开销(如总内存的10%) |
--driver-memory | Driver 进程的内存 | --driver-memory 2g | 客户端模式下需本地足够内存 |
--num-executors | Executor 数量 | --num-executors 10 | 根据集群资源动态调整 |
--executor-cores | 每个 Executor 的 CPU 核数 | --executor-cores 2 | 总核数 = num-executors * executor-cores |
--total-executor-cores | 所有 Executor 的总核数(Standalone 模式) | --total-executor-cores 20 | 优先级低于 num-executors |
三、调优参数
| 参数 | 说明 | 示例 | 用途 |
|---|---|---|---|
--conf spark.serializer | 指定序列化方式 | --conf spark.serializer=org.apache.spark.serializer.KryoSerializer | 优化序列化性能 |
--conf spark.sql.shuffle.partitions | 调整 Shuffle 分区数 | --conf spark.sql.shuffle.partitions=200 | 避免数据倾斜或分区过大 |
--conf spark.default.parallelism | 默认并行度 | --conf spark.default.parallelism=100 | 控制 RDD 的分区数 |
--conf spark.memory.fraction | Executor 内存中用于执行和存储的比例 | --conf spark.memory.fraction=0.6 | 调整内存分配策略 |
--conf spark.dynamicAllocation.enabled | 启用动态资源分配 | --conf spark.dynamicAllocation.enabled=true | 按需增减 Executor(需集群支持) |
示例命令

关键注意事项
-
资源分配
-
总内存和核数不能超过集群资源上限。
-
在 YARN 模式下,
--executor-memory包含堆外内存,需预留约 10% 的额外内存(如申请4g,实际可用约4g * 0.9)。
-
-
动态资源分配
-
启用
spark.dynamicAllocation.enabled=true时需配置spark.shuffle.service.enabled=true(YARN 需启动 Shuffle Service)。
-
-
依赖管理
-
优先使用
--packages自动下载依赖,避免手动传 JAR。 -
本地依赖用
--jars,集群依赖需预先上传到 HDFS 或共享存储。
-
-
日志与调试
-
添加
--conf spark.eventLog.enabled=true记录事件日志。 -
在客户端模式下,Driver 日志输出到控制台;集群模式下需通过集群 UI 查看。
-
参数优化场景
-
数据倾斜:增大
spark.sql.shuffle.partitions或使用repartition。 -
OOM 错误:增加
executor-memory或调整spark.memory.fraction。 -
CPU 瓶颈:增加
num-executors或executor-cores。 -
网络超时:调整
spark.network.timeout(默认 120s)。
hive
Hive 是构建在 Hadoop 生态系统之上的数据仓库工具,旨在简化大规模数据的查询和管理。它通过类 SQL 语法(HiveQL)将结构化数据操作转化为 MapReduce、Tez 或 Spark 任务,适合处理海量数据(如日志、用户行为等)。以下是其核心概念和用法:
Hive 核心特性
| 特性 | 描述 |
|---|---|
| SQL-like 语法 | 支持类似 SQL 的查询语言(HiveQL),降低大数据处理的学习成本。 |
| 数据存储 | 数据存储在 HDFS(Hadoop 分布式文件系统)中,支持多种文件格式(如 ORC、Parquet)。 |
| 元数据管理 | 使用 Metastore(如 MySQL)存储表结构、分区等元信息。 |
| 扩展性 | 支持自定义函数(UDF)、SerDe(序列化/反序列化工具)等扩展功能。 |
| 批处理 | 基于 MapReduce 或 Tez 引擎,适合离线批处理,不适用于实时查询。 |
Hive 架构
-
用户接口
CLI、JDBC、Web UI 等工具提交 HiveQL 查询。 -
Driver
解析查询,生成执行计划,管理任务生命周期。 -
编译器
将 HiveQL 转换为 MapReduce/Tez/Spark 任务。 -
元数据存储
Metastore 存储表结构、分区、字段类型等信息。 -
执行引擎
运行编译后的任务,读写 HDFS 数据。
Hive 数据模型
表(Table)
类似关系型数据库的表,支持内部表(数据由 Hive 管理)和外部表(数据由用户管理)。
CREATE TABLE users (id INT, name STRING) STORED AS ORC;
分区(Partition)
按某一列的值划分数据目录,加速查询(如按日期分区)。
CREATE TABLE logs (log_time STRING, content STRING)
PARTITIONED BY (dt STRING);
分桶(Bucket)
按哈希值将数据分到多个文件,优化 JOIN 和采样效率。
CREATE TABLE orders (order_id INT, user_id INT)
CLUSTERED BY (user_id) INTO 10 BUCKETS;
Hive 应用场景
| 场景 | 说明 |
|---|---|
| 离线数据分析 | 处理 TB/PB 级历史数据(如用户行为分析、日志统计)。 |
| ETL 流程 | 清洗、转换数据后导入数据仓库(如将 CSV 转换为 ORC 格式)。 |
| 数据挖掘 | 结合机器学习库(如 Hive + Mahout)进行聚类、分类等操作。 |
| 报表生成 | 定时生成统计报表(如每日销售额汇总)。 |
Hive 优缺点
| 优点 | 缺点 |
|---|---|
| 易用性强(SQL 语法) | 延迟高(分钟级响应,不适合实时查询) |
| 可扩展性高(自定义 UDF) | 不支持事务和行级更新(Hive 3 部分支持) |
| 兼容 Hadoop 生态(HDFS、HBase 等) | 需要优化分区和存储格式提升性能 |
Hive vs 传统数据库
| 对比项 | Hive | 传统数据库(如 MySQL) |
|---|---|---|
| 数据规模 | 支持 PB 级数据 | 适合 GB/TB 级数据 |
| 响应速度 | 高延迟(批处理) | 低延迟(实时查询) |
| 事务支持 | 有限支持(Hive 3+) | 完整支持 ACID |
| 存储与计算 | 分离(HDFS + 计算引擎) | 耦合(本地存储 + 计算 |
Hive 使用示例
创建表并加载数据
CREATE EXTERNAL TABLE user_logs (
ip STRING,
url STRING,
time STRING
) PARTITIONED BY (dt STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
LOCATION '/hive/data/user_logs';LOAD DATA INPATH '/input/log_20231001.txt' INTO TABLE user_logs PARTITION (dt='2023-10-01');
聚合查询
SELECT dt, COUNT(*) AS pv
FROM user_logs
WHERE dt BETWEEN '2023-10-01' AND '2023-10-07'
GROUP BY dt;
连接多个表
SELECT u.name, SUM(o.amount)
FROM orders o
JOIN users u ON o.user_id = u.id
GROUP BY u.name;
生态工具
-
Hive Metastore:独立元数据服务(供 Spark、Presto 等共用)。
-
Hive on Spark:用 Spark 替代 MapReduce 提升计算速度。
-
Hive LLAP(Live Long and Process):低延迟交互式查询。
总结
-
适用场景:离线批处理、海量数据仓库管理。
-
替代方案:实时查询用 Impala 或 Presto;复杂分析用 Spark SQL。
-
学习建议:掌握 HiveQL 语法、分区优化和存储格式(ORC/Parquet)。
相关文章:
大数据 spark hive 总结
Apache Spark 简介 是一个开源的统一分析引擎,专为大规模数据处理而设计。它提供了高级API,支持Java、Scala、Python和R语言,并且包含了一个优化过的执行引擎,该引擎支持循环计算(如机器学习算法)和交互式…...
小程序开发总结
今年第一次帮别人做小程序。 从开始动手到完成上线,一共耗时两天。AI 让写代码变得简单、高效。 不过,小程序和 Flutter 等大厂开发框架差距实在太大,导致我一开始根本找不到感觉。 第一,IDE 不好用,各种功能杂糅在…...
QLoggingCategory类使用
QLoggingCategory类使用 QLoggingCategory的概述 QLoggingCategory是Qt的日志策略类;可以通过声明不同的日志策略对象来输出不同的日志信息。打印信息类型如下:宏 Q_DECLARE_LOGGING_CATEGORY(name) 定义一个返回QLoggingCategory对象函数,…...
GPU加速生信分析-宏基因组MAG去污染
Deepurify利用多模态深度语言模型来过滤污染的基因组,从而提高了宏基因组组装基因组(MAGs)的质量,并且可以利用GPU加速。 宏基因组组装的基因组 (MAG) 为使用宏基因组测序数据探索微生物暗物质提供了有价值…...
数据结构(蓝桥杯常考点)
数据结构 前言:这个是针对于蓝桥杯竞赛常考的数据结构内容,基础算法比如高精度这些会在下期给大家总结 数据结构 竞赛中,时间复杂度不能超过10的7次方(1秒)到10的8次方(2秒) 空间限制&#x…...
从0到1入门Linux
一、常用命令 ls 列出目录内容 cd切换目录mkdir创建新目录rm删除文件或目录cp复制文件或目录mv移动或重命名文件和目录cat查看文件内容grep在文件中查找指定字符串ps查看当前进程状态top查看内存kill终止进程df -h查看磁盘空间存储情况iotop -o直接查看比较高的磁盘读写程序up…...
灰色地带规避:知识产权校验API的商标库模糊匹配算法
在反向海淘或其他电商业务场景中,为了规避知识产权方面的灰色地带,开发知识产权校验 API 并运用商标库模糊匹配算法是很有必要的。以下将详细介绍商标库模糊匹配算法的设计与实现: 算法设计思路 商标库模糊匹配算法的核心目标是在给定一个待匹…...
React:类组件(中)
dangerouslySetInnerHTML React写进{}内的东西,不允许被当作代码块解析,是为了防止xss攻击和代码注入 XSS(跨站脚本攻击,Cross-Site Scripting) 是一种常见的安全漏洞,攻击者通过注入恶意脚本到网页中&…...
第六次CCF-CSP认证(含C++源码)
第六次CCF-CSP认证 数位之和(easy)思路及AC代码遇到的问题 开心消消乐(easy)思路及AC代码 画图(mid)思路及AC代码 数位之和(easy) 题目链接 思路及AC代码 既然题目要求我们输出各位…...
SpringBoot 如何调用 WebService 接口
前言 调用WebService接口的方式有很多,今天记录一下,使用 Spring Web Services 调用 SOAP WebService接口 一.导入依赖 <!-- Spring Boot Web依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId…...
算法 之 树形dp 树的中心、重心
文章目录 重心实践题目小红的陡峭值 在树的算法中,求解树的中心和重心是一类十分重要的算法 求解树的重心 树的重心的定义:重心是树中的一个节点,如果将这个点删除后,剩余各个连通块中点数的最大值最小,那么这个节点…...
Docker 配置镜像源
》》Daemon {"registry-mirrors": ["https://docker.1ms.run","https://docker.xuanyuan.me"] }》》》然后在重新 docker systemctl restart docker...
Linux 离线部署Ollama和DeepSeek-r1模型
都在复制粘贴联网状态下linux部署deepseek,离线状态下需要下载Ollama和DeepSeek模型,然后将下载包上传到linux中。 1、下载Ollama https://github.com/ollama/ollama/releases 注意:如果CentOS7建议安装V0.5.11版本,V0.5.13需要…...
SQLAlchemy系列教程:如何执行原生SQL
Python中的数据库交互提供了高级API。但是,有时您可能需要执行原始SQL以提高效率或利用数据库特定的特性。本指南介绍在SQLAlchemy框架内执行原始SQL。 在SQLAlchemy中执行原生SQL SQLAlchemy虽然以其对象-关系映射(ORM)功能而闻名ÿ…...
RuleOS:区块链开发的“新引擎”,点燃Web3创新之火
RuleOS:区块链开发的“新引擎”,点燃Web3创新之火 在区块链技术的浪潮中,RuleOS宛如一台强劲的“新引擎”,为个人和企业开发去中心化应用(DApp)注入了前所未有的动力。它以独特的设计理念和强大的功能特性&…...
【编译器】VSCODE烧录ESP32-C3——xiaozhi智能聊天机器人固件
【编译器】VSCODE烧录ESP32-C3——xiaozhi智能聊天机器人固件 文章目录 [TOC](文章目录) 前言一、方法一:使用固件烧录工具1. 安装CH340驱动2. 打开FLASH_DOWNLOAD文件3. 选择芯片类型和烧录方式4. 选择烧录文件5. 参数配置 二、方法二:VSCODE导入工程1.…...
设计模式文章汇总-Golang语言实现
Golang学习笔记_27——单例模式 Golang学习笔记_28——工厂方法模式 Golang学习笔记_29——抽象工厂模式 Golang学习笔记_30——建造者模式 Golang学习笔记_31——原型模式 Golang学习笔记_32——适配器模式 Golang学习笔记_33——桥接模式 Golang学习笔记_34——组合模式 Gola…...
显式 GC 的使用:留与去,如何选择?
目录 一、什么是显式 GC? (一) 垃圾回收的基本原理 (二)显式 GC 方法和行为 1. System.gc() 方法 2. 显式 GC 的行为 (三)显式 GC 的使用场景与风险 1. JVM 如何处理显式 GC 2. 显式 GC…...
SpringMVC概述以及入门案例
目录 SpringMVC概述 为什么需要Spring MVC? SpringMVC入门 工作流程分析 SpringMVC概述 SpringMVC技术与Servlet技术功能等同,均属于Web层开发技术。SpringMVC是一种基于java实现MVC模型的轻量级Web框架。 为什么需要Spring MVC? 在传统J…...
5. 前后端实现文件上传与解析
1. 说明 在实际开发中,比较常见的一个功能是需要在前端页面中选择系统中的某个文件上传到服务器中进行解析,解析后的文件内容可以用来在服务器中当作参数,或者传递给其它组件使用,或者需要存储到数据库中。所以本文就提供一种方式…...
⭐LeetCode周赛 3468. 可行数组的数目——暴力与数学⭐
⭐LeetCode周赛 3468. 可行数组的数目——暴力与数学⭐ 示例 1: 输入:original [1,2,3,4], bounds [[1,2],[2,3],[3,4],[4,5]] 输出:2 解释: 可能的数组为: [1, 2, 3, 4] [2, 3, 4, 5] 示例 2: 输入&…...
javaEE初阶————多线程进阶(2)
今天来继续带大家学习多线程进阶部分啦,今天是最后一期啦,下期带大家做一些多线程的题,我们就可以开始下一个环节啦; 1,JUC(java.util.concurrent)的常见类 1)Callable 接口 我们之…...
Java 虚拟机优化指南:CMS垃圾回收器参数调优与性能监控工具详解
Java 虚拟机优化指南:CMS垃圾回收器参数调优与性能监控工具详解 引言 在高并发、大流量的企业级Java应用中,JVM参数的调优对系统性能至关重要。合理的JVM配置不仅能提高应用响应速度,还能减少垃圾回收造成的停顿时间,提升用户体…...
maven无法解析插件 org.apache.maven.plugins:maven-jar-plugin:3.4.1
解决流程 1.修改maven仓库库地址 2.删除本地的maven仓库 maven插件一直加载有问题: 无法解析插件 org.apache.maven.plugins:maven-jar-plugin:3.4.1 开始以为maven版本有问题,重装了maven,重装了idea工具。结果问题还是没解决。研究之后发现…...
Android Studio右上角Gradle 的Task展示不全
Android Studio 版本如下:Android Studio lguana|2023.21, 发现Gradle 的Tasks阉割严重,如下图,只显示一个other 解决方法如下:**Setting>Experimental>勾选Configure all gradle tasks during Gradle Sync(this can make…...
UDP协议 TCP协议(格式 超时重传 滑动窗口 拥塞控制...)
UDP协议 格式 UDP协议头部格式由8个字节组成,由4个2字节大小的字段组成。 源端口(Source Port,16 位): 发送端的端口号,标识数据从哪个端口发出。如果不需要,则可以填 0。 目标端口࿰…...
爱普生温补晶振 TG5032CFN高精度稳定时钟的典范
在科技日新月异的当下,众多领域对时钟信号的稳定性与精准度提出了极为严苛的要求。爱普生温补晶振TG5032CFN是一款高稳定性温度补偿晶体振荡器(TCXO)。该器件通过内置温度补偿电路,有效抑制环境温度变化对频率稳定性的影响&#x…...
今日头条文章爬虫教程
今日头条文章爬虫教程 随着互联网的发展,新闻资讯类平台如今日头条积累了海量的数据。对于数据分析师、研究人员等群体来说,获取这些数据进行分析和研究具有重要的价值。本文将介绍如何使用Python编写爬虫,爬取今日头条的文章数据。 一、准…...
【网络安全工程】任务11:路由器配置与静态路由配置
目录 一、概念 二、路由器配置 三、配置静态路由CSDN 原创主页:不羁https://blog.csdn.net/2303_76492156?typeblog 一、概念 1、路由器的作用:通过路由表进行数据的转发。 2、交换机的作用:通过学习和识别 MAC 地址,依据 M…...
Compose 实践与探索二 —— 状态订阅与自动更新1
1、自定义 Composable 为什么所有组件都要加 Composable 注解才可以使用? 这是因为 Compose 需要通过 Compose 的编译器插件(Compose Compiler Plugin)在组件函数中增加一些参数,这些参数在调用时有用。通过编译器增加这些参数&…...
