Hive group by 和 count(distinct) 中的减速器数量

2023-12-02

有人告诉我 count(distinct ) 可能会导致数据倾斜,因为只使用了一个减速器。

我使用一个包含 50 亿数据的表和 2 个查询进行了测试,

Query A:

select count(distinct columnA) from tableA

Query B:

select count(columnA) from
(select columnA from tableA group by columnA) a

实际上,查询 A 大约需要 1000-1500 秒,而查询 B 需要 500-900 秒。结果似乎在意料之中。

但是,我意识到这两个查询都使用370 mappers and 1 reducers并且他们几乎拥有same cumulative CPU seconds。这意味着它们不存在本质差异,时间差异可能是由集群负载引起的。

我很困惑为什么都使用 1 个减速器,我什至尝试过mapreduce.job.reduces但它不起作用。顺便说一句,如果他们都使用 1 个减速器,为什么人们建议不要使用count(distinct )而且数据倾斜似乎是无法避免的?


两个查询都使用相同数量的映射器(这是预期的)和单个最终减速器,这也是预期的,因为您需要单个标量计数结果。同一顶点上的多个减速器独立、隔离地运行,每个减速器都会产生自己的输出,这就是最后一级只有单个减速器的原因。区别在于计划。

在第一个查询执行中,单个reducer读取每个mapper输出并对所有数据进行不同计数计算,它处理了太多数据。

第二个查询使用中间聚合,最终减速器接收部分聚合的数据(在上一步中聚合的不同值)。最终的reducer需要再次聚合部分结果才能得到最终结果,它的数据量可能比第一种情况要少得多。

从 Hive 1.2.0 开始,对 count(distinct) 进行了优化,您不需要重写查询。设置该属性:hive.optimize.distinct.rewrite=true

还有映射器聚合(映射器也可以预先聚合数据并在其数据部分的范围内生成不同的值 - 分割)设置此属性以允许映射端聚合:hive.map.aggr=true

use EXPLAIN命令来检查执行计划中的差异。

另请参阅这个答案:https://stackoverflow.com/a/51492032/2700344

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hive group by 和 count(distinct) 中的减速器数量 的相关文章

  • 运行时异常:java.lang.NoSuchMethodException:tfidf$Reduce.()

    如何解决这个问题 tfidf是我的主类 为什么运行jar文件后会出现这个错误 java lang RuntimeException java lang NoSuchMethodException tfidf Reduce
  • 猪的组连接等效吗?

    试图在 Pig 上完成这个任务 寻找 MySQL 的 group concat 等效项 例如 在我的表中 我有以下内容 3fields userid clickcount pagenumber 155 2 12 155 3 133 155
  • HDFS:使用 Java / Scala API 移动多个文件

    我需要使用 Java Scala 程序移动 HDFS 中对应于给定正则表达式的多个文件 例如 我必须移动所有名称为 xml从文件夹a到文件夹b 使用 shell 命令我可以使用以下命令 bin hdfs dfs mv a xml b 我可以
  • 如何从hdfs读取文件[重复]

    这个问题在这里已经有答案了 我在 project1目录下的hadoop文件系统中有一个文本文件名mr txt 我需要编写 python 代码来读取文本文件的第一行 而不将 mr txt 文件下载到本地 但我无法从 hdfs 打开 mr tx
  • InvalidRequestException(为什么:empid 如果包含 Equal,则不能被多个关系限制)

    这是关于我从 Apache Spark 查询 Cassandra 时遇到的问题 Spark 的正常查询工作正常 没有任何问题 但是当我使用关键条件进行查询时 出现以下错误 最初 我尝试查询复合键列族 它也给出了与下面相同的问题 由以下原因引
  • 更改 Spark Streaming 中的输出文件名

    我正在运行一个 Spark 作业 就逻辑而言 它的性能非常好 但是 当我使用 saveAsTextFile 将文件保存在 s3 存储桶中时 输出文件的名称格式为 part 00000 part 00001 等 有没有办法更改输出文件名 谢谢
  • 如何跟踪hadoop中哪个数据块在哪个数据节点?

    如果复制一个数据块 会复制到哪个数据节点 是否有任何工具可以显示复制块存在的位置 如果您知道文件名 则可以通过 DFS 浏览器查找 转到您的 namenode Web 界面 说 浏览文件系统 并导航到您感兴趣的文件 在页面底部 将列出文件中
  • 获取从开始日期到结束日期的活跃周数

    我的订阅数据如下所示 数据显示用户何时购买订阅 它有user id subscription id start date and end date 我已经得出wk start and wk end从中 user subscription i
  • 名称节点处于安全模式

    我提到了这些问题名称节点处于安全模式 无法离开 https stackoverflow com questions 15803266 name node is in safe mode not able to leave and SafeM
  • Spark 写入 hdfs 无法使用 saveAsNewAPIHadoopFile 方法

    我在 CDH 5 2 0 上使用 Spark 1 1 0 并试图确保我可以读取和写入 hdfs 我很快意识到 textFile 和 saveAsTextFile 调用旧的 api 并且似乎与我们的 hdfs 版本不兼容 def testHD
  • 从 HDFS 传出文件

    我想将文件从 HDFS 传输到另一台服务器的本地文件系统 该服务器不在 hadoop 集群中 而是在网络中 我本可以这样做 hadoop fs copyToLocal
  • hive 添加分区语句忽略前导零

    我在 hdfs 上有文件夹 user test year 2016 month 04 dt 25 000000 0 需要将上面的分区路径添加到test table 命令 ALTER TABLE test ADD IF NOT EXISTS
  • <问题> Hive 中的浮点数据类型

    初始化数据 CREATE TABLE test test data user VARCHAR 10 amount FLOAT TBLPROPERTIES transactional true INSERT INTO test test da
  • 使用字符串数组在 Hive 表上加载 CSV 文件

    我正在尝试将 CSV 文件插入 Hive 其中一个字段是 string 数组 这是 CSV 文件 48 Snacks that Power Up Weight Loss Aidan B Prince Health Fitness Trave
  • Sqoop 导出分区的 Hive 表

    我在尝试导出分区的 Hive 表时遇到了一些问题 这是否完全受支持 我尝试用谷歌搜索并找到一张 JIRA 票证 sqoop export connect jdbc mysql localhost testdb table sales exp
  • 运行 Sqoop 导入和导出时如何找到最佳映射器数量?

    我正在使用 Sqoop 版本 1 4 2 和 Oracle 数据库 运行 Sqoop 命令时 例如这样 sqoop import fs
  • HBase、Hadoop:如何估计 HBase 表或 Hadoop 文件系统路径的大小?

    我有多个 HBase 表 如何估计在 java 中使用的表的大致大小 一种方法是你必须使用java客户端访问hdfs 通常在 hbase文件夹 所有表格信息 将在场 Hadoop 外壳 你可以检查使用hadoop fs du h path
  • 将 Spark 添加到 Oozie 共享库

    默认情况下 Oozie 共享 lib 目录提供 Hive Pig 和 Map Reduce 的库 如果我想在 Oozie 上运行 Spark 作业 最好将 Spark lib jar 添加到 Oozie 的共享库 而不是将它们复制到应用程序
  • Apache Spark 何时发生混洗?

    我正在优化 Spark 中的参数 并且想确切地了解 Spark 是如何对数据进行洗牌的 准确地说 我有一个简单的字数统计程序 并且想知道spark shuffle file buffer kb如何影响运行时间 现在 当我将此参数设置得非常高
  • 适用于 Python 3.x 的 Hive 客户端

    是否可以使用 Python 3 x 连接到 hadoop 并运行 hive 查询 我正在使用Python 3 4 1 我发现可以按照这里写的方式完成 https cwiki apache org confluence display Hiv

随机推荐

  • R:查找并删除所有一到两个字母的单词

    我试图从文本段落中清除任何一两个字母的单词 这是我的第一个想法 gsub a zA Z 1 2 a ab abc B BB BBB 1 a aaa BB BBBB 我可以看到 a 如何不被替换 因为它不以空格开头 并且我可以看到 BB 如何
  • 比较字符

    假设我有以下代码 String myString Hello char firstChar myString charAt 0 然后我想检查firstChar 是否具有值 B 我试过 if myChar b and if myChar eq
  • 从每个组中选择一个随机行 SQL Server

    我有一张如下表 ID Code Age 1 4758 21 1 7842 14 1 9821 23 1 6842 9 2 8472 24 2 7558 31 2 7841 28 3 7881 38 3 8794 42 3 4871 43 对
  • 告诉原则一个字段可以为空

    我必须在学说实体的注释中输入什么 其实是这样的 ORM Column type string length 255 Assert Length min 3 max 255 minMessage The name is too short m
  • php 如何转换布尔变量?

    php 如何转换布尔变量 我试图将布尔值保存到数组中 result Users is login true 但是当我使用调试时 is login 值为空 当我执行以下条件时 if result Users is login 条件总是假的 然
  • 将“展开”按钮添加到没有子节点的 JTree 节点?

    我想将 扩展 按钮添加到 JTree 的节点以指示它们是可扩展的 问题是 在用户单击它们之前 它们没有子级 由于在后台进行处理 有什么方法可以将节点设置为父节点或拥有子节点 而无需它实际拥有子节点吗 Thanks 可以使用你自己的Defau
  • 管理对象间关系

    如何为对象的特殊情况编写代码 例如 假设我正在编写一个角色扮演游戏 有 N 5 个类 矩阵中有 N 2 个关系 可以确定角色 A 是否可以攻击 或对角色 B 使用能力 M 暂时忽略其他因素 我如何在 OOP 中对此进行编码 而不用到处放置特
  • 使用嵌套 json 时,排序在 ngTable 中不起作用

    我使用 ngTable 在 angularjs 中创建了一个应用程序 该应用程序工作正常 但排序不起作用 我的 json 结构是嵌套的 但值与表一起正确出现 谁能告诉我一些解决方案 我的代码如下所示 JSFiddle html div ta
  • Vb.net 解密 sha512 哈希

    嘿伙计们 我正在努力解密我的哈希值sha512加密 我正在寻找一种最终解密它的方法 顺便说一句 这就是我进行加密的方式 Dim uEncode As New UTF8Encoding Dim bytClearString As Byte u
  • 如何在 Matplotlib 的子图中单独绘制相同的图形? [复制]

    这个问题在这里已经有答案了 我正在用 Python 编写一个生成许多图表的程序 其中一些图表无论是独立的还是与其他图表相比都很有趣 生成这些图表的成本很高 就运行时间而言 而且我不想多次生成它们 有没有办法生成一次情节 并将其作为子情节的一
  • 使用也处理撇号的正则表达式匹配单词

    我必须将一行文本分成单词 并且对使用什么正则表达式感到困惑 我到处寻找匹配单词的正则表达式 并找到了与这篇文章类似的正则表达式 但希望它在 java 中 java 不处理常规字符串中的 正则表达式匹配单词和带有撇号的单词 我已经尝试了每个答
  • ggplot2 双轴

    这是一个扩展this问题 我目前使用的是最新版本ggplot2 v2 2 0 来自 CRAN 用于在其中创建绘图R 我正在利用 Axeman提供的解决方案here 我遇到的问题是 当我使用小平面时 有时其中一个 y 轴显示非常小的值 我想知
  • image_tag - 有没有办法让 alt attr 默认为空?

    如果图像丢失 我宁愿有一个空白的 alt 属性 而不是图像的文件名 无论如何谁想要这种默认行为 有没有办法进行系统配置 以便 image tag 在没有给出 alt 的情况下设置空白 alt attr 需要明确的是 我对 image tag
  • 当存在 UTF-8 字符时如何将输出定向到文件?

    我有一个 python 脚本 可以从 Twitter API 中获取一堆最近的推文并将它们转储到屏幕上 它工作得很好 但是当我尝试将输出定向到文件时 会发生一些奇怪的事情 并且 print 语句会导致异常 gt tweets py gt t
  • javascript如何在回调函数中获取this.variable

    在下面的javascript自定义类中 在回调中 为什么this obj什么都没有 而局部变量obj有我想要的东西 谢谢 function ClassTest director this obj test1 test1 function t
  • 在 data.table v1.8.10 与 v1.9.2 中对非常小的数字(例如 1e-28)和 0.0 进行分组

    我注意到 R 中的 data table 创建的频率表似乎无法区分非常小的数字和零 我可以改变这种行为还是这是一个错误 可重现的例子 gt library data table DT lt data table c 0 0000000000
  • Quartz PDF API 导致内存不足崩溃

    我在使用 iOS 版 Quartz PDF API 时遇到崩溃问题 目前我正在使用 SDK 4 0 GM Seed 进行编译并在我的 3 2 iPad 上运行 我尝试使用 3 2 SDK 得到相同的结果 我使用的所有代码均基于标准 Appl
  • 如何在linux bash脚本中使用“-”字符(破折号)声明变量名

    我写了简单的脚本如下 bin bash auth type SM Read only Yes SM write only No echo e SM Read only echo e SM Write only if SM Read only
  • Python 产生: OSError: [WinError 193] %1 不是有效的 Win32 应用程序

    在检查了其他相关线程后 我不得不打开这个线程 当尝试跑步时这个存储库我总是收到错误 Traceback most recent call last File C Users jjj evrpogmrl main py line 1 in
  • Hive group by 和 count(distinct) 中的减速器数量

    有人告诉我 count distinct 可能会导致数据倾斜 因为只使用了一个减速器 我使用一个包含 50 亿数据的表和 2 个查询进行了测试 Query A select count distinct columnA from table