我有一堆 csv 文件存储在 blob 存储中,其中包含如下记录:
2016-04-19 20:26:01.0299,+05:30,ecc84966-9bc0-4bef-9cd2-ad79c25be278,test001,178.03499442294,,Good
2016-04-19 20:26:02.0303,+05:30,ecc84966-9bc0-4bef-9cd2-ad79c25be278,test001,160.205223861246,,Good
我使用以下命令创建了一个外部 Hive 表
CREATE EXTERNAL TABLE my_history (
DataTimestamp Timestamp,
TimezoneOffset String,
SystemGuid String,
TagName String,
NumericValue Double,
StringValue String
)
PARTITIONED BY (year int, month int, day int, hour int)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
STORED AS TEXTFILE LOCATION 'wasb://mycontainer@mystorage.blob.core.windows.net/';
并设法为一个月的数据添加了许多如下所示的分区
ALTER TABLE my_history ADD IF NOT EXISTS PARTITION (year=2016, month = 03, day= 16, hour=00) LOCATION "Year=2016/Month=03/Day=16/Hour=00"
表中有大约135,733,286 条记录,至少下面的 Hive 查询是这样select count(*) from my_history
说的。
现在我有以下两个问题:
1. Jupyter 挂起
当我执行这样的查询时,我hiveContext.sql("select count(*) from my_history").show()
没有得到任何结果,甚至没有异常,因为从 Hive 运行相同的结果在很长一段时间后说 400+ 秒后给了我 135,733,286 作为结果。
2. 缓慢的结果
我像这样在 Hive 上尝试了一个简单的重复查询
SELECT
my_history.DataTimestamp,
my_history.TagName,
COUNT(*) as count,
MIN(my_history.NumericValue) as min_value,
MAX(my_history.NumericValue) as max_value
FROM
default.my_history
WHERE
my_history.TagName = 'test021'
GROUP BY
my_history.TagName,
my_history.DataTimestamp
HAVING
count > 1;
返回结果需要近 450 秒,我有点希望它在一小部分时间内返回结果,因为我的 HDInsight 集群上有近 60 个内核。再次从 Jupyter 运行它并没有产生任何结果,也没有多次运行相同的查询提高了性能,因为我读到 Spark 为下一个查询缓存了 rdd。
我在这里想念什么?
谢谢基兰