Hadoop分区。如何有效地设计Hive/Impala表?
问题描述:
考虑到以下事实,您如何有效地设计Hive/Impala表?Hadoop分区。如何有效地设计Hive/Impala表?
- 该表格每 一天接收约1亿行的工具数据。它接收数据的日期存储在表中的 列中以及其工具ID。
- 每个工具收到约 每天运行500次,由列运行ID标识。每个运行ID 包含大约1mb大小的数据。
- 该块的默认大小为64 MB。
- 可以按日期,工具ID和运行ID按此顺序搜索表格。
答
如果您正在对此数据进行分析,那么使用Impala的坚实选择是使用Parquet格式。对我们的用户来说运行良好的是根据记录中的日期值按年,月,日来划分日期。
因此,例如CREATE TABLE FOO(tool_id INT,eff_dt时间戳)分区(年INT,月INT,天INT)存储拼花
当数据加载到这个表中,我们使用这样的事情来创建动态分区:
INSERT INTO foo partition (year, month, day)
SELECT tool_id, eff_dt, year(eff_dt), month(eff_dt), day(eff_dt)
FROM source_table;
然后你训练你的用户,如果他们想要最好的性能,以年,月,日增加他们WHERE
子句,以便它击中了更好的性能的分区。然后让他们在SELECT
声明中添加eff_dt
,以便在最终结果中看到他们喜欢的格式的日期值。
在CDH中,Parquet默认将数据存储在256MB块(可配置)中。以下是如何配置它:http://www.cloudera.com/documentation/enterprise/latest/topics/impala_parquet_file_size.html
到目前为止,你有什么考虑? – dg99
[欢迎来到SO!](http://stackoverflow.com/help/how-to-ask)请更新您的发现,否则问题会变得太广泛! –