如何提高将数据从NON分区表加载到HIVE中的ORC分区表中的性能

时间:2015-03-07 21:41:30

标签: hadoop hive yarn hdinsight

我是Hive Querying的新手,我正在寻找从Hive表中检索数据的最佳做法。我们已启用TeZ具有执行引擎和启用矢量化。

我们想从Hive表做报告,我从TEZ文件中读到它可以用于实时报告。场景来自我的WEB应用程序,我想从UI上的Hive表中显示来自Hive Query Select *的结果,但对于任何查询,在hive命令提示符中至少需要20-60秒,即使hive表有60 GB数据,。

1)任何人都可以告诉我如何通过查询Hive表来显示实时报告,并在10-30秒内立即在UI上显示结果

2)我们发现的另一个问题是,最初我们将Un-Partitioned表指向HDFS中的Blob / File,当我们将数据从Un-Partitioned表转储到ORC时,它的大小为60 GB,包含200列table(ORC表是分区的),需要3 + hrs,有没有办法提高将数据转储到ORC表中的性能。

3)当我们使用bucketing查询非分区表时,插入到hive表并查询比ORC表上的select查询花费更少的时间,但是hive表中的记录数增加了ORC表的SELECT查询比带水桶的桌子更好。有没有办法提高小数据集的性能。由于它是初始阶段,我们每个月都会将50 GB数据加载到Hive表中。但它可以增加,我们希望提高将数据加载到Orc分区表的性能。

4)TEZ支持交互式,减少延迟并深入支持报告。如何启用我的向下钻取报告以在人类响应时间内(即5-40秒)从Hive(应该是交互式)获取数据。

我们正在测试4个节点,每个节点有4个CPU核心和7 GB RAM,3个磁盘连接到每个VM。

谢谢, Mahender

2 个答案:

答案 0 :(得分:3)

为了提高向ORC表插入数据的速度,您可以尝试使用以下parameters

hive.exec.orc.memory.pool 
hive.exec.orc.default.stripe.size
hive.exec.orc.default.block.size 
hive.exec.orc.default.buffer.size
dfs.blocksize

此外,您可能会看到,压缩是否也可以帮助您。例如:

SET mapreduce.output.fileoutputformat.compress.codec = org.apache.hadoop.io.compress.SnappyCodec;
SET hive.exec.compress.intermediate = true;

希望它有所帮助!

答案 1 :(得分:3)

首先。 HIVE不适用于实时数据处理。无论数据有多小,查询都需要一段时间才能返回数据。

蜂巢的真正力量在于批量处理大量数据。