我有一堆存储在blob存储中的csv文件,其中包含如下记录:
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
我使用以下命令
创建了一个External 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条记录,至少是select count(*) from my_history
的以下Hive查询所说的内容。
现在我有以下两个问题:
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。
我在这里错过了什么?
由于 基兰
答案 0 :(得分:0)
如果Yarn中没有资源为您的笔记本启动新的spark应用程序,Jupyter可能会挂起。在这种情况下,Jupyter将等待资源可用。其他笔记本电脑的其他火花应用程序可能会消耗资源。检查Yarn UI以查看是否有其他应用程序正在运行,以及是否有可用资源。您可以从此UI中终止其他应用程序。或者在笔记本电脑的情况下,您可以使用Jupyter“运行笔记本”UI关闭它们。
慢查询可能是由许多问题引起的。首先要检查的是确保您的spark应用程序使用Yarn中的所有可用内核。在Preview中,笔记本提供了大约25%的资源。您可以使用%% configure命令更改该分配。将核心数设置为4,将执行程序数设置为15: %% configure -f
{“name”:“remotesparkmagics-sample”,“executorMemory”:“12G”,“executorCores”:4,“numExecutors”:15} 这应该为您的应用程序提供所有60个内核。