hive超大数据量排序

当使用hive或spark对超大数据量(几十亿)数据进行排序的时候,直接使用row_number函数会导致数据严重倾斜,都在一个reduce任务上执行,导致很难跑出来,一定要排序的还可以参考如下sql

SELECT
	a.uuid,
	a.rank + NVL(b.max_num, 0) AS seq
FROM
	(
		SELECT
			uuid,
			ABS(hash(uuid)) % 10000 AS part,
			row_number() over(PARTITION BY ABS(hash(uuid)) % 10000 order by uuid) AS rank
		FROM
			{tab_seq}
		WHERE
			dt = '2022-10-06'
	)
	a
LEFT JOIN
	(
		SELECT
			part,
			SUM(max_num) over(order by part) AS max_num
		FROM
			(
				SELECT
					ABS(hash(uuid)) % 10000 AS part,
					COUNT(1) AS max_num
				FROM
					{tab_seq}
				WHERE
					dt = '2022-10-06'
				GROUP BY
					ABS(hash(uuid)) % 10000
			)
			tmp2
	)
	b
ON
	(a.part-1) = b.part

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
大数据处理平台 汇报人: 刘宏志 [email protected] 北京大学 软件与微电子学院 提纲 动机:为什么需要大数据处理平台 大数据处理平台的特点 大数据处理平台的架构 三种不同大数据的处理 传统计算:单机计算 特点: 小数据 + 大复杂的计算和分析 缺点: 依赖于单机性能:CPU + RAM (摩尔定律) 难以处理海数据 分布式计算 基本思想: 使用一组计算机协调完成一项工作 分布式系统开发:MPI(消息传递接口) 总共287个函数 MPI_Send( ) 发送消息, MPI_Recv ( )接收消息 缺点:开发困难 任务依赖关系复杂,容易出现死锁 数据交换时需要同步 系统的局部故障难以处理 分布式数据存储 通常采用NAS或SAN 数据在需要时被复制到计算节点 DAS: Direct-Attached Storage NAS: Network Attached Storage SAN: Storage Area Network 大数据时代 纽交所每天产生过1T的交易数据 (2008年) Facebook存储照片约100亿张,大小约为1PB 硬盘访问速度: 100MB/s 读取1T的数据: 2.5小时 数据瓶颈 问题总结 传统单机计算: 计算资源有限,难以处理海数据 传统分布式系统开发: 任务依赖关系复杂,容易出现死锁 数据交换时需要同步 系统的局部故障难以处理 传统分布式数据存储与访问: 数据"一致性"难以保证 数据在需要时被复制到计算节点,数据访问瓶颈 大数据处理平台的特点 通过分布式计算框架来实现 提供高效的计算模型和简单的编程接口 可扩展性:通过增加资源以满足不断增加的性能和功能需求 容错能力:考虑系统的不可靠性,支持出现错误后自动恢复 高效可靠I/O:缓解数据访问瓶颈问题,提高执行效率 大数据处理平台技术架构 数据采集层 数据处理层 … 批采集 网络爬虫 流采集 分布式文 件系统 关系 数据库 NoSQL 数据库 数据存储层 机器学习 数据挖掘 搜索引擎 批处理引擎 流处理引擎 图处理引擎 可视化 数据查询 统计分析 大数据 处理平台 … 服务封装层 业务数据 互联网数据 物联网数据 数据源 … 引擎 数 据 安 全 与 隐 私 保 护 … 基于开源系统的大数据处理平台 SparkS QL Spark Streaming MLib GraphX MapReduce Hive Storm Giraph Spark HDFS Swift Kafka Sqoop Flume Scrapy 数据采集系统: Sqoop 从传统数据库导数据;Scrapy 并行爬虫框架;Flume 日志采集、聚合和传输 数据存储系统: HDFS 分布式文件系统;Swift 云存储服务;Kafka 消息系统,类似于消息队列 计算引擎: MapReduce 批数据处理引擎;Storm 流式处理引擎;Giraph 并行图处理系统; Spark 通用大数据处理引擎,高效地支持批处理、流式处理、图处理 数据分析工具: Hive和Spark SQL数据仓库;Spark Streaming流式计算;MLib机器学习;GraphX图处理 批大数据处理 Hadoop 基本思想:本地化计算 每个节点只处理其本地数据,避免网络上的大数据传输 "山不来就我, 我便去就山" 应用开发:written in high-level 开发者无需考虑网络编程、时间依赖等 数据分布 数据复制多份存放不同节点以增加可用性和可靠性 特点:高容错性 + 高扩展性 Apache Hadoop Apache软件基金会下面的一个开源项目 一个分布式系统基础框架 HDFS: Hadoop分布式文件系统,负责数据存储 MapReduce:一种面向大规模数据并行处理的计 算模型和框架,负责计算 HDFS HDFS: Hadoop Distributed File System 构建于本地文件系统之上,例如:ext3, xfs等 特点:多备份、一次写入(不允许修改) MapReduce 基本思想: 分而治之: 数据被切分成许多独立分片,被多个Map任务并行处理 计算向数据靠拢: 计算程序被分发到数据节点,在本地计算 Dean, S. & Ghemawat, S., "MapReduce: Simplified Data Processing on Large Clusters", OSDI'04 实例:微博年度热词统计 某一年度所有微博内容中各个词出现的次数 根据次数进行排序,排名前TopK的词作为年度热词 第 一 步 : 数 据 划 分 ( split ) 实例:微博年度热词统计(续) 某一年度所有微博内容中各个词出现的次数 根据次数进行排序,排名前TopK的词作为年度热
### 回答1: Hive是一个建立在Hadoop之上的数据仓库基础架构,可以进行大规模数据管理和查询。在Hive中,我们可以使用INSERT INTO SELECT语句将数据从一个表复制到另一个表,即将查询的结果插入到目标表中。 当涉及到大数据的插入操作时,可以考虑以下几个方面来优化性能: 1. 分区策略:对目标表进行合理的分区设计,可以提高查询性能。将数据按照某个字段进行分区,可以让Hive在执行查询时只扫描相关分区,减少数据的读取和处理。 2. 数据的预处理:可以通过在查询语句中添加条件过滤掉不需要的数据,减少需要插入的数据。对于需要进行聚合操作的情况,可以考虑使用Hive的MapReduce任务来预先计算聚合结果,并将中间结果写入到一个临时表中,然后再将临时表的结果插入到目标表。 3. 并行处理:可以通过设置合适的并行度来提高插入操作的执行效率。通过调整hive.exec.parallel参数来控制MapReduce作业的并行度,可以让多个任务并发执行,提高数据写入的速度。 4. 合理的硬件配置:在大数据插入操作中,硬件的配置也是一个重要的因素。可以考虑增加节点或增大节点的配置,提高存储和计算能力,加快数据写入速度。 综上所述,通过合理的分区策略、数据预处理、并行处理和合理的硬件配置,可以提高Hive大数据插入操作的执行效率。 ### 回答2: 在Hive中使用"insert into select"语句进行大数据的数据插入操作时,首先需要明确一点,Hive本身是基于Hadoop平台的数据仓库框架,处理大数据是其主要的优势之一。 当使用"insert into select"语句时,Hive会执行两个步骤:首先,从源表中读取数据;其次,将读取到的数据插入到目标表中。对于大数据的操作,这两个步骤可能会涉及到大的数据读取和写入操作,因此会面临一些挑战和需要考虑的问题。 首先,需要考虑源表和目标表的数据分布情况。如果源表的数据是被分散存储在不同的节点上,那么在读取数据时需要考虑如何并行读取,以提高读取性能。同样,在插入数据到目标表时,也需要考虑如何将数据并行写入到不同的节点上,以提高写入性能。 其次,需要考虑Hive查询引擎的优化能力。Hive查询语句的执行过程中,会对查询进行优化以提高查询性能。在"insert into select"语句中,Hive会对查询子句进行优化,并生成最优的执行计划。因此,编写高效的查询语句对于大数据的插入操作非常重要。 此外,还需要考虑Hive的配置参数。在处理大数据时,可以通过调整一些Hive的配置参数来优化插入操作的性能。例如,可以调整Hive的并行度、内存配置等参数,以适应大数据的插入操作需求。 总之,通过合理的配置参数、编写高效的查询语句以及考虑数据的分布情况,可以在Hive中实现高效的"insert into select"操作,从而处理大数据的插入需求。 ### 回答3: 当使用Hive的"INSERT INTO SELECT"语句插入大数据时,有一些要注意的方面。 首先,确保目标表已经正确创建并包含预期的列和数据类型。可以使用Hive的CREATE TABLE语句来指定目标表的结构。 其次,要考虑选择源表时的性能。如果源表是大型表,可以考虑在查询中使用谓词或限制条件来减少选择的数据。另外,可以考虑使用分区表来分散数据,从而提高查询性能。 还需要考虑目标表的并行性。Hive的并行度可以通过配置参数hive.exec.parallel可以调整。如果目标表的数据较大,可以适当增加并行度以加快插入过程。 此外,Hive还提供了一些插入优化的功能,例如动态分区和桶排序。动态分区将数据按照某些列的值进行分区,并将数据写入到不同的分区文件中,从而提高查询性能。桶排序将数据按照预定义的桶进行排序,可以大大减少数据的读写操作。 最后,为了监控插入的进度和性能,可以使用Hive的日志和性能监控工具进行监控。这些工具可以提供关于插入操作的详细信息和性能指标,帮助优化和改进插入过程。 综上所述,当使用Hive的"INSERT INTO SELECT"插入大数据时,需要注意目标表的创建、选择源表的性能、目标表的并行性、插入优化功能的使用以及监控插入的进度和性能等方面。这些措施可以提高插入的效率和性能,确保插入操作的顺利进行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值