hive 版本 0.13.1 中的性能问题

2024-01-06

I use AWS-EMR http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/UsingEMR_SupportedHiveVersions.html运行我的 Hive 查询,但在运行 hive 版本 0.13.1 时遇到性能问题。

新版本的 hive 运行 10 行数据大约需要 5 分钟。但是 230804 行的相同脚本需要 2 天并且仍在运行。我应该如何分析和解决问题?

样本数据:

Table 1:

hive> describe foo;
OK
orderno    string
Time taken: 0.101 seconds, Fetched: 1 row(s)

表1的示例数据:

hive>select * from foo;        
OK
1826203307
1826207803
1826179498
1826179657

Table 2:

hive> describe de_geo_ip_logs;
OK
id          bigint                                      
startorderno        bigint                                      
endorderno          bigint                                      
itemcode                int                                         
Time taken: 0.047 seconds, Fetched: 4 row(s)

表 2 的示例数据:

hive> select * from bar;

127698025   417880320   417880575   306
127698025   3038626048  3038626303  584
127698025   3038626304  3038626431  269
127698025   3038626560  3038626815  163

我的查询:

SELECT b.itemcode
FROM foo a,  bar b
WHERE a.orderno BETWEEN b.startorderno AND b.endorderno;

在 Hive 日志输出的最顶部,它指出“警告:阶段 'Stage-1 Mapred' 中的 Shuffle Join JOIN[4][Tables a, b] 是叉积。”

编辑: “叉积”或笛卡尔积是无条件的联接,它针对“a”表中的每一行返回“b”表中的每一行。因此,如果您以“a”为 5 行、“b”为 10 行为例,您将得到乘积,即 5 乘以 10 = 返回 50 行。对于一个或其他表来说,会有很多行完全为“空”。

现在,如果您有一个包含 20,000 行的表“a”,并将其连接到另一个包含 500,000 行的表“b”,那么您要求 SQL 引擎返回一个包含 10,000,000,000 行的数据集“a, b”,然后对 1000 万行执行 BETWEEN 操作。

因此,如果您删除“b”行的数量,您会发现您将获得比“a”更多的好处 - 在您的示例中,如果您可以过滤 ip_logs 表(表 2),因为我猜测它有比您的订单号表更多的行,它将减少执行时间。 结束编辑

您通过不指定连接条件来强制执行引擎处理笛卡尔积。它必须一遍又一遍地扫描表a的所有内容。如果有 10 行,就不会有问题。有了 20k,您就会遇到数十次 Map/Reduce 波。

尝试这个查询:

 SELECT b.itemcode
 FROM foo a JOIN bar b on <SomeKey>
 WHERE a.orderno BETWEEN b.startorderno AND b.endorderno;

但我无法确定您的模型将允许加入哪个列。也许这个表达式的数据模型可以改进?可能只是我没有清楚地阅读示例。

无论哪种方式,您都需要在 where 子句之前过滤比较次数。我在 Hive 中完成此操作的其他方法是使用较小的数据集创建视图,并连接/匹配视图而不是原始表。

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

hive 版本 0.13.1 中的性能问题 的相关文章

随机推荐

  • 当应用程序在后台时,android O 中的 onMessageReceived 不会被调用

    我正在从我的服务器发送数据有效负载通知 这是示例 url https fcm googleapis com fcm send to userToken data some json here 通过这种方式 即使应用程序没有运行 我也可以在所
  • 内省和反思有什么区别?

    任何人都可以从语言 环境不可知论的角度解释这两个概念之间的区别吗 编程语言是否需要满足一组条件才能进行反思和 或内省 如果有的话 这些条件是什么 维基百科文章 http en wikipedia org wiki Type introspe
  • 更新错误“模块”对象不可调用后,pip 不再工作

    pip 更新后 pip 已完全停止工作 Z gt pip install matplotlib Traceback most recent call last File c program files python37 lib runpy
  • 在 U-Boot 中使用 I2C 读取多个字节

    我的 Freescale p1022tw 板的 I2C 驱动程序有问题 U Boot 的控制台上有一个从 I2C 设备读取的命令 i2c md chip address 0 1 2 of objects 当我从 id 为 0x60 地址为
  • 为什么使用 Object.create() 和 console.log() 时不显示属性?

    当我使用文字语法创建对象时 将对象打印到控制台会显示该对象foo和p财产 foo foo p 42 console log foo console log foo p Outputs p 42 当我使用 Object create 语法时
  • SWI序言中#=和=:=有什么区别

    What is the difference between and in SWI prolog I have found the definition from SWI prolog but still confused about it
  • php 析构函数在流畅的界面下调用得太早

    我发现 php 析构函数有一个非常奇怪的事情 基本上我有一个数据库管理类 它使用工厂加载适配器来定义应该加载哪个适配器 mysql mysqli等 我只会写下代码中有趣的部分 因为类本身更长 但代码不涉及当前的麻烦 该问题仅发生在 mysq
  • 从 git 中删除但保留在工作目录中

    我添加了一堆要由 git 跟踪的文件 但它们被错误地添加 并提交 它们应该存在于工作目录中 它们是我的 IDE 使用的临时文件 但不被 git 跟踪 我现在已经创建了一个 gitignore 文件并添加了适当的条目 但是将文件从 git 跟
  • KnexJS 迁移及相关种子数据

    我在学习 BookshelfJS KnexJS 从 SequelizeJS 切换 的过程中遇到了将数据导入到通过 KnexJS 中的迁移功能创建的多个表中的问题 有4张桌子 servers operating systems applica
  • 点击特定选项卡即可获取对应的详细信息

    html部分 div class tab content div class tab pane active div class row fluid div class span9 offset1 div div div div
  • 如何从网页访问 Dialogflow V2 API?

    我有一个网页 我想在其中使用对话流聊天机器人 这是一个自定义聊天窗口 因此我不想使用一键集成 我能够访问聊天代理V1 API使用 javascript ajax 通过传递客户端访问令牌在请求标头中 但我不知道该怎么做V2 API 我不清楚对
  • Android内部存储和本地目录中的文件

    Android 为您提供 getDir 我认为这意味着我将拥有 myappspace somedirectory 来在您的应用程序空间中创建一个目录 但是 当 android 给你一个错误时 如果你在 openFileOutput Inpu
  • 使用 Altair 对标准化堆积条形图进行排序

    我正在尝试根据特定顺序对标准化堆积条形图进行排序 我想要按此顺序排序的堆叠条 Order dict Paid work 1 Education 2 Sleep 3 Other unpaid work 4 Housework Shopping
  • SAS数字到字符的转换?

    当我们将数字转换为字符时 我们应该使用如下的数字格式 data test prodID 001 result put prodID 1 run proc print run 我也尝试过使用字符格式 1 而且它也有效 data test pr
  • 为什么我的 React 组件没有随着状态更新而更新?

    我构建了一个地图应用程序 需要在按下按钮后显示 消失一些地图图标 但当我从其父组件传递新的运动属性时 我不知道如何将其设置为重新渲染组件 父加载组件
  • Mysql 中使用 select where 查询区分大小写

    嗨 我正在使用 Java 前端和 Mysql 后端 其实在tbl test包含 name value abc 22 xyz 14 ABC 32 xyZ 4 ABc 4 在java中我尝试检索abc的值于是写了一段代码 ResultSet r
  • pandas 将数据帧转为 3D 数据

    似乎有很多可能性可以将平面表数据转换为 3d 数组 但我不知何故找不到一种有效的方法 假设我有一些带有 columns name type date 的数据价值 当我尝试通过 pivot index name columns type da
  • CSS 截掉输入框的末尾

    老天爷 为什么我的输入框右侧被切掉了 我研究了 chrome 中的填充和边距 但看不出是什么原因造成的 我对此很陌生 但这仍然是一个谜 http jsfiddle net GCt3z 1 http jsfiddle net GCt3z 1
  • DoctrineExtensions 软删除

    我正在使用 Doctrine2 设置 symfony2 并且我想使用 DoctrineExtensions Gedmo 我遵循了每一步 大多数都在工作 但我无法找到需要更改的配置文件 SoftDeleteable 可以工作 https gi
  • hive 版本 0.13.1 中的性能问题

    I use AWS EMR http docs aws amazon com ElasticMapReduce latest DeveloperGuide UsingEMR SupportedHiveVersions html运行我的 Hi