重磅磁盘io在HIVE中的select语句中写入

时间:2015-09-09 10:43:43

标签: hadoop mapreduce hive yarn

在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正成为我的映射器的瓶颈。

0 个答案:

没有答案