在hive中我运行查询 -
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
由于mapper最初应该在RAM中写入所有内容,当RAM满了(I / O Sort Memory Buffer)时,它应该将数据溢出到磁盘中。但是正如我所看到的那样,Spilled Records=0
并且mapper也没有使用完整的RAM,但仍然有如此繁重的磁盘写入。
即使我正在运行查询
select combined1(extra) from log_test1;
我正在写相同的重磁盘。
这种重磁盘写入的原因是什么?如何减少这种重磁盘写入?在这种情况下,磁盘io正成为我的映射器的瓶颈。