Hadoop中的Hive存储,有趣的发现但不明白

时间:2016-10-03 14:56:55

标签: hadoop hive storage

这是关于hive / hadoop的一个发现,我有一个名为titles的表,我将它分成两部分,一部分是titles20000,另一部分是titles20000,行计数看起来不错,但数据大小看起来不同,请参阅这里的截图来自namenode,输入"主机地址:50070"在浏览器中: enter image description here

查看Block Size,第一个表标题有4个块,而拆分子表每个只有1个。

我还通过在hive中执行show属性来检查dataSize的另一种方式: enter image description here

我对行数进行了快速计算:

n = titles: 443309
n1 = titles20000: 14781
n2 = titles20000more: 428528
n = n1 + n2 = 443309
% of n1 =  3%
% of n2 = 97%

这是正确的。

然后我对totalSize做了另一个快速计算:

n = titles: 19934943
n1 = where emp_no < 20000: 624642
n2 = where emp_no >=20000: 18423685
n1+n2 = 19048327 < n

显然,这符合之前的观察,问题是:

对于原始表标题,它使用了4个128MB块 对于拆分的第二个表titles20000,它包含97%的行,但仅使用1个128MB块

在第一个屏幕截图中,尺寸(第4列)的含义是什么?

怎么会发生这种情况?

1 个答案:

答案 0 :(得分:1)

尺寸是数据的实际尺寸。

块大小是存储数据的块的大小。

您的原始表使用四个块,因为它的数据是由使用四个Mapper的Map-only作业创建的。当数据被复制到其他表中时,它似乎已合并为一个块。