我希望你们都很好,
我需要将日志(大量)保存到hdinsight中(保存到blob中,然后使用hive通过一些bi分析软件进行查询),一天之内我有大约3000万个.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';
因此,对于每天3000万个文件,每个分区上大约有3000万/24小时/60分钟=20800个json。问题是,一天内我会有1440个分区(24小时x60分钟),而这是一个巨大的分区数量!
由于我没有找到一个“不能超过x个分区”的最佳实践,我真的不知道这种方法是否有效,但我猜namenode不会很满意这个。
我读了一些关于带扣table的文章,我想也许这样的方法可以帮我多一点:
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)
谢谢,问候
暂无答案!
目前还没有任何答案,快来回答吧!