我希望你们都没事,
我需要将日志(数量巨大)保存到HDInsight中(进入blob然后使用配置单元以便通过某些BI Analytics软件查询它们) 有一天,我有30万个.json档案。问题是客户想要基于分钟的一些报告,所以这是我的粒度。
我正在考虑像这样进行静态分区:
CREATE EXTERNAL TABLE Logs (ex string, exTwo string)
PARTITIONED BY (yearMonthDay STRING, hour INT, minute INT)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe';
ALTER TABLE Logs ADD PARTITION (yearMonthDay = '20160901', hour = 12, minute = 51) LOCATION 'wasb://logs@storage.blob.core.windows.net/20160901/12/51';
因此,对于每天30万个文件,我会在每个分区上有大约30米/ 24小时/ 60分钟= 20800个json。 问题是,有一天我将有1440个分区(24小时x 60分钟),这是一个巨大的分区!
由于我无法找到“绝对不能超过X分区数”的最佳实践,我真的不知道这种方法是否有效,但我想NameNode对此不会很满意。
我阅读了一些关于分段表格的文章,我认为这样的方法可能会对我有所帮助:
CREATE EXTERNAL TABLE Logs (ex string, exTwo string, minutes int)
PARTITIONED BY (yearMonthDay STRING, hour INT)
CLUSTERED BY(minutes) INTO 60 BUCKETS;
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe';
-- I dont know yet if this sentece would work but I guess it is something like this
set hive.enforce.bucketing = true;
ALTER TABLE Logs ADD PARTITION (yearMonthDay = '20160901', hour = 12) LOCATION 'wasb://logs@storage.blob.core.windows.net/20160901/12';
这样做我每天会有24个分区,文件会在几分钟内完成。如果这种做法更好?
还有其他方法可以处理我目前未发现的大量数据吗? (我被迫使用HDInsight)
谢谢, 此致