gpt4 book ai didi

hadoop - 在 HIVE 的 select 语句中写入大量磁盘 io

转载 作者:可可西里 更新时间:2023-11-01 15:31:17 26 4
gpt4 key购买 nike

在配置单元中我运行一个查询-

select ret[0],ret[1],ret[2],ret[3],ret[4],ret[5],ret[6] from (select combined1(extra) as ret from log_test1) a ;

这里ret[0],ret[1],ret[2] ...是域、日期、IP 等。此查询正在磁盘上进行大量写入。

iostat 结果在集群中的一个盒子上。

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
20.65 0.00 1.82 57.14 0.00 20.39
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
xvda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
xvdb 0.00 0.00 0.00 535.00 0.00 23428.00 87.58 143.94 269.11 0.00 269.11 1.87 100.00

我的映射器基本上卡在磁盘 IO 中。我有 3 个盒子集群。我的 yarn 配置是

Mapper memory(mapreduce.map.memory.mb)=2GB, 
I/O Sort Memory Buffer=1 GB.
I/O Sort Spill Percent=0.8

我的工作计数器是

FILE: Number of bytes read  0 
FILE: Number of bytes written 2568435
HDFS: Number of bytes read 1359720216
HDFS: Number of bytes written 19057298627

Virtual memory (bytes) snapshot 24351916032
Total committed heap usage (bytes) 728760320
Physical memory (bytes) snapshot 2039455744
Map input records 76076426
Input split bytes 2738
GC time elapsed (ms) 55602
Spilled Records 0

由于映射器最初应该将所有内容写入 RAM,当 RAM 变满(I/O 排序内存缓冲区)时,它应该将数据溢出到磁盘中。但正如我所见,Spilled Records=0 并且 mapper 没有使用完整的 RAM,磁盘写入仍然很重。

即使我正在运行查询

select combined1(extra) from log_test1;

我得到同样沉重的磁盘 io 写入。

这种大量磁盘写入的原因是什么?我该如何减少这种大量磁盘写入?在这种情况下,磁盘 io 正在成为我的映射器的瓶颈。

最佳答案

可能是您的子查询在处理的第二阶段发生之前被写入磁盘。您应该使用 Explain 来检查执行计划。

您可以尝试将子查询重写为 CTE https://cwiki.apache.org/confluence/display/Hive/Common+Table+Expression

关于hadoop - 在 HIVE 的 select 语句中写入大量磁盘 io,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32477394/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com