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

How to improve performance of loading data from NON Partition table into ORC partition table in HIVE

我是 Hive 查询的新手,我正在寻找从 Hive table 检索数据的最佳实践。我们启用了 TeZ 具有执行引擎并启用了矢量化。

我们想从 Hive table 生成报告,我从 TEZ 文档中了解到它可以用于实时报告。场景来自我的 WEB 应用程序,我想显示 Hive Query Select * 来自 Hive table on UI 的结果,但对于任何查询,在 hive 命令提示符下至少需要 20- 60 秒,即使配置单元 table 有 60 GB 数据,.

1) 谁能告诉我如何通过查询 Hive table 显示实时报告并在 10-30 秒

内立即在 UI 上显示结果

2) 我们发现的另一个问题是,最初我们有未分区的 table 指向 HDFS 中的 Blob/File,它的大小为 60 GB,有 200 列,当我们转储数据从未分区table到ORCtable(ORCtable被分区),需要3+小时,有没有办法提高将数据转储到ORC[=33=的性能].

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

的性能

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

我们正在测试 4 个节点,每个节点有 4 个 cpu 内核和 7 GB RAM 以及每个 VM 附加的 3 个磁盘。

谢谢, 马亨德

为了提高向ORC插入数据的速度table,你可以尝试以下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;

希望对您有所帮助!

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

Hive真正强大的地方在于批处理海量数据。