Hadoop分区。如何有效地设计Hive/Impala表?

问题描述:

考虑到以下事实,您如何有效地设计Hive/Impala表?Hadoop分区。如何有效地设计Hive/Impala表?

  1. 该表格每 一天接收约1亿行的工具数据。它接收数据的日期存储在表中的 列中以及其工具ID。
  2. 每个工具收到约 每天运行500次,由列运行ID标识。每个运行ID 包含大约1mb大小的数据。
  3. 该块的默认大小为64 MB。
  4. 可以按日期,工具ID和运行ID按此顺序搜索表格。
+1

到目前为止,你有什么考虑? – dg99

+0

[欢迎来到SO!](http://stackoverflow.com/help/how-to-ask)请更新您的发现,否则问题会变得太广泛! –

如果您正在对此数据进行分析,那么使用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